/ Hex Artifact Content
Login

Artifact 0682ebea7abf4d3657f53c4a243f2e7eab48eab344ed36a94bb75dcd19a5c2a1:


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 23 64 65 66 69 6e 65 20 49 53 50 52 49  "..#define ISPRI
0100: 4e 54 28 58 29 20 20 69 73 70 72 69 6e 74 28 28  NT(X)  isprint((
0110: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 58  unsigned char)(X
0120: 29 29 0a 0a 74 79 70 65 64 65 66 20 73 71 6c 69  ))..typedef sqli
0130: 74 65 33 5f 69 6e 74 36 34 20 69 36 34 3b 20 20  te3_int64 i64;  
0140: 20 2f 2a 20 36 34 2d 62 69 74 20 73 69 67 6e 65   /* 64-bit signe
0150: 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 20 2a  d integer type *
0160: 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72  /.../*.** Conver
0170: 74 20 74 68 65 20 76 61 72 2d 69 6e 74 20 66 6f  t the var-int fo
0180: 72 6d 61 74 20 69 6e 74 6f 20 69 36 34 2e 20 20  rmat into i64.  
0190: 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  Return the numbe
01a0: 72 20 6f 66 20 62 79 74 65 73 0a 2a 2a 20 69 6e  r of bytes.** in
01b0: 20 74 68 65 20 76 61 72 2d 69 6e 74 2e 20 20 57   the var-int.  W
01c0: 72 69 74 65 20 74 68 65 20 76 61 72 2d 69 6e 74  rite the var-int
01d0: 20 76 61 6c 75 65 20 69 6e 74 6f 20 2a 70 56 61   value into *pVa
01e0: 6c 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  l..*/.static int
01f0: 20 64 65 63 6f 64 65 56 61 72 69 6e 74 28 63 6f   decodeVarint(co
0200: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
0210: 72 20 2a 7a 2c 20 69 36 34 20 2a 70 56 61 6c 29  r *z, i64 *pVal)
0220: 7b 0a 20 20 69 36 34 20 76 20 3d 20 30 3b 0a 20  {.  i64 v = 0;. 
0230: 20 69 6e 74 20 69 3b 0a 20 20 66 6f 72 28 69 3d   int i;.  for(i=
0240: 30 3b 20 69 3c 38 3b 20 69 2b 2b 29 7b 0a 20 20  0; i<8; i++){.  
0250: 20 20 76 20 3d 20 28 76 3c 3c 37 29 20 2b 20 28    v = (v<<7) + (
0260: 7a 5b 69 5d 26 30 78 37 66 29 3b 0a 20 20 20 20  z[i]&0x7f);.    
0270: 69 66 28 20 28 7a 5b 69 5d 26 30 78 38 30 29 3d  if( (z[i]&0x80)=
0280: 3d 30 20 29 7b 20 2a 70 56 61 6c 20 3d 20 76 3b  =0 ){ *pVal = v;
0290: 20 72 65 74 75 72 6e 20 69 2b 31 3b 20 7d 0a 20   return i+1; }. 
02a0: 20 7d 0a 20 20 76 20 3d 20 28 76 3c 3c 38 29 20   }.  v = (v<<8) 
02b0: 2b 20 28 7a 5b 69 5d 26 30 78 66 66 29 3b 0a 20  + (z[i]&0xff);. 
02c0: 20 2a 70 56 61 6c 20 3d 20 76 3b 0a 20 20 72 65   *pVal = v;.  re
02d0: 74 75 72 6e 20 39 3b 0a 7d 0a 0a 0a 0a 69 6e 74  turn 9;.}....int
02e0: 20 6d 61 69 6e 28 69 6e 74 20 61 72 67 63 2c 20   main(int argc, 
02f0: 63 68 61 72 20 2a 2a 61 72 67 76 29 7b 0a 20 20  char **argv){.  
0300: 73 71 6c 69 74 65 33 20 2a 64 62 3b 0a 20 20 73  sqlite3 *db;.  s
0310: 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 70 53 74  qlite3_stmt *pSt
0320: 6d 74 3b 0a 20 20 63 68 61 72 20 2a 7a 49 64 78  mt;.  char *zIdx
0330: 20 3d 20 30 3b 0a 20 20 69 6e 74 20 72 63 2c 20   = 0;.  int rc, 
0340: 6a 2c 20 78 2c 20 79 2c 20 6d 78 48 64 72 3b 0a  j, x, y, mxHdr;.
0350: 20 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64    const unsigned
0360: 20 63 68 61 72 20 2a 61 53 61 6d 70 6c 65 3b 0a   char *aSample;.
0370: 20 20 69 6e 74 20 6e 53 61 6d 70 6c 65 3b 0a 20    int nSample;. 
0380: 20 69 36 34 20 69 56 61 6c 3b 0a 20 20 63 6f 6e   i64 iVal;.  con
0390: 73 74 20 63 68 61 72 20 2a 7a 53 65 70 3b 0a 20  st char *zSep;. 
03a0: 20 69 6e 74 20 69 52 6f 77 20 3d 20 30 3b 0a 0a   int iRow = 0;..
03b0: 20 20 69 66 28 20 61 72 67 63 21 3d 32 20 29 7b    if( argc!=2 ){
03c0: 0a 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64  .    fprintf(std
03d0: 65 72 72 2c 20 22 55 73 61 67 65 3a 20 25 73 20  err, "Usage: %s 
03e0: 44 41 54 41 42 41 53 45 2d 46 49 4c 45 5c 6e 22  DATABASE-FILE\n"
03f0: 2c 20 61 72 67 76 5b 30 5d 29 3b 0a 20 20 20 20  , argv[0]);.    
0400: 65 78 69 74 28 31 29 3b 0a 20 20 7d 0a 20 20 72  exit(1);.  }.  r
0410: 63 20 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65 6e  c = sqlite3_open
0420: 28 61 72 67 76 5b 31 5d 2c 20 26 64 62 29 3b 0a  (argv[1], &db);.
0430: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
0440: 5f 4f 4b 20 7c 7c 20 64 62 3d 3d 30 20 29 7b 0a  _OK || db==0 ){.
0450: 20 20 20 20 66 70 72 69 6e 74 66 28 73 74 64 65      fprintf(stde
0460: 72 72 2c 20 22 43 61 6e 6e 6f 74 20 6f 70 65 6e  rr, "Cannot open
0470: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5b   database file [
0480: 25 73 5d 5c 6e 22 2c 20 61 72 67 76 5b 31 5d 29  %s]\n", argv[1])
0490: 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b 0a 20  ;.    exit(1);. 
04a0: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
04b0: 33 5f 70 72 65 70 61 72 65 5f 76 32 28 64 62 2c  3_prepare_v2(db,
04c0: 0a 20 20 20 20 20 20 20 20 22 53 45 4c 45 43 54  .        "SELECT
04d0: 20 74 62 6c 7c 7c 27 2e 27 7c 7c 69 64 78 2c 20   tbl||'.'||idx, 
04e0: 6e 45 71 2c 20 6e 4c 54 2c 20 6e 44 4c 74 2c 20  nEq, nLT, nDLt, 
04f0: 73 61 6d 70 6c 65 20 22 0a 20 20 20 20 20 20 20  sample ".       
0500: 20 22 46 52 4f 4d 20 73 71 6c 69 74 65 5f 73 74   "FROM sqlite_st
0510: 61 74 34 20 4f 52 44 45 52 20 42 59 20 31 22 2c  at4 ORDER BY 1",
0520: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 26 70 53   -1,.        &pS
0530: 74 6d 74 2c 20 30 29 3b 0a 20 20 69 66 28 20 72  tmt, 0);.  if( r
0540: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
0550: 70 53 74 6d 74 3d 3d 30 20 29 7b 0a 20 20 20 20  pStmt==0 ){.    
0560: 66 70 72 69 6e 74 66 28 73 74 64 65 72 72 2c 20  fprintf(stderr, 
0570: 22 25 73 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f  "%s\n", sqlite3_
0580: 65 72 72 6d 73 67 28 64 62 29 29 3b 0a 20 20 20  errmsg(db));.   
0590: 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64   sqlite3_close(d
05a0: 62 29 3b 0a 20 20 20 20 65 78 69 74 28 31 29 3b  b);.    exit(1);
05b0: 0a 20 20 7d 0a 20 20 77 68 69 6c 65 28 20 53 51  .  }.  while( SQ
05c0: 4c 49 54 45 5f 52 4f 57 3d 3d 73 71 6c 69 74 65  LITE_ROW==sqlite
05d0: 33 5f 73 74 65 70 28 70 53 74 6d 74 29 20 29 7b  3_step(pStmt) ){
05e0: 0a 20 20 20 20 69 66 28 20 7a 49 64 78 3d 3d 30  .    if( zIdx==0
05f0: 20 7c 7c 20 73 74 72 63 6d 70 28 7a 49 64 78 2c   || strcmp(zIdx,
0600: 20 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 73 71   (const char*)sq
0610: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
0620: 74 28 70 53 74 6d 74 2c 30 29 29 21 3d 30 20 29  t(pStmt,0))!=0 )
0630: 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 49 64 78  {.      if( zIdx
0640: 20 29 20 70 72 69 6e 74 66 28 22 5c 6e 2a 2a 2a   ) printf("\n***
0650: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0660: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0670: 2a 2a 2a 22 0a 20 20 20 20 20 20 20 20 20 20 20  ***".           
0680: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2a 2a               "**
0690: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 5c 6e 5c 6e  ************\n\n
06a0: 22 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ");.      sqlite
06b0: 33 5f 66 72 65 65 28 7a 49 64 78 29 3b 0a 20 20  3_free(zIdx);.  
06c0: 20 20 20 20 7a 49 64 78 20 3d 20 73 71 6c 69 74      zIdx = sqlit
06d0: 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c  e3_mprintf("%s",
06e0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
06f0: 74 65 78 74 28 70 53 74 6d 74 2c 30 29 29 3b 0a  text(pStmt,0));.
0700: 20 20 20 20 20 20 69 52 6f 77 20 3d 20 30 3b 0a        iRow = 0;.
0710: 20 20 20 20 7d 0a 20 20 20 20 70 72 69 6e 74 66      }.    printf
0720: 28 22 25 73 20 73 61 6d 70 6c 65 20 25 64 20 2d  ("%s sample %d -
0730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0740: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0750: 2d 2d 2d 5c 6e 22 2c 20 7a 49 64 78 2c 20 2b 2b  ---\n", zIdx, ++
0760: 69 52 6f 77 29 3b 0a 20 20 20 20 70 72 69 6e 74  iRow);.    print
0770: 66 28 22 20 20 6e 45 71 20 20 20 20 3d 20 25 73  f("  nEq    = %s
0780: 5c 6e 22 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c  \n", sqlite3_col
0790: 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 31  umn_text(pStmt,1
07a0: 29 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22  ));.    printf("
07b0: 20 20 6e 4c 74 20 20 20 20 3d 20 25 73 5c 6e 22    nLt    = %s\n"
07c0: 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  , sqlite3_column
07d0: 5f 74 65 78 74 28 70 53 74 6d 74 2c 32 29 29 3b  _text(pStmt,2));
07e0: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 20 6e  .    printf("  n
07f0: 44 4c 74 20 20 20 3d 20 25 73 5c 6e 22 2c 20 73  DLt   = %s\n", s
0800: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
0810: 78 74 28 70 53 74 6d 74 2c 33 29 29 3b 0a 20 20  xt(pStmt,3));.  
0820: 20 20 70 72 69 6e 74 66 28 22 20 20 73 61 6d 70    printf("  samp
0830: 6c 65 20 3d 20 78 27 22 29 3b 0a 20 20 20 20 61  le = x'");.    a
0840: 53 61 6d 70 6c 65 20 3d 20 73 71 6c 69 74 65 33  Sample = sqlite3
0850: 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 70 53 74  _column_blob(pSt
0860: 6d 74 2c 34 29 3b 0a 20 20 20 20 6e 53 61 6d 70  mt,4);.    nSamp
0870: 6c 65 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c  le = sqlite3_col
0880: 75 6d 6e 5f 62 79 74 65 73 28 70 53 74 6d 74 2c  umn_bytes(pStmt,
0890: 34 29 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b  4);.    for(j=0;
08a0: 20 6a 3c 6e 53 61 6d 70 6c 65 3b 20 6a 2b 2b 29   j<nSample; j++)
08b0: 20 70 72 69 6e 74 66 28 22 25 30 32 78 22 2c 20   printf("%02x", 
08c0: 61 53 61 6d 70 6c 65 5b 6a 5d 29 3b 0a 20 20 20  aSample[j]);.   
08d0: 20 70 72 69 6e 74 66 28 22 27 5c 6e 20 20 20 20   printf("'\n    
08e0: 20 20 20 20 20 20 22 29 3b 0a 20 20 20 20 7a 53        ");.    zS
08f0: 65 70 20 3d 20 22 20 22 3b 0a 20 20 20 20 78 20  ep = " ";.    x 
0900: 3d 20 64 65 63 6f 64 65 56 61 72 69 6e 74 28 61  = decodeVarint(a
0910: 53 61 6d 70 6c 65 2c 20 26 69 56 61 6c 29 3b 0a  Sample, &iVal);.
0920: 20 20 20 20 69 66 28 20 69 56 61 6c 3c 78 20 7c      if( iVal<x |
0930: 7c 20 69 56 61 6c 3e 6e 53 61 6d 70 6c 65 20 29  | iVal>nSample )
0940: 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22  {.      printf("
0950: 20 3c 65 72 72 6f 72 3e 5c 6e 22 29 3b 0a 20 20   <error>\n");.  
0960: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20      continue;.  
0970: 20 20 7d 0a 20 20 20 20 79 20 3d 20 6d 78 48 64    }.    y = mxHd
0980: 72 20 3d 20 28 69 6e 74 29 69 56 61 6c 3b 0a 20  r = (int)iVal;. 
0990: 20 20 20 77 68 69 6c 65 28 20 78 3c 6d 78 48 64     while( x<mxHd
09a0: 72 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  r ){.      int s
09b0: 7a 3b 0a 20 20 20 20 20 20 69 36 34 20 76 3b 0a  z;.      i64 v;.
09c0: 20 20 20 20 20 20 78 20 2b 3d 20 64 65 63 6f 64        x += decod
09d0: 65 56 61 72 69 6e 74 28 61 53 61 6d 70 6c 65 2b  eVarint(aSample+
09e0: 78 2c 20 26 69 56 61 6c 29 3b 0a 20 20 20 20 20  x, &iVal);.     
09f0: 20 69 66 28 20 78 3e 6d 78 48 64 72 20 29 20 62   if( x>mxHdr ) b
0a00: 72 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20  reak;.      if( 
0a10: 69 56 61 6c 3c 30 20 29 20 62 72 65 61 6b 3b 0a  iVal<0 ) break;.
0a20: 20 20 20 20 20 20 73 77 69 74 63 68 28 20 69 56        switch( iV
0a30: 61 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 63 61  al ){.        ca
0a40: 73 65 20 30 3a 20 20 73 7a 20 3d 20 30 3b 20 20  se 0:  sz = 0;  
0a50: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 63  break;.        c
0a60: 61 73 65 20 31 3a 20 20 73 7a 20 3d 20 31 3b 20  ase 1:  sz = 1; 
0a70: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
0a80: 63 61 73 65 20 32 3a 20 20 73 7a 20 3d 20 32 3b  case 2:  sz = 2;
0a90: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
0aa0: 20 63 61 73 65 20 33 3a 20 20 73 7a 20 3d 20 33   case 3:  sz = 3
0ab0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
0ac0: 20 20 63 61 73 65 20 34 3a 20 20 73 7a 20 3d 20    case 4:  sz = 
0ad0: 34 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  4;  break;.     
0ae0: 20 20 20 63 61 73 65 20 35 3a 20 20 73 7a 20 3d     case 5:  sz =
0af0: 20 36 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20   6;  break;.    
0b00: 20 20 20 20 63 61 73 65 20 36 3a 20 20 73 7a 20      case 6:  sz 
0b10: 3d 20 38 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20  = 8;  break;.   
0b20: 20 20 20 20 20 63 61 73 65 20 37 3a 20 20 73 7a       case 7:  sz
0b30: 20 3d 20 38 3b 20 20 62 72 65 61 6b 3b 0a 20 20   = 8;  break;.  
0b40: 20 20 20 20 20 20 63 61 73 65 20 38 3a 20 20 73        case 8:  s
0b50: 7a 20 3d 20 30 3b 20 20 62 72 65 61 6b 3b 0a 20  z = 0;  break;. 
0b60: 20 20 20 20 20 20 20 63 61 73 65 20 39 3a 20 20         case 9:  
0b70: 73 7a 20 3d 20 30 3b 20 20 62 72 65 61 6b 3b 0a  sz = 0;  break;.
0b80: 20 20 20 20 20 20 20 20 63 61 73 65 20 31 30 3a          case 10:
0b90: 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 31 31  .        case 11
0ba0: 3a 20 73 7a 20 3d 20 30 3b 20 20 62 72 65 61 6b  : sz = 0;  break
0bb0: 3b 0a 20 20 20 20 20 20 20 20 64 65 66 61 75 6c  ;.        defaul
0bc0: 74 3a 20 73 7a 20 3d 20 28 69 6e 74 29 28 69 56  t: sz = (int)(iV
0bd0: 61 6c 2d 31 32 29 2f 32 3b 20 20 62 72 65 61 6b  al-12)/2;  break
0be0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
0bf0: 69 66 28 20 79 2b 73 7a 3e 6e 53 61 6d 70 6c 65  if( y+sz>nSample
0c00: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
0c10: 69 66 28 20 69 56 61 6c 3d 3d 30 20 29 7b 0a 20  if( iVal==0 ){. 
0c20: 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 25         printf("%
0c30: 73 4e 55 4c 4c 22 2c 20 7a 53 65 70 29 3b 0a 20  sNULL", zSep);. 
0c40: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 69       }else if( i
0c50: 56 61 6c 3d 3d 38 20 7c 7c 20 69 56 61 6c 3d 3d  Val==8 || iVal==
0c60: 39 20 29 7b 0a 20 20 20 20 20 20 20 20 70 72 69  9 ){.        pri
0c70: 6e 74 66 28 22 25 73 25 64 22 2c 20 7a 53 65 70  ntf("%s%d", zSep
0c80: 2c 20 28 28 69 6e 74 29 69 56 61 6c 29 2d 38 29  , ((int)iVal)-8)
0c90: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
0ca0: 28 20 69 56 61 6c 3c 3d 37 20 29 7b 0a 20 20 20  ( iVal<=7 ){.   
0cb0: 20 20 20 20 20 76 20 3d 20 28 73 69 67 6e 65 64       v = (signed
0cc0: 20 63 68 61 72 29 61 53 61 6d 70 6c 65 5b 79 5d   char)aSample[y]
0cd0: 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  ;.        for(j=
0ce0: 31 3b 20 6a 3c 73 7a 3b 20 6a 2b 2b 29 7b 0a 20  1; j<sz; j++){. 
0cf0: 20 20 20 20 20 20 20 20 20 76 20 3d 20 28 76 3c           v = (v<
0d00: 3c 38 29 20 2b 20 61 53 61 6d 70 6c 65 5b 79 2b  <8) + aSample[y+
0d10: 6a 5d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  j];.        }.  
0d20: 20 20 20 20 20 20 69 66 28 20 69 56 61 6c 3d 3d        if( iVal==
0d30: 37 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64  7 ){.          d
0d40: 6f 75 62 6c 65 20 72 3b 0a 20 20 20 20 20 20 20  ouble r;.       
0d50: 20 20 20 63 68 61 72 20 2a 7a 3b 0a 20 20 20 20     char *z;.    
0d60: 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 72 2c        memcpy(&r,
0d70: 20 26 76 2c 20 73 69 7a 65 6f 66 28 72 29 29 3b   &v, sizeof(r));
0d80: 0a 20 20 20 20 20 20 20 20 20 20 7a 20 3d 20 73  .          z = s
0d90: 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22  qlite3_mprintf("
0da0: 25 73 25 21 2e 31 35 67 22 2c 20 7a 53 65 70 2c  %s%!.15g", zSep,
0db0: 20 72 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70   r);.          p
0dc0: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 29 3b 0a  rintf("%s", z);.
0dd0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
0de0: 33 5f 66 72 65 65 28 7a 29 3b 0a 20 20 20 20 20  3_free(z);.     
0df0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
0e00: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 25 6c      printf("%s%l
0e10: 6c 64 22 2c 20 7a 53 65 70 2c 20 76 29 3b 0a 20  ld", zSep, v);. 
0e20: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
0e30: 65 6c 73 65 20 69 66 28 20 28 69 56 61 6c 26 31  else if( (iVal&1
0e40: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
0e50: 70 72 69 6e 74 66 28 22 25 73 78 27 22 2c 20 7a  printf("%sx'", z
0e60: 53 65 70 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  Sep);.        fo
0e70: 72 28 6a 3d 30 3b 20 6a 3c 73 7a 3b 20 6a 2b 2b  r(j=0; j<sz; j++
0e80: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 72 69  ){.          pri
0e90: 6e 74 66 28 22 25 30 32 78 22 2c 20 61 53 61 6d  ntf("%02x", aSam
0ea0: 70 6c 65 5b 79 2b 6a 5d 29 3b 0a 20 20 20 20 20  ple[y+j]);.     
0eb0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 72 69     }.        pri
0ec0: 6e 74 66 28 22 27 22 29 3b 0a 20 20 20 20 20 20  ntf("'");.      
0ed0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70  }else{.        p
0ee0: 72 69 6e 74 66 28 22 25 73 27 22 2c 20 7a 53 65  rintf("%s'", zSe
0ef0: 70 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  p);.        for(
0f00: 6a 3d 30 3b 20 6a 3c 73 7a 3b 20 6a 2b 2b 29 7b  j=0; j<sz; j++){
0f10: 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20  .          char 
0f20: 63 20 3d 20 28 63 68 61 72 29 61 53 61 6d 70 6c  c = (char)aSampl
0f30: 65 5b 79 2b 6a 5d 3b 0a 20 20 20 20 20 20 20 20  e[y+j];.        
0f40: 20 20 69 66 28 20 49 53 50 52 49 4e 54 28 63 29    if( ISPRINT(c)
0f50: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
0f60: 69 66 28 20 63 3d 3d 27 5c 27 27 20 7c 7c 20 63  if( c=='\'' || c
0f70: 3d 3d 27 5c 5c 27 20 29 20 70 75 74 63 68 61 72  =='\\' ) putchar
0f80: 28 27 5c 5c 27 29 3b 0a 20 20 20 20 20 20 20 20  ('\\');.        
0f90: 20 20 20 20 70 75 74 63 68 61 72 28 63 29 3b 0a      putchar(c);.
0fa0: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20            }else 
0fb0: 69 66 28 20 63 3d 3d 27 5c 6e 27 20 29 7b 0a 20  if( c=='\n' ){. 
0fc0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
0fd0: 66 28 22 5c 5c 6e 22 29 3b 0a 20 20 20 20 20 20  f("\\n");.      
0fe0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 63 3d      }else if( c=
0ff0: 3d 27 5c 74 27 20 29 7b 0a 20 20 20 20 20 20 20  ='\t' ){.       
1000: 20 20 20 20 20 70 72 69 6e 74 66 28 22 5c 5c 74       printf("\\t
1010: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  ");.          }e
1020: 6c 73 65 20 69 66 28 20 63 3d 3d 27 5c 72 27 20  lse if( c=='\r' 
1030: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ){.            p
1040: 72 69 6e 74 66 28 22 5c 5c 72 22 29 3b 0a 20 20  rintf("\\r");.  
1050: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
1060: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6e 74             print
1070: 66 28 22 5c 5c 25 30 33 6f 22 2c 20 63 29 3b 0a  f("\\%03o", c);.
1080: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
1090: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 72      }.        pr
10a0: 69 6e 74 66 28 22 27 22 29 3b 0a 20 20 20 20 20  intf("'");.     
10b0: 20 7d 0a 20 20 20 20 20 20 7a 53 65 70 20 3d 20   }.      zSep = 
10c0: 22 2c 22 3b 0a 20 20 20 20 20 20 79 20 2b 3d 20  ",";.      y += 
10d0: 73 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 72  sz;.    }.    pr
10e0: 69 6e 74 66 28 22 5c 6e 22 29 3b 0a 20 20 7d 0a  intf("\n");.  }.
10f0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 7a    sqlite3_free(z
1100: 49 64 78 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Idx);.  sqlite3_
1110: 66 69 6e 61 6c 69 7a 65 28 70 53 74 6d 74 29 3b  finalize(pStmt);
1120: 0a 20 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  .  sqlite3_close
1130: 28 64 62 29 3b 0a 20 20 72 65 74 75 72 6e 20 30  (db);.  return 0
1140: 3b 0a 7d 0a                                      ;.}.