/ Hex Artifact Content
Login

Artifact 47662af1e2c9567fd821da910b3a247c5c138021:


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 0a 20  t char *zSep;.. 
0370: 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b 0a   if( argc!=2 ){.
0380: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
0390: 72 72 2c 20 22 55 73 61 67 65 3a 20 25 73 20 44  rr, "Usage: %s D
03a0: 41 54 41 42 41 53 45 2d 46 49 4c 45 5c 6e 22 2c  ATABASE-FILE\n",
03b0: 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20 65   argv[0]);.    e
03c0: 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 72 63  xit(1);.  }.  rc
03d0: 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e 28   = sqlite3_open(
03e0: 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 3b 0a 20  argv[1], &db);. 
03f0: 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
0400: 4f 4b 20 7c 7c 20 64 62 3d 3d 30 20 29 7b 0a 20  OK || db==0 ){. 
0410: 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65 72     fprintf(stder
0420: 72 2c 20 22 43 61 6e 6e 6f 74 20 6f 70 65 6e 20  r, "Cannot open 
0430: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5b 25  database file [%
0440: 73 5d 5c 6e 22 2c 20 61 72 67 76 5b 31 5d 29 3b  s]\n", argv[1]);
0450: 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20 20  .    exit(1);.  
0460: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
0470: 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c 0a  _prepare_v2(db,.
0480: 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20          "SELECT 
0490: 74 62 6c 7c 7c 27 2e 27 7c 7c 69 64 78 2c 20 6e  tbl||'.'||idx, n
04a0: 45 71 2c 20 6e 4c 54 2c 20 6e 44 4c 74 2c 20 73  Eq, nLT, nDLt, s
04b0: 61 6d 70 6c 65 20 22 0a 20 20 20 20 20 20 20 20  ample ".        
04c0: 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74 61  "FROM sqlite_sta
04d0: 74 34 20 4f 52 44 45 52 20 42 59 20 31 22 2c 20  t4 ORDER BY 1", 
04e0: 2d 31 2c 0a 20 20 20 20 20 20 20 20 26 70 53 74  -1,.        &pSt
04f0: 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 72 63  mt, 0);.  if( rc
0500: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 70  !=SQLITE_OK || p
0510: 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20 66  Stmt==0 ){.    f
0520: 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20 22  printf(stderr, "
0530: 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 65  %s\n", sqlite3_e
0540: 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20 20  rrmsg(db));.    
0550: 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62  sqlite3_close(db
0560: 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a  );.    exit(1);.
0570: 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 53 51 4c    }.  while( SQL
0580: 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65 33  ITE_ROW==sqlite3
0590: 5f 73 74 65 70 28 70 53 74 6d 74 29 20 29 7b 0a  _step(pStmt) ){.
05a0: 20 20 20 20 69 66 28 20 7a 49 64 78 3d 3d 30 20      if( zIdx==0 
05b0: 7c 7c 20 73 74 72 63 6d 70 28 7a 49 64 78 2c 20  || strcmp(zIdx, 
05c0: 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c  (const char*)sql
05d0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
05e0: 28 70 53 74 6d 74 2c 30 29 29 21 3d 30 20 29 7b  (pStmt,0))!=0 ){
05f0: 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78 20  .      if( zIdx 
0600: 29 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a  ) printf("\n");.
0610: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
0620: 65 65 28 7a 49 64 78 29 3b 0a 20 20 20 20 20 20  ee(zIdx);.      
0630: 7a 49 64 78 20 3d 20 73 71 6c 69 74 65 33 5f 6d  zIdx = sqlite3_m
0640: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 73 71 6c  printf("%s", sql
0650: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
0660: 28 70 53 74 6d 74 2c 30 29 29 3b 0a 20 20 20 20  (pStmt,0));.    
0670: 20 20 70 72 69 6e 74 66 28 22 25 73 3a 5c 6e 22    printf("%s:\n"
0680: 2c 20 7a 49 64 78 29 3b 0a 20 20 20 20 7d 65 6c  , zIdx);.    }el
0690: 73 65 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66  se{.      printf
06a0: 28 22 20 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ("  ------------
06b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
06d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 5c  ---------------\
06e0: 6e 22 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  n");.    }.    p
06f0: 72 69 6e 74 66 28 22 20 20 6e 45 71 20 20 20 20  rintf("  nEq    
0700: 3d 20 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33  = %s\n", sqlite3
0710: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
0720: 6d 74 2c 31 29 29 3b 0a 20 20 20 20 70 72 69 6e  mt,1));.    prin
0730: 74 66 28 22 20 20 6e 4c 74 20 20 20 20 3d 20 25  tf("  nLt    = %
0740: 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f  s\n", sqlite3_co
0750: 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
0760: 32 29 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28  2));.    printf(
0770: 22 20 20 6e 44 4c 74 20 20 20 3d 20 25 73 5c 6e  "  nDLt   = %s\n
0780: 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ", sqlite3_colum
0790: 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 33 29 29  n_text(pStmt,3))
07a0: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 20  ;.    printf("  
07b0: 73 61 6d 70 6c 65 20 3d 20 78 27 22 29 3b 0a 20  sample = x'");. 
07c0: 20 20 20 61 53 61 6d 70 6c 65 20 3d 20 73 71 6c     aSample = sql
07d0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62  ite3_column_blob
07e0: 28 70 53 74 6d 74 2c 34 29 3b 0a 20 20 20 20 6e  (pStmt,4);.    n
07f0: 53 61 6d 70 6c 65 20 3d 20 73 71 6c 69 74 65 33  Sample = sqlite3
0800: 5f 63 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 70 53  _column_bytes(pS
0810: 74 6d 74 2c 34 29 3b 0a 20 20 20 20 66 6f 72 28  tmt,4);.    for(
0820: 6a 3d 30 3b 20 6a 3c 6e 53 61 6d 70 6c 65 3b 20  j=0; j<nSample; 
0830: 6a 2b 2b 29 20 70 72 69 6e 74 66 28 22 25 30 32  j++) printf("%02
0840: 78 22 2c 20 61 53 61 6d 70 6c 65 5b 6a 5d 29 3b  x", aSample[j]);
0850: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 27 5c 6e  .    printf("'\n
0860: 20 20 20 20 20 20 20 20 20 20 22 29 3b 0a 20 20            ");.  
0870: 20 20 7a 53 65 70 20 3d 20 22 20 22 3b 0a 20 20    zSep = " ";.  
0880: 20 20 78 20 3d 20 64 65 63 6f 64 65 56 61 72 69    x = decodeVari
0890: 6e 74 28 61 53 61 6d 70 6c 65 2c 20 26 69 56 61  nt(aSample, &iVa
08a0: 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 56 61 6c  l);.    if( iVal
08b0: 3c 78 20 7c 7c 20 69 56 61 6c 3e 6e 53 61 6d 70  <x || iVal>nSamp
08c0: 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e  le ){.      prin
08d0: 74 66 28 22 20 3c 65 72 72 6f 72 3e 5c 6e 22 29  tf(" <error>\n")
08e0: 3b 0a 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65  ;.      continue
08f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 79 20 3d 20  ;.    }.    y = 
0900: 6d 78 48 64 72 20 3d 20 28 69 6e 74 29 69 56 61  mxHdr = (int)iVa
0910: 6c 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 78 3c  l;.    while( x<
0920: 6d 78 48 64 72 20 29 7b 0a 20 20 20 20 20 20 69  mxHdr ){.      i
0930: 6e 74 20 73 7a 3b 0a 20 20 20 20 20 20 69 36 34  nt sz;.      i64
0940: 20 76 3b 0a 20 20 20 20 20 20 78 20 2b 3d 20 64   v;.      x += d
0950: 65 63 6f 64 65 56 61 72 69 6e 74 28 61 53 61 6d  ecodeVarint(aSam
0960: 70 6c 65 2b 78 2c 20 26 69 56 61 6c 29 3b 0a 20  ple+x, &iVal);. 
0970: 20 20 20 20 20 69 66 28 20 78 3e 6d 78 48 64 72       if( x>mxHdr
0980: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
0990: 69 66 28 20 69 56 61 6c 3c 30 20 29 20 62 72 65  if( iVal<0 ) bre
09a0: 61 6b 3b 0a 20 20 20 20 20 20 73 77 69 74 63 68  ak;.      switch
09b0: 28 20 69 56 61 6c 20 29 7b 0a 20 20 20 20 20 20  ( iVal ){.      
09c0: 20 20 63 61 73 65 20 30 3a 20 20 73 7a 20 3d 20    case 0:  sz = 
09d0: 30 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0;  break;.     
09e0: 20 20 20 63 61 73 65 20 31 3a 20 20 73 7a 20 3d     case 1:  sz =
09f0: 20 31 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20   1;  break;.    
0a00: 20 20 20 20 63 61 73 65 20 32 3a 20 20 73 7a 20      case 2:  sz 
0a10: 3d 20 32 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  = 2;  break;.   
0a20: 20 20 20 20 20 63 61 73 65 20 33 3a 20 20 73 7a       case 3:  sz
0a30: 20 3d 20 33 3b 20 20 62 72 65 61 6b 3b 0a 20 20   = 3;  break;.  
0a40: 20 20 20 20 20 20 63 61 73 65 20 34 3a 20 20 73        case 4:  s
0a50: 7a 20 3d 20 34 3b 20 20 62 72 65 61 6b 3b 0a 20  z = 4;  break;. 
0a60: 20 20 20 20 20 20 20 63 61 73 65 20 35 3a 20 20         case 5:  
0a70: 73 7a 20 3d 20 36 3b 20 20 62 72 65 61 6b 3b 0a  sz = 6;  break;.
0a80: 20 20 20 20 20 20 20 20 63 61 73 65 20 36 3a 20          case 6: 
0a90: 20 73 7a 20 3d 20 38 3b 20 20 62 72 65 61 6b 3b   sz = 8;  break;
0aa0: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 37 3a  .        case 7:
0ab0: 20 20 73 7a 20 3d 20 38 3b 20 20 62 72 65 61 6b    sz = 8;  break
0ac0: 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 38  ;.        case 8
0ad0: 3a 20 20 73 7a 20 3d 20 30 3b 20 20 62 72 65 61  :  sz = 0;  brea
0ae0: 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  k;.        case 
0af0: 39 3a 20 20 73 7a 20 3d 20 30 3b 20 20 62 72 65  9:  sz = 0;  bre
0b00: 61 6b 3b 0a 20 20 20 20 20 20 20 20 63 61 73 65  ak;.        case
0b10: 20 31 30 3a 0a 20 20 20 20 20 20 20 20 63 61 73   10:.        cas
0b20: 65 20 31 31 3a 20 73 7a 20 3d 20 30 3b 20 20 62  e 11: sz = 0;  b
0b30: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 64 65  reak;.        de
0b40: 66 61 75 6c 74 3a 20 73 7a 20 3d 20 28 69 6e 74  fault: sz = (int
0b50: 29 28 69 56 61 6c 2d 31 32 29 2f 32 3b 20 20 62  )(iVal-12)/2;  b
0b60: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
0b70: 20 20 20 20 69 66 28 20 79 2b 73 7a 3e 6e 53 61      if( y+sz>nSa
0b80: 6d 70 6c 65 20 29 20 62 72 65 61 6b 3b 0a 20 20  mple ) break;.  
0b90: 20 20 20 20 69 66 28 20 69 56 61 6c 3d 3d 30 20      if( iVal==0 
0ba0: 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69 6e 74  ){.        print
0bb0: 66 28 22 25 73 4e 55 4c 4c 22 2c 20 7a 53 65 70  f("%sNULL", zSep
0bc0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  );.      }else i
0bd0: 66 28 20 69 56 61 6c 3c 3d 37 20 29 7b 0a 20 20  f( iVal<=7 ){.  
0be0: 20 20 20 20 20 20 76 20 3d 20 28 73 69 67 6e 65        v = (signe
0bf0: 64 20 63 68 61 72 29 61 53 61 6d 70 6c 65 5b 79  d char)aSample[y
0c00: 5d 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  ];.        for(j
0c10: 3d 31 3b 20 6a 3c 73 7a 3b 20 6a 2b 2b 29 7b 0a  =1; j<sz; j++){.
0c20: 20 20 20 20 20 20 20 20 20 20 76 20 3d 20 28 76            v = (v
0c30: 3c 3c 38 29 20 2b 20 61 53 61 6d 70 6c 65 5b 79  <<8) + aSample[y
0c40: 2b 6a 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  +j];.        }. 
0c50: 20 20 20 20 20 20 20 69 66 28 20 69 56 61 6c 3d         if( iVal=
0c60: 3d 37 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =7 ){.          
0c70: 64 6f 75 62 6c 65 20 72 3b 0a 20 20 20 20 20 20  double r;.      
0c80: 20 20 20 20 6d 65 6d 63 70 79 28 26 72 2c 20 26      memcpy(&r, &
0c90: 76 2c 20 73 69 7a 65 6f 66 28 72 29 29 3b 0a 20  v, sizeof(r));. 
0ca0: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28           printf(
0cb0: 22 25 73 25 23 67 22 2c 20 7a 53 65 70 2c 20 72  "%s%#g", zSep, r
0cc0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
0cd0: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69 6e  {.          prin
0ce0: 74 66 28 22 25 73 25 6c 6c 64 22 2c 20 7a 53 65  tf("%s%lld", zSe
0cf0: 70 2c 20 76 29 3b 0a 20 20 20 20 20 20 20 20 7d  p, v);.        }
0d00: 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28  .      }else if(
0d10: 20 28 69 56 61 6c 26 31 29 3d 3d 30 20 29 7b 0a   (iVal&1)==0 ){.
0d20: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
0d30: 25 73 78 27 22 2c 20 7a 53 65 70 29 3b 0a 20 20  %sx'", zSep);.  
0d40: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a        for(j=0; j
0d50: 3c 73 7a 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  <sz; j++){.     
0d60: 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 30 32       printf("%02
0d70: 78 22 2c 20 61 53 61 6d 70 6c 65 5b 79 2b 6a 5d  x", aSample[y+j]
0d80: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
0d90: 20 20 20 20 20 70 72 69 6e 74 66 28 22 27 22 29       printf("'")
0da0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
0db0: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
0dc0: 73 5c 22 22 2c 20 7a 53 65 70 29 3b 0a 20 20 20  s\"", zSep);.   
0dd0: 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
0de0: 73 7a 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  sz; j++){.      
0df0: 20 20 20 20 63 68 61 72 20 63 20 3d 20 28 63 68      char c = (ch
0e00: 61 72 29 61 53 61 6d 70 6c 65 5b 79 2b 6a 5d 3b  ar)aSample[y+j];
0e10: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
0e20: 73 70 72 69 6e 74 28 63 29 20 29 7b 0a 20 20 20  sprint(c) ){.   
0e30: 20 20 20 20 20 20 20 20 20 69 66 28 20 63 3d 3d           if( c==
0e40: 27 22 27 20 7c 7c 20 63 3d 3d 27 5c 5c 27 20 29  '"' || c=='\\' )
0e50: 20 70 75 74 63 68 61 72 28 27 5c 5c 27 29 3b 0a   putchar('\\');.
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 74 63              putc
0e70: 68 61 72 28 63 29 3b 0a 20 20 20 20 20 20 20 20  har(c);.        
0e80: 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d 3d 27    }else if( c=='
0e90: 5c 6e 27 20 29 7b 0a 20 20 20 20 20 20 20 20 20  \n' ){.         
0ea0: 20 20 20 70 72 69 6e 74 66 28 22 5c 5c 6e 22 29     printf("\\n")
0eb0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
0ec0: 65 20 69 66 28 20 63 3d 3d 27 5c 74 27 20 29 7b  e if( c=='\t' ){
0ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
0ee0: 6e 74 66 28 22 5c 5c 74 22 29 3b 0a 20 20 20 20  ntf("\\t");.    
0ef0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
0f00: 63 3d 3d 27 5c 72 27 20 29 7b 0a 20 20 20 20 20  c=='\r' ){.     
0f10: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 5c         printf("\
0f20: 5c 72 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \r");.          
0f30: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
0f40: 20 20 20 70 72 69 6e 74 66 28 22 5c 5c 25 30 33     printf("\\%03
0f50: 6f 22 2c 20 63 29 3b 0a 20 20 20 20 20 20 20 20  o", c);.        
0f60: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
0f70: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 5c 22        printf("\"
0f80: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
0f90: 20 20 7a 53 65 70 20 3d 20 22 2c 22 3b 0a 20 20    zSep = ",";.  
0fa0: 20 20 20 20 79 20 2b 3d 20 73 7a 3b 0a 20 20 20      y += sz;.   
0fb0: 20 7d 0a 20 20 20 20 70 72 69 6e 74 66 28 22 5c   }.    printf("\
0fc0: 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n");.  }.  sqlit
0fd0: 65 33 5f 66 72 65 65 28 7a 49 64 78 29 3b 0a 20  e3_free(zIdx);. 
0fe0: 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a   sqlite3_finaliz
0ff0: 65 28 70 53 74 6d 74 29 3b 0a 20 20 73 71 6c 69  e(pStmt);.  sqli
1000: 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b 0a 20  te3_close(db);. 
1010: 20 72 65 74 75 72 6e 20 30 3b 0a 7d 0a            return 0;.}.