/ Hex Artifact Content
Login

Artifact f4920c10d7208ac55ee03882de9709cf39a83fec:


0000: 2f 2a 0a 2a 2a 20 32 30 31 36 20 53 65 70 74 65  /*.** 2016 Septe
0010: 6d 62 65 72 20 31 30 0a 2a 2a 0a 2a 2a 20 54 68  mber 10.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 69 73 20 66  ******.** This f
0180: 69 6c 65 20 63 6f 6e 74 61 69 6e 73 20 74 65 73  ile contains tes
0190: 74 20 63 6f 64 65 20 74 6f 20 64 65 6c 65 74 65  t code to delete
01a0: 20 61 6e 20 53 51 4c 69 74 65 20 64 61 74 61 62   an SQLite datab
01b0: 61 73 65 20 61 6e 64 20 61 6c 6c 0a 2a 2a 20 6f  ase and all.** o
01c0: 66 20 69 74 73 20 61 73 73 6f 63 69 61 74 65 64  f its associated
01d0: 20 66 69 6c 65 73 2e 20 41 73 73 6f 63 69 61 74   files. Associat
01e0: 65 64 20 66 69 6c 65 73 20 69 6e 63 6c 75 64 65  ed files include
01f0: 3a 0a 2a 2a 0a 2a 2a 20 20 20 2a 20 54 68 65 20  :.**.**   * The 
0200: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 2e 0a 2a 2a  journal file..**
0210: 20 20 20 2a 20 54 68 65 20 77 61 6c 20 66 69 6c     * The wal fil
0220: 65 2e 0a 2a 2a 20 20 20 2a 20 54 68 65 20 53 51  e..**   * The SQ
0230: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f  LITE_ENABLE_8_3_
0240: 4e 41 4d 45 53 20 76 65 72 73 69 6f 6e 20 6f 66  NAMES version of
0250: 20 74 68 65 20 64 62 2c 20 6a 6f 75 72 6e 61 6c   the db, journal
0260: 20 6f 72 20 77 61 6c 20 66 69 6c 65 73 2e 0a 2a   or wal files..*
0270: 2a 20 20 20 2a 20 46 69 6c 65 73 20 63 72 65 61  *   * Files crea
0280: 74 65 64 20 62 79 20 74 68 65 20 74 65 73 74 5f  ted by the test_
0290: 6d 75 6c 74 69 70 6c 65 78 2e 63 20 6d 6f 64 75  multiplex.c modu
02a0: 6c 65 20 74 6f 20 65 78 74 65 6e 64 20 61 6e 79  le to extend any
02b0: 20 6f 66 20 74 68 65 20 0a 2a 2a 20 20 20 20 20   of the .**     
02c0: 61 62 6f 76 65 2e 0a 2a 2f 0a 0a 23 69 66 20 53  above..*/..#if S
02d0: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 23 20 20  QLITE_OS_WIN.#  
02e0: 69 6e 63 6c 75 64 65 20 3c 69 6f 2e 68 3e 0a 23  include <io.h>.#
02f0: 20 20 64 65 66 69 6e 65 20 46 5f 4f 4b 20 30 0a    define F_OK 0.
0300: 23 65 6c 73 65 0a 23 20 20 69 6e 63 6c 75 64 65  #else.#  include
0310: 20 3c 75 6e 69 73 74 64 2e 68 3e 0a 23 65 6e 64   <unistd.h>.#end
0320: 69 66 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72  if.#include <str
0330: 69 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20  ing.h>.#include 
0340: 3c 65 72 72 6e 6f 2e 68 3e 0a 23 69 6e 63 6c 75  <errno.h>.#inclu
0350: 64 65 20 22 73 71 6c 69 74 65 33 2e 68 22 0a 0a  de "sqlite3.h"..
0360: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
0370: 20 23 64 65 66 69 6e 65 73 20 61 72 65 20 63 6f   #defines are co
0380: 70 69 65 64 20 66 72 6f 6d 20 74 65 73 74 5f 6d  pied from test_m
0390: 75 6c 74 69 70 6c 65 78 2e 63 20 2a 2f 0a 23 69  ultiplex.c */.#i
03a0: 66 6e 64 65 66 20 4d 58 5f 43 48 55 4e 4b 5f 4e  fndef MX_CHUNK_N
03b0: 55 4d 42 45 52 20 0a 23 20 64 65 66 69 6e 65 20  UMBER .# define 
03c0: 4d 58 5f 43 48 55 4e 4b 5f 4e 55 4d 42 45 52 20  MX_CHUNK_NUMBER 
03d0: 32 39 39 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  299.#endif.#ifnd
03e0: 65 66 20 53 51 4c 49 54 45 5f 4d 55 4c 54 49 50  ef SQLITE_MULTIP
03f0: 4c 45 58 5f 4a 4f 55 52 4e 41 4c 5f 38 5f 33 5f  LEX_JOURNAL_8_3_
0400: 4f 46 46 53 45 54 0a 23 20 64 65 66 69 6e 65 20  OFFSET.# define 
0410: 53 51 4c 49 54 45 5f 4d 55 4c 54 49 50 4c 45 58  SQLITE_MULTIPLEX
0420: 5f 4a 4f 55 52 4e 41 4c 5f 38 5f 33 5f 4f 46 46  _JOURNAL_8_3_OFF
0430: 53 45 54 20 34 30 30 0a 23 65 6e 64 69 66 0a 23  SET 400.#endif.#
0440: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 55  ifndef SQLITE_MU
0450: 4c 54 49 50 4c 45 58 5f 57 41 4c 5f 38 5f 33 5f  LTIPLEX_WAL_8_3_
0460: 4f 46 46 53 45 54 0a 23 20 64 65 66 69 6e 65 20  OFFSET.# define 
0470: 53 51 4c 49 54 45 5f 4d 55 4c 54 49 50 4c 45 58  SQLITE_MULTIPLEX
0480: 5f 57 41 4c 5f 38 5f 33 5f 4f 46 46 53 45 54 20  _WAL_8_3_OFFSET 
0490: 37 30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  700.#endif../*.*
04a0: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69  * This routine i
04b0: 73 20 61 20 63 6f 70 79 20 6f 66 20 28 6d 6f 73  s a copy of (mos
04c0: 74 20 6f 66 29 20 74 68 65 20 63 6f 64 65 20 66  t of) the code f
04d0: 72 6f 6d 20 53 51 4c 69 74 65 20 66 75 6e 63 74  rom SQLite funct
04e0: 69 6f 6e 0a 2a 2a 20 73 71 6c 69 74 65 33 46 69  ion.** sqlite3Fi
04f0: 6c 65 53 75 66 66 69 78 33 28 29 2e 20 49 74 20  leSuffix3(). It 
0500: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 66 69 6c  modifies the fil
0510: 65 6e 61 6d 65 20 69 6e 20 62 75 66 66 65 72 20  ename in buffer 
0520: 7a 20 69 6e 20 74 68 65 0a 2a 2a 20 73 61 6d 65  z in the.** same
0530: 20 77 61 79 20 61 73 20 53 51 4c 69 74 65 20 64   way as SQLite d
0540: 6f 65 73 20 77 68 65 6e 20 69 6e 20 38 2e 33 20  oes when in 8.3 
0550: 66 69 6c 65 6e 61 6d 65 73 20 6d 6f 64 65 2e 0a  filenames mode..
0560: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
0570: 71 6c 69 74 65 33 44 65 6c 65 74 65 38 33 4e 61  qlite3Delete83Na
0580: 6d 65 28 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69  me(char *z){.  i
0590: 6e 74 20 69 2c 20 73 7a 3b 0a 20 20 73 7a 20 3d  nt i, sz;.  sz =
05a0: 20 73 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 66 6f   strlen(z);.  fo
05b0: 72 28 69 3d 73 7a 2d 31 3b 20 69 3e 30 20 26 26  r(i=sz-1; i>0 &&
05c0: 20 7a 5b 69 5d 21 3d 27 2f 27 20 26 26 20 7a 5b   z[i]!='/' && z[
05d0: 69 5d 21 3d 27 2e 27 3b 20 69 2d 2d 29 7b 7d 0a  i]!='.'; i--){}.
05e0: 20 20 69 66 28 20 7a 5b 69 5d 3d 3d 27 2e 27 20    if( z[i]=='.' 
05f0: 26 26 20 28 73 7a 3e 69 2b 34 29 20 29 20 6d 65  && (sz>i+4) ) me
0600: 6d 6d 6f 76 65 28 26 7a 5b 69 2b 31 5d 2c 20 26  mmove(&z[i+1], &
0610: 7a 5b 73 7a 2d 33 5d 2c 20 34 29 3b 0a 7d 0a 0a  z[sz-3], 4);.}..
0620: 2f 2a 0a 2a 2a 20 7a 46 69 6c 65 20 69 73 20 61  /*.** zFile is a
0630: 20 66 69 6c 65 6e 61 6d 65 2e 20 41 73 73 75 6d   filename. Assum
0640: 69 6e 67 20 6e 6f 20 65 72 72 6f 72 20 6f 63 63  ing no error occ
0650: 75 72 73 2c 20 69 66 20 74 68 69 73 20 66 69 6c  urs, if this fil
0660: 65 20 65 78 69 73 74 73 2c 20 0a 2a 2a 20 73 65  e exists, .** se
0670: 74 20 2a 70 62 45 78 69 73 74 73 20 74 6f 20 74  t *pbExists to t
0680: 72 75 65 20 61 6e 64 20 75 6e 6c 69 6e 6b 20 69  rue and unlink i
0690: 74 2e 20 4f 72 2c 20 69 66 20 74 68 65 20 66 69  t. Or, if the fi
06a0: 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  le does not exis
06b0: 74 2c 0a 2a 2a 20 73 65 74 20 2a 70 62 45 78 69  t,.** set *pbExi
06c0: 73 74 73 20 74 6f 20 66 61 6c 73 65 20 62 65 66  sts to false bef
06d0: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 2a  ore returning..*
06e0: 2a 0a 2a 2a 20 49 66 20 61 6e 20 65 72 72 6f 72  *.** If an error
06f0: 20 6f 63 63 75 72 73 2c 20 74 68 65 20 76 61 6c   occurs, the val
0700: 75 65 20 6f 66 20 65 72 72 6e 6f 20 69 73 20 72  ue of errno is r
0710: 65 74 75 72 6e 65 64 2e 20 4f 72 2c 20 69 66 20  eturned. Or, if 
0720: 6e 6f 20 65 72 72 6f 72 0a 2a 2a 20 6f 63 63 75  no error.** occu
0730: 72 73 2c 20 7a 65 72 6f 20 69 73 20 72 65 74 75  rs, zero is retu
0740: 72 6e 65 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  rned..*/.static 
0750: 69 6e 74 20 73 71 6c 69 74 65 33 44 65 6c 65 74  int sqlite3Delet
0760: 65 55 6e 6c 69 6e 6b 49 66 45 78 69 73 74 73 28  eUnlinkIfExists(
0770: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
0780: 65 2c 20 69 6e 74 20 2a 70 62 45 78 69 73 74 73  e, int *pbExists
0790: 29 7b 0a 20 20 69 6e 74 20 72 63 3b 0a 20 20 72  ){.  int rc;.  r
07a0: 63 20 3d 20 61 63 63 65 73 73 28 7a 46 69 6c 65  c = access(zFile
07b0: 2c 20 46 5f 4f 4b 29 3b 0a 20 20 69 66 28 20 72  , F_OK);.  if( r
07c0: 63 20 29 7b 0a 20 20 20 20 69 66 28 20 65 72 72  c ){.    if( err
07d0: 6e 6f 3d 3d 45 4e 4f 45 4e 54 20 29 7b 20 0a 20  no==ENOENT ){ . 
07e0: 20 20 20 20 20 69 66 28 20 70 62 45 78 69 73 74       if( pbExist
07f0: 73 20 29 20 2a 70 62 45 78 69 73 74 73 20 3d 20  s ) *pbExists = 
0800: 30 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  0;.      return 
0810: 30 3b 20 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  0; .    }.    re
0820: 74 75 72 6e 20 65 72 72 6e 6f 3b 0a 20 20 7d 0a  turn errno;.  }.
0830: 20 20 69 66 28 20 70 62 45 78 69 73 74 73 20 29    if( pbExists )
0840: 20 2a 70 62 45 78 69 73 74 73 20 3d 20 31 3b 0a   *pbExists = 1;.
0850: 20 20 72 63 20 3d 20 75 6e 6c 69 6e 6b 28 7a 46    rc = unlink(zF
0860: 69 6c 65 29 3b 0a 20 20 69 66 28 20 72 63 20 29  ile);.  if( rc )
0870: 20 72 65 74 75 72 6e 20 65 72 72 6e 6f 3b 0a 20   return errno;. 
0880: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a   return 0;.}../*
0890: 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20 64  .** Delete the d
08a0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 64 65  atabase file ide
08b0: 6e 74 69 66 69 65 64 20 62 79 20 74 68 65 20 73  ntified by the s
08c0: 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74 20 70  tring argument p
08d0: 61 73 73 65 64 20 74 6f 20 74 68 69 73 0a 2a 2a  assed to this.**
08e0: 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 65 20 73   function. The s
08f0: 74 72 69 6e 67 20 6d 75 73 74 20 63 6f 6e 74 61  tring must conta
0900: 69 6e 20 61 20 66 69 6c 65 6e 61 6d 65 2c 20 6e  in a filename, n
0910: 6f 74 20 61 6e 20 53 51 4c 69 74 65 20 55 52 49  ot an SQLite URI
0920: 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  ..*/.int sqlite3
0930: 5f 64 65 6c 65 74 65 5f 64 61 74 61 62 61 73 65  _delete_database
0940: 28 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  (.  const char *
0950: 7a 46 69 6c 65 20 20 20 20 20 20 20 20 20 20 20  zFile           
0960: 20 20 20 20 2f 2a 20 46 69 6c 65 20 74 6f 20 64      /* File to d
0970: 65 6c 65 74 65 20 2a 2f 0a 29 7b 0a 20 20 63 68  elete */.){.  ch
0980: 61 72 20 2a 7a 42 75 66 3b 20 20 20 20 20 20 20  ar *zBuf;       
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
09a0: 20 42 75 66 66 65 72 20 74 6f 20 73 70 72 69 6e   Buffer to sprin
09b0: 74 66 28 29 20 66 69 6c 65 6e 61 6d 65 73 20 74  tf() filenames t
09c0: 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 66 3b  o */.  int nBuf;
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
09f0: 66 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  f buffer in byte
0a00: 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20  s */.  int rc = 
0a10: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0;              
0a20: 20 20 20 20 20 20 20 2f 2a 20 53 79 73 74 65 6d         /* System
0a30: 20 65 72 72 6f 72 20 63 6f 64 65 20 2a 2f 0a 20   error code */. 
0a40: 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a60: 20 2f 2a 20 49 74 65 72 61 74 65 20 74 68 72 6f   /* Iterate thro
0a70: 75 67 68 20 61 7a 46 6d 74 5b 5d 20 61 6e 64 20  ugh azFmt[] and 
0a80: 61 4d 46 69 6c 65 5b 5d 20 2a 2f 0a 0a 20 20 63  aMFile[] */..  c
0a90: 6f 6e 73 74 20 63 68 61 72 20 2a 61 7a 46 6d 74  onst char *azFmt
0aa0: 5b 5d 20 3d 20 7b 20 22 25 73 22 2c 20 22 25 73  [] = { "%s", "%s
0ab0: 2d 6a 6f 75 72 6e 61 6c 22 2c 20 22 25 73 2d 77  -journal", "%s-w
0ac0: 61 6c 22 2c 20 22 25 73 2d 73 68 6d 22 20 7d 3b  al", "%s-shm" };
0ad0: 0a 0a 20 20 73 74 72 75 63 74 20 4d 46 69 6c 65  ..  struct MFile
0ae0: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
0af0: 72 20 2a 7a 46 6d 74 3b 0a 20 20 20 20 69 6e 74  r *zFmt;.    int
0b00: 20 69 4f 66 66 73 65 74 3b 0a 20 20 20 20 69 6e   iOffset;.    in
0b10: 74 20 62 38 33 3b 0a 20 20 7d 20 61 4d 46 69 6c  t b83;.  } aMFil
0b20: 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 7b 20 22 25  e[] = {.    { "%
0b30: 73 25 30 33 64 22 2c 20 20 20 20 20 20 20 20 20  s%03d",         
0b40: 30 2c 20 20 20 30 20 7d 2c 0a 20 20 20 20 7b 20  0,   0 },.    { 
0b50: 22 25 73 2d 6a 6f 75 72 6e 61 6c 25 30 33 64 22  "%s-journal%03d"
0b60: 2c 20 30 2c 20 20 20 30 20 7d 2c 0a 20 20 20 20  , 0,   0 },.    
0b70: 7b 20 22 25 73 2d 77 61 6c 25 30 33 64 22 2c 20  { "%s-wal%03d", 
0b80: 20 20 20 20 30 2c 20 20 20 30 20 7d 2c 0a 20 20      0,   0 },.  
0b90: 20 20 7b 20 22 25 73 25 30 33 64 22 2c 20 20 20    { "%s%03d",   
0ba0: 20 20 20 20 20 20 30 2c 20 20 20 31 20 7d 2c 0a        0,   1 },.
0bb0: 20 20 20 20 7b 20 22 25 73 2d 6a 6f 75 72 6e 61      { "%s-journa
0bc0: 6c 25 30 33 64 22 2c 20 53 51 4c 49 54 45 5f 4d  l%03d", SQLITE_M
0bd0: 55 4c 54 49 50 4c 45 58 5f 4a 4f 55 52 4e 41 4c  ULTIPLEX_JOURNAL
0be0: 5f 38 5f 33 5f 4f 46 46 53 45 54 2c 20 31 20 7d  _8_3_OFFSET, 1 }
0bf0: 2c 0a 20 20 20 20 7b 20 22 25 73 2d 77 61 6c 25  ,.    { "%s-wal%
0c00: 30 33 64 22 2c 20 20 20 20 20 53 51 4c 49 54 45  03d",     SQLITE
0c10: 5f 4d 55 4c 54 49 50 4c 45 58 5f 57 41 4c 5f 38  _MULTIPLEX_WAL_8
0c20: 5f 33 5f 4f 46 46 53 45 54 2c 20 31 20 7d 2c 0a  _3_OFFSET, 1 },.
0c30: 20 20 7d 3b 0a 0a 20 20 2f 2a 20 41 6c 6c 6f 63    };..  /* Alloc
0c40: 61 74 65 20 61 20 62 75 66 66 65 72 20 6c 61 72  ate a buffer lar
0c50: 67 65 20 65 6e 6f 75 67 68 20 66 6f 72 20 61 6e  ge enough for an
0c60: 79 20 6f 66 20 74 68 65 20 66 69 6c 65 73 20 74  y of the files t
0c70: 68 61 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20  hat need to be. 
0c80: 20 2a 2a 20 64 65 6c 65 74 65 64 2e 20 20 2a 2f   ** deleted.  */
0c90: 0a 20 20 6e 42 75 66 20 3d 20 73 74 72 6c 65 6e  .  nBuf = strlen
0ca0: 28 7a 46 69 6c 65 29 20 2b 20 31 30 30 3b 0a 20  (zFile) + 100;. 
0cb0: 20 7a 42 75 66 20 3d 20 28 63 68 61 72 2a 29 73   zBuf = (char*)s
0cc0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 6e 42  qlite3_malloc(nB
0cd0: 75 66 29 3b 0a 20 20 69 66 28 20 7a 42 75 66 3d  uf);.  if( zBuf=
0ce0: 3d 30 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49  =0 ) return SQLI
0cf0: 54 45 5f 4e 4f 4d 45 4d 3b 0a 0a 20 20 2f 2a 20  TE_NOMEM;..  /* 
0d00: 44 65 6c 65 74 65 20 62 6f 74 68 20 74 68 65 20  Delete both the 
0d10: 72 65 67 75 6c 61 72 20 61 6e 64 20 38 2e 33 20  regular and 8.3 
0d20: 66 69 6c 65 6e 61 6d 65 73 20 76 65 72 73 69 6f  filenames versio
0d30: 6e 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ns of the databa
0d40: 73 65 2c 0a 20 20 2a 2a 20 6a 6f 75 72 6e 61 6c  se,.  ** journal
0d50: 2c 20 77 61 6c 20 61 6e 64 20 73 68 6d 20 66 69  , wal and shm fi
0d60: 6c 65 73 2e 20 20 2a 2f 0a 20 20 66 6f 72 28 69  les.  */.  for(i
0d70: 3d 30 3b 20 72 63 3d 3d 30 20 26 26 20 69 3c 73  =0; rc==0 && i<s
0d80: 69 7a 65 6f 66 28 61 7a 46 6d 74 29 2f 73 69 7a  izeof(azFmt)/siz
0d90: 65 6f 66 28 61 7a 46 6d 74 5b 30 5d 29 3b 20 69  eof(azFmt[0]); i
0da0: 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ++){.    sqlite3
0db0: 5f 73 6e 70 72 69 6e 74 66 28 6e 42 75 66 2c 20  _snprintf(nBuf, 
0dc0: 7a 42 75 66 2c 20 61 7a 46 6d 74 5b 69 5d 2c 20  zBuf, azFmt[i], 
0dd0: 7a 46 69 6c 65 29 3b 0a 20 20 20 20 72 63 20 3d  zFile);.    rc =
0de0: 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 55 6e   sqlite3DeleteUn
0df0: 6c 69 6e 6b 49 66 45 78 69 73 74 73 28 7a 42 75  linkIfExists(zBu
0e00: 66 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 72  f, 0);.    if( r
0e10: 63 3d 3d 30 20 26 26 20 69 21 3d 30 20 29 7b 0a  c==0 && i!=0 ){.
0e20: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 6c        sqlite3Del
0e30: 65 74 65 38 33 4e 61 6d 65 28 7a 42 75 66 29 3b  ete83Name(zBuf);
0e40: 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
0e50: 74 65 33 44 65 6c 65 74 65 55 6e 6c 69 6e 6b 49  te3DeleteUnlinkI
0e60: 66 45 78 69 73 74 73 28 7a 42 75 66 2c 20 30 29  fExists(zBuf, 0)
0e70: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
0e80: 2a 20 44 65 6c 65 74 65 20 61 6e 79 20 6d 75 6c  * Delete any mul
0e90: 74 69 70 6c 65 78 6f 72 20 66 69 6c 65 73 20 2a  tiplexor files *
0ea0: 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 72 63 3d  /.  for(i=0; rc=
0eb0: 3d 30 20 26 26 20 69 3c 73 69 7a 65 6f 66 28 61  =0 && i<sizeof(a
0ec0: 4d 46 69 6c 65 29 2f 73 69 7a 65 6f 66 28 61 4d  MFile)/sizeof(aM
0ed0: 46 69 6c 65 5b 30 5d 29 3b 20 69 2b 2b 29 7b 0a  File[0]); i++){.
0ee0: 20 20 20 20 73 74 72 75 63 74 20 4d 46 69 6c 65      struct MFile
0ef0: 20 2a 70 20 3d 20 26 61 4d 46 69 6c 65 5b 69 5d   *p = &aMFile[i]
0f00: 3b 0a 20 20 20 20 69 6e 74 20 69 43 68 75 6e 6b  ;.    int iChunk
0f10: 3b 0a 20 20 20 20 66 6f 72 28 69 43 68 75 6e 6b  ;.    for(iChunk
0f20: 3d 31 3b 20 69 43 68 75 6e 6b 3c 3d 4d 58 5f 43  =1; iChunk<=MX_C
0f30: 48 55 4e 4b 5f 4e 55 4d 42 45 52 3b 20 69 43 68  HUNK_NUMBER; iCh
0f40: 75 6e 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 69 6e  unk++){.      in
0f50: 74 20 62 45 78 69 73 74 73 3b 0a 20 20 20 20 20  t bExists;.     
0f60: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
0f70: 66 28 6e 42 75 66 2c 20 7a 42 75 66 2c 20 70 2d  f(nBuf, zBuf, p-
0f80: 3e 7a 46 6d 74 2c 20 7a 46 69 6c 65 2c 20 69 43  >zFmt, zFile, iC
0f90: 68 75 6e 6b 2b 70 2d 3e 69 4f 66 66 73 65 74 29  hunk+p->iOffset)
0fa0: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 62  ;.      if( p->b
0fb0: 38 33 20 29 20 73 71 6c 69 74 65 33 44 65 6c 65  83 ) sqlite3Dele
0fc0: 74 65 38 33 4e 61 6d 65 28 7a 42 75 66 29 3b 0a  te83Name(zBuf);.
0fd0: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
0fe0: 65 33 44 65 6c 65 74 65 55 6e 6c 69 6e 6b 49 66  e3DeleteUnlinkIf
0ff0: 45 78 69 73 74 73 28 7a 42 75 66 2c 20 26 62 45  Exists(zBuf, &bE
1000: 78 69 73 74 73 29 3b 0a 20 20 20 20 20 20 69 66  xists);.      if
1010: 28 20 62 45 78 69 73 74 73 3d 3d 30 20 7c 7c 20  ( bExists==0 || 
1020: 72 63 21 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  rc!=0 ) break;. 
1030: 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 73 71 6c 69     }.  }..  sqli
1040: 74 65 33 5f 66 72 65 65 28 7a 42 75 66 29 3b 0a  te3_free(zBuf);.
1050: 20 20 72 65 74 75 72 6e 20 28 72 63 20 3f 20 53    return (rc ? S
1060: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
1070: 4c 49 54 45 5f 4f 4b 29 3b 0a 7d 0a 0a 0a        LITE_OK);.}...