/ Hex Artifact Content
Login

Artifact 9515faa8ec176599d4a8288293ba8ec61f7b728a:


0000: 2f 2a 0a 2a 2a 20 54 68 69 73 20 75 74 69 6c 69  /*.** This utili
0010: 74 79 20 70 72 6f 67 72 61 6d 20 64 65 63 6f 64  ty program decod
0020: 65 73 20 61 6e 64 20 64 69 73 70 6c 61 79 73 20  es and displays 
0030: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  the content of t
0040: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 5f 73 74 61  he.** sqlite_sta
0050: 74 34 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  t4 table in the 
0060: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61  database file na
0070: 6d 65 64 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61  med on the comma
0080: 6e 64 0a 2a 2a 20 6c 69 6e 65 2e 0a 2a 2f 0a 23  nd.** line..*/.#
0090: 69 6e 63 6c 75 64 65 20 3c 73 74 64 69 6f 2e 68  include <stdio.h
00a0: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69  >.#include <stri
00b0: 6e 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  ng.h>.#include <
00c0: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
00d0: 64 65 20 3c 63 74 79 70 65 2e 68 3e 0a 23 69 6e  de <ctype.h>.#in
00e0: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e 68  clude "sqlite3.h
00f0: 22 0a 0a 74 79 70 65 64 65 66 20 73 71 6c 69 74  "..typedef sqlit
0100: 65 33 5f 69 6e 74 36 34 20 69 36 34 3b 20 20 20  e3_int64 i64;   
0110: 2f 2a 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  /* 64-bit signed
0120: 20 69 6e 74 65 67 65 72 20 74 79 70 65 20 2a 2f   integer type */
0130: 0a 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  .../*.** Convert
0140: 20 74 68 65 20 76 61 72 2d 69 6e 74 20 66 6f 72   the var-int for
0150: 6d 61 74 20 69 6e 74 6f 20 69 36 34 2e 20 20 52  mat into i64.  R
0160: 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72  eturn the number
0170: 20 6f 66 20 62 79 74 65 73 0a 2a 2a 20 69 6e 20   of bytes.** in 
0180: 74 68 65 20 76 61 72 2d 69 6e 74 2e 20 20 57 72  the var-int.  Wr
0190: 69 74 65 20 74 68 65 20 76 61 72 2d 69 6e 74 20  ite the var-int 
01a0: 76 61 6c 75 65 20 69 6e 74 6f 20 2a 70 56 61 6c  value into *pVal
01b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  ..*/.static int 
01c0: 64 65 63 6f 64 65 56 61 72 69 6e 74 28 63 6f 6e  decodeVarint(con
01d0: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
01e0: 20 2a 7a 2c 20 69 36 34 20 2a 70 56 61 6c 29 7b   *z, i64 *pVal){
01f0: 0a 20 20 69 36 34 20 76 20 3d 20 30 3b 0a 20 20  .  i64 v = 0;.  
0200: 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d 30  int i;.  for(i=0
0210: 3b 20 69 3c 38 3b 20 69 2b 2b 29 7b 0a 20 20 20  ; i<8; i++){.   
0220: 20 76 20 3d 20 28 76 3c 3c 37 29 20 2b 20 28 7a   v = (v<<7) + (z
0230: 5b 69 5d 26 30 78 37 66 29 3b 0a 20 20 20 20 69  [i]&0x7f);.    i
0240: 66 28 20 28 7a 5b 69 5d 26 30 78 38 30 29 3d 3d  f( (z[i]&0x80)==
0250: 30 20 29 7b 20 2a 70 56 61 6c 20 3d 20 76 3b 20  0 ){ *pVal = v; 
0260: 72 65 74 75 72 6e 20 69 2b 31 3b 20 7d 0a 20 20  return i+1; }.  
0270: 7d 0a 20 20 76 20 3d 20 28 76 3c 3c 38 29 20 2b  }.  v = (v<<8) +
0280: 20 28 7a 5b 69 5d 26 30 78 66 66 29 3b 0a 20 20   (z[i]&0xff);.  
0290: 2a 70 56 61 6c 20 3d 20 76 3b 0a 20 20 72 65 74  *pVal = v;.  ret
02a0: 75 72 6e 20 39 3b 0a 7d 0a 0a 0a 0a 69 6e 74 20  urn 9;.}....int 
02b0: 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c 20 63  main(int argc, c
02c0: 68 61 72 20 2a 2a 61 72 67 76 29 7b 0a 20 20 73  har **argv){.  s
02d0: 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 73 71  qlite3 *db;.  sq
02e0: 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74 6d  lite3_stmt *pStm
02f0: 74 3b 0a 20 20 63 68 61 72 20 2a 7a 49 64 78 20  t;.  char *zIdx 
0300: 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 2c 20 6a  = 0;.  int rc, j
0310: 2c 20 78 2c 20 79 2c 20 6d 78 48 64 72 3b 0a 20  , x, y, mxHdr;. 
0320: 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20   const unsigned 
0330: 63 68 61 72 20 2a 61 53 61 6d 70 6c 65 3b 0a 20  char *aSample;. 
0340: 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 0a 20 20   int nSample;.  
0350: 69 36 34 20 69 56 61 6c 3b 0a 20 20 63 6f 6e 73  i64 iVal;.  cons
0360: 74 20 63 68 61 72 20 2a 7a 53 65 70 3b 0a 20 20  t char *zSep;.  
0370: 69 6e 74 20 69 52 6f 77 20 3d 20 30 3b 0a 0a 20  int iRow = 0;.. 
0380: 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
0390: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
03a0: 72 72 2c 20 22 55 73 61 67 65 3a 20 25 73 20 44  rr, "Usage: %s D
03b0: 41 54 41 42 41 53 45 2d 46 49 4c 45 5c 6e 22 2c  ATABASE-FILE\n",
03c0: 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 65   argv[0]);.    e
03d0: 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 72 63  xit(1);.  }.  rc
03e0: 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28   = sqlite3_open(
03f0: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 3b 0a 20  argv[1], &db);. 
0400: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
0410: 4f 4b 20 7c 7c 20 64 62 3d 3d 30 20 29 7b 0a 20  OK || db==0 ){. 
0420: 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72     fprintf(stder
0430: 72 2c 20 22 43 61 6e 6e 6f 74 20 6f 70 65 6e 20  r, "Cannot open 
0440: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5b 25  database file [%
0450: 73 5d 5c 6e 22 2c 20 61 72 67 76 5b 31 5d 29 3b  s]\n", argv[1]);
0460: 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20  .    exit(1);.  
0470: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
0480: 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 0a  _prepare_v2(db,.
0490: 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
04a0: 74 62 6c 7c 7c 27 2e 27 7c 7c 69 64 78 2c 20 6e  tbl||'.'||idx, n
04b0: 45 71 2c 20 6e 4c 54 2c 20 6e 44 4c 74 2c 20 73  Eq, nLT, nDLt, s
04c0: 61 6d 70 6c 65 20 22 0a 20 20 20 20 20 20 20 20  ample ".        
04d0: 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61  "FROM sqlite_sta
04e0: 74 34 20 4f 52 44 45 52 20 42 59 20 31 22 2c 20  t4 ORDER BY 1", 
04f0: 2d 31 2c 0a 20 20 20 20 20 20 20 20 26 70 53 74  -1,.        &pSt
0500: 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63  mt, 0);.  if( rc
0510: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  !=SQLITE_OK || p
0520: 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 66  Stmt==0 ){.    f
0530: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
0540: 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
0550: 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20 20  rrmsg(db));.    
0560: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62  sqlite3_close(db
0570: 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
0580: 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 53 51 4c    }.  while( SQL
0590: 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33  ITE_ROW==sqlite3
05a0: 5f 73 74 65 70 28 70 53 74 6d 74 29 20 29 7b 0a  _step(pStmt) ){.
05b0: 20 20 20 20 69 66 28 20 7a 49 64 78 3d 3d 30 20      if( zIdx==0 
05c0: 7c 7c 20 73 74 72 63 6d 70 28 7a 49 64 78 2c 20  || strcmp(zIdx, 
05d0: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
05e0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
05f0: 28 70 53 74 6d 74 2c 30 29 29 21 3d 30 20 29 7b  (pStmt,0))!=0 ){
0600: 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 20  .      if( zIdx 
0610: 29 20 70 72 69 6e 74 66 28 22 5c 6e 2a 2a 2a 2a  ) printf("\n****
0620: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0630: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0640: 2a 2a 22 0a 20 20 20 20 20 20 20 20 20 20 20 20  **".            
0650: 20 20 20 20 20 20 20 20 20 20 20 20 22 2a 2a 2a              "***
0660: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 5c 6e 5c 6e 22  ***********\n\n"
0670: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
0680: 5f 66 72 65 65 28 7a 49 64 78 29 3b 0a 20 20 20  _free(zIdx);.   
0690: 20 20 20 7a 49 64 78 20 3d 20 73 71 6c 69 74 65     zIdx = sqlite
06a0: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
06b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
06c0: 65 78 74 28 70 53 74 6d 74 2c 30 29 29 3b 0a 20  ext(pStmt,0));. 
06d0: 20 20 20 20 20 69 52 6f 77 20 3d 20 30 3b 0a 20       iRow = 0;. 
06e0: 20 20 20 7d 0a 20 20 20 20 70 72 69 6e 74 66 28     }.    printf(
06f0: 22 25 73 20 73 61 6d 70 6c 65 20 25 64 20 2d 2d  "%s sample %d --
0700: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0720: 2d 2d 5c 6e 22 2c 20 7a 49 64 78 2c 20 2b 2b 69  --\n", zIdx, ++i
0730: 52 6f 77 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Row);.    printf
0740: 28 22 20 20 6e 45 71 20 20 20 20 3d 20 25 73 5c  ("  nEq    = %s\
0750: 6e 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  n", sqlite3_colu
0760: 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 31 29  mn_text(pStmt,1)
0770: 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  );.    printf(" 
0780: 20 6e 4c 74 20 20 20 20 3d 20 25 73 5c 6e 22 2c   nLt    = %s\n",
0790: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
07a0: 74 65 78 74 28 70 53 74 6d 74 2c 32 29 29 3b 0a  text(pStmt,2));.
07b0: 20 20 20 20 70 72 69 6e 74 66 28 22 20 20 6e 44      printf("  nD
07c0: 4c 74 20 20 20 3d 20 25 73 5c 6e 22 2c 20 73 71  Lt   = %s\n", sq
07d0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
07e0: 74 28 70 53 74 6d 74 2c 33 29 29 3b 0a 20 20 20  t(pStmt,3));.   
07f0: 20 70 72 69 6e 74 66 28 22 20 20 73 61 6d 70 6c   printf("  sampl
0800: 65 20 3d 20 78 27 22 29 3b 0a 20 20 20 20 61 53  e = x'");.    aS
0810: 61 6d 70 6c 65 20 3d 20 73 71 6c 69 74 65 33 5f  ample = sqlite3_
0820: 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74 6d  column_blob(pStm
0830: 74 2c 34 29 3b 0a 20 20 20 20 6e 53 61 6d 70 6c  t,4);.    nSampl
0840: 65 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  e = sqlite3_colu
0850: 6d 6e 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 34  mn_bytes(pStmt,4
0860: 29 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  );.    for(j=0; 
0870: 6a 3c 6e 53 61 6d 70 6c 65 3b 20 6a 2b 2b 29 20  j<nSample; j++) 
0880: 70 72 69 6e 74 66 28 22 25 30 32 78 22 2c 20 61  printf("%02x", a
0890: 53 61 6d 70 6c 65 5b 6a 5d 29 3b 0a 20 20 20 20  Sample[j]);.    
08a0: 70 72 69 6e 74 66 28 22 27 5c 6e 20 20 20 20 20  printf("'\n     
08b0: 20 20 20 20 20 22 29 3b 0a 20 20 20 20 7a 53 65       ");.    zSe
08c0: 70 20 3d 20 22 20 22 3b 0a 20 20 20 20 78 20 3d  p = " ";.    x =
08d0: 20 64 65 63 6f 64 65 56 61 72 69 6e 74 28 61 53   decodeVarint(aS
08e0: 61 6d 70 6c 65 2c 20 26 69 56 61 6c 29 3b 0a 20  ample, &iVal);. 
08f0: 20 20 20 69 66 28 20 69 56 61 6c 3c 78 20 7c 7c     if( iVal<x ||
0900: 20 69 56 61 6c 3e 6e 53 61 6d 70 6c 65 20 29 7b   iVal>nSample ){
0910: 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 20  .      printf(" 
0920: 3c 65 72 72 6f 72 3e 5c 6e 22 29 3b 0a 20 20 20  <error>\n");.   
0930: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20     continue;.   
0940: 20 7d 0a 20 20 20 20 79 20 3d 20 6d 78 48 64 72   }.    y = mxHdr
0950: 20 3d 20 28 69 6e 74 29 69 56 61 6c 3b 0a 20 20   = (int)iVal;.  
0960: 20 20 77 68 69 6c 65 28 20 78 3c 6d 78 48 64 72    while( x<mxHdr
0970: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 7a   ){.      int sz
0980: 3b 0a 20 20 20 20 20 20 69 36 34 20 76 3b 0a 20  ;.      i64 v;. 
0990: 20 20 20 20 20 78 20 2b 3d 20 64 65 63 6f 64 65       x += decode
09a0: 56 61 72 69 6e 74 28 61 53 61 6d 70 6c 65 2b 78  Varint(aSample+x
09b0: 2c 20 26 69 56 61 6c 29 3b 0a 20 20 20 20 20 20  , &iVal);.      
09c0: 69 66 28 20 78 3e 6d 78 48 64 72 20 29 20 62 72  if( x>mxHdr ) br
09d0: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 69  eak;.      if( i
09e0: 56 61 6c 3c 30 20 29 20 62 72 65 61 6b 3b 0a 20  Val<0 ) break;. 
09f0: 20 20 20 20 20 73 77 69 74 63 68 28 20 69 56 61       switch( iVa
0a00: 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 63 61 73  l ){.        cas
0a10: 65 20 30 3a 20 20 73 7a 20 3d 20 30 3b 20 20 62  e 0:  sz = 0;  b
0a20: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61  reak;.        ca
0a30: 73 65 20 31 3a 20 20 73 7a 20 3d 20 31 3b 20 20  se 1:  sz = 1;  
0a40: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
0a50: 61 73 65 20 32 3a 20 20 73 7a 20 3d 20 32 3b 20  ase 2:  sz = 2; 
0a60: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
0a70: 63 61 73 65 20 33 3a 20 20 73 7a 20 3d 20 33 3b  case 3:  sz = 3;
0a80: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
0a90: 20 63 61 73 65 20 34 3a 20 20 73 7a 20 3d 20 34   case 4:  sz = 4
0aa0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
0ab0: 20 20 63 61 73 65 20 35 3a 20 20 73 7a 20 3d 20    case 5:  sz = 
0ac0: 36 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  6;  break;.     
0ad0: 20 20 20 63 61 73 65 20 36 3a 20 20 73 7a 20 3d     case 6:  sz =
0ae0: 20 38 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20   8;  break;.    
0af0: 20 20 20 20 63 61 73 65 20 37 3a 20 20 73 7a 20      case 7:  sz 
0b00: 3d 20 38 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  = 8;  break;.   
0b10: 20 20 20 20 20 63 61 73 65 20 38 3a 20 20 73 7a       case 8:  sz
0b20: 20 3d 20 30 3b 20 20 62 72 65 61 6b 3b 0a 20 20   = 0;  break;.  
0b30: 20 20 20 20 20 20 63 61 73 65 20 39 3a 20 20 73        case 9:  s
0b40: 7a 20 3d 20 30 3b 20 20 62 72 65 61 6b 3b 0a 20  z = 0;  break;. 
0b50: 20 20 20 20 20 20 20 63 61 73 65 20 31 30 3a 0a         case 10:.
0b60: 20 20 20 20 20 20 20 20 63 61 73 65 20 31 31 3a          case 11:
0b70: 20 73 7a 20 3d 20 30 3b 20 20 62 72 65 61 6b 3b   sz = 0;  break;
0b80: 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74  .        default
0b90: 3a 20 73 7a 20 3d 20 28 69 6e 74 29 28 69 56 61  : sz = (int)(iVa
0ba0: 6c 2d 31 32 29 2f 32 3b 20 20 62 72 65 61 6b 3b  l-12)/2;  break;
0bb0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
0bc0: 66 28 20 79 2b 73 7a 3e 6e 53 61 6d 70 6c 65 20  f( y+sz>nSample 
0bd0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69  ) break;.      i
0be0: 66 28 20 69 56 61 6c 3d 3d 30 20 29 7b 0a 20 20  f( iVal==0 ){.  
0bf0: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73        printf("%s
0c00: 4e 55 4c 4c 22 2c 20 7a 53 65 70 29 3b 0a 20 20  NULL", zSep);.  
0c10: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69 56      }else if( iV
0c20: 61 6c 3d 3d 38 20 7c 7c 20 69 56 61 6c 3d 3d 39  al==8 || iVal==9
0c30: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e   ){.        prin
0c40: 74 66 28 22 25 73 25 64 22 2c 20 7a 53 65 70 2c  tf("%s%d", zSep,
0c50: 20 28 28 69 6e 74 29 69 56 61 6c 29 2d 38 29 3b   ((int)iVal)-8);
0c60: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
0c70: 20 69 56 61 6c 3c 3d 37 20 29 7b 0a 20 20 20 20   iVal<=7 ){.    
0c80: 20 20 20 20 76 20 3d 20 28 73 69 67 6e 65 64 20      v = (signed 
0c90: 63 68 61 72 29 61 53 61 6d 70 6c 65 5b 79 5d 3b  char)aSample[y];
0ca0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 31  .        for(j=1
0cb0: 3b 20 6a 3c 73 7a 3b 20 6a 2b 2b 29 7b 0a 20 20  ; j<sz; j++){.  
0cc0: 20 20 20 20 20 20 20 20 76 20 3d 20 28 76 3c 3c          v = (v<<
0cd0: 38 29 20 2b 20 61 53 61 6d 70 6c 65 5b 79 2b 6a  8) + aSample[y+j
0ce0: 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  ];.        }.   
0cf0: 20 20 20 20 20 69 66 28 20 69 56 61 6c 3d 3d 37       if( iVal==7
0d00: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 6f   ){.          do
0d10: 75 62 6c 65 20 72 3b 0a 20 20 20 20 20 20 20 20  uble r;.        
0d20: 20 20 6d 65 6d 63 70 79 28 26 72 2c 20 26 76 2c    memcpy(&r, &v,
0d30: 20 73 69 7a 65 6f 66 28 72 29 29 3b 0a 20 20 20   sizeof(r));.   
0d40: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
0d50: 73 25 23 67 22 2c 20 7a 53 65 70 2c 20 72 29 3b  s%#g", zSep, r);
0d60: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
0d70: 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66            printf
0d80: 28 22 25 73 25 6c 6c 64 22 2c 20 7a 53 65 70 2c  ("%s%lld", zSep,
0d90: 20 76 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20   v);.        }. 
0da0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 28       }else if( (
0db0: 69 56 61 6c 26 31 29 3d 3d 30 20 29 7b 0a 20 20  iVal&1)==0 ){.  
0dc0: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73        printf("%s
0dd0: 78 27 22 2c 20 7a 53 65 70 29 3b 0a 20 20 20 20  x'", zSep);.    
0de0: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 73      for(j=0; j<s
0df0: 7a 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  z; j++){.       
0e00: 20 20 20 70 72 69 6e 74 66 28 22 25 30 32 78 22     printf("%02x"
0e10: 2c 20 61 53 61 6d 70 6c 65 5b 79 2b 6a 5d 29 3b  , aSample[y+j]);
0e20: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
0e30: 20 20 20 70 72 69 6e 74 66 28 22 27 22 29 3b 0a     printf("'");.
0e40: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
0e50: 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c       printf("%s\
0e60: 22 22 2c 20 7a 53 65 70 29 3b 0a 20 20 20 20 20  "", zSep);.     
0e70: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 73 7a     for(j=0; j<sz
0e80: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
0e90: 20 20 63 68 61 72 20 63 20 3d 20 28 63 68 61 72    char c = (char
0ea0: 29 61 53 61 6d 70 6c 65 5b 79 2b 6a 5d 3b 0a 20  )aSample[y+j];. 
0eb0: 20 20 20 20 20 20 20 20 20 69 66 28 20 69 73 70           if( isp
0ec0: 72 69 6e 74 28 63 29 20 29 7b 0a 20 20 20 20 20  rint(c) ){.     
0ed0: 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d 27 22         if( c=='"
0ee0: 27 20 7c 7c 20 63 3d 3d 27 5c 5c 27 20 29 20 70  ' || c=='\\' ) p
0ef0: 75 74 63 68 61 72 28 27 5c 5c 27 29 3b 0a 20 20  utchar('\\');.  
0f00: 20 20 20 20 20 20 20 20 20 20 70 75 74 63 68 61            putcha
0f10: 72 28 63 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r(c);.          
0f20: 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 6e  }else if( c=='\n
0f30: 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ' ){.           
0f40: 20 70 72 69 6e 74 66 28 22 5c 5c 6e 22 29 3b 0a   printf("\\n");.
0f50: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20            }else 
0f60: 69 66 28 20 63 3d 3d 27 5c 74 27 20 29 7b 0a 20  if( c=='\t' ){. 
0f70: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
0f80: 66 28 22 5c 5c 74 22 29 3b 0a 20 20 20 20 20 20  f("\\t");.      
0f90: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
0fa0: 3d 27 5c 72 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\r' ){.       
0fb0: 20 20 20 20 20 70 72 69 6e 74 66 28 22 5c 5c 72       printf("\\r
0fc0: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  ");.          }e
0fd0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
0fe0: 20 70 72 69 6e 74 66 28 22 5c 5c 25 30 33 6f 22   printf("\\%03o"
0ff0: 2c 20 63 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , c);.          
1000: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
1010: 20 20 20 20 70 72 69 6e 74 66 28 22 5c 22 22 29      printf("\"")
1020: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1030: 7a 53 65 70 20 3d 20 22 2c 22 3b 0a 20 20 20 20  zSep = ",";.    
1040: 20 20 79 20 2b 3d 20 73 7a 3b 0a 20 20 20 20 7d    y += sz;.    }
1050: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 5c 6e 22  .    printf("\n"
1060: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
1070: 5f 66 72 65 65 28 7a 49 64 78 29 3b 0a 20 20 73  _free(zIdx);.  s
1080: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
1090: 70 53 74 6d 74 29 3b 0a 20 20 73 71 6c 69 74 65  pStmt);.  sqlite
10a0: 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20 20 72  3_close(db);.  r
10b0: 65 74 75 72 6e 20 30 3b 0a 7d 0a                 eturn 0;.}.