/ Hex Artifact Content
Login

Artifact 337056bae59f80b9eb00ba82088b39d0f4fe6dfd:


0000: 2f 2a 0a 2a 2a 20 32 30 30 36 20 4a 75 6e 65 20  /*.** 2006 June 
0010: 31 34 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74  14.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
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 0a 2a 2a 20 54 65 73 74 20 65 78 74 65 6e 73  *.** Test extens
0180: 69 6f 6e 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ion for testing 
0190: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 6f 61 64  the sqlite3_load
01a0: 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66 75 6e  _extension() fun
01b0: 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 6e 63 6c 75  ction..*/.#inclu
01c0: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
01d0: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 65  nclude "sqlite3e
01e0: 78 74 2e 68 22 0a 53 51 4c 49 54 45 5f 45 58 54  xt.h".SQLITE_EXT
01f0: 45 4e 53 49 4f 4e 5f 49 4e 49 54 31 0a 0a 2f 2a  ENSION_INIT1../*
0200: 0a 2a 2a 20 54 68 65 20 68 61 6c 66 28 29 20 53  .** The half() S
0210: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75  QL function retu
0220: 72 6e 73 20 68 61 6c 66 20 6f 66 20 69 74 73 20  rns half of its 
0230: 69 6e 70 75 74 20 76 61 6c 75 65 2e 0a 2a 2f 0a  input value..*/.
0240: 73 74 61 74 69 63 20 76 6f 69 64 20 68 61 6c 66  static void half
0250: 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33 5f  Func(.  sqlite3_
0260: 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78 74  context *context
0270: 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20 20  ,.  int argc,.  
0280: 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
0290: 61 72 67 76 0a 29 7b 0a 20 20 73 71 6c 69 74 65  argv.){.  sqlite
02a0: 33 5f 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28  3_result_double(
02b0: 63 6f 6e 74 65 78 74 2c 20 30 2e 35 2a 73 71 6c  context, 0.5*sql
02c0: 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c  ite3_value_doubl
02d0: 65 28 61 72 67 76 5b 30 5d 29 29 3b 0a 7d 0a 0a  e(argv[0]));.}..
02e0: 2f 2a 0a 2a 2a 20 53 51 4c 20 66 75 6e 63 74 69  /*.** SQL functi
02f0: 6f 6e 73 20 74 6f 20 63 61 6c 6c 20 74 68 65 20  ons to call the 
0300: 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 20 66  sqlite3_status f
0310: 75 6e 63 74 69 6f 6e 20 61 6e 64 20 72 65 74 75  unction and retu
0320: 72 6e 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 73  rn results..*/.s
0330: 74 61 74 69 63 20 76 6f 69 64 20 73 74 61 74 75  tatic void statu
0340: 73 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33  sFunc(.  sqlite3
0350: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
0360: 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  t,.  int argc,. 
0370: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
0380: 2a 61 72 67 76 0a 29 7b 0a 20 20 69 6e 74 20 6f  *argv.){.  int o
0390: 70 20 3d 20 30 2c 20 6d 78 2c 20 63 75 72 2c 20  p = 0, mx, cur, 
03a0: 72 65 73 65 74 46 6c 61 67 2c 20 72 63 3b 0a 20  resetFlag, rc;. 
03b0: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 76 61 6c   if( sqlite3_val
03c0: 75 65 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29  ue_type(argv[0])
03d0: 3d 3d 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52  ==SQLITE_INTEGER
03e0: 20 29 7b 0a 20 20 20 20 6f 70 20 3d 20 73 71 6c   ){.    op = sql
03f0: 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 28 61  ite3_value_int(a
0400: 72 67 76 5b 30 5d 29 3b 0a 20 20 7d 65 6c 73 65  rgv[0]);.  }else
0410: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 76 61 6c   if( sqlite3_val
0420: 75 65 5f 74 79 70 65 28 61 72 67 76 5b 30 5d 29  ue_type(argv[0])
0430: 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b  ==SQLITE_TEXT ){
0440: 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
0450: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
0460: 65 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e;.    static co
0470: 6e 73 74 20 73 74 72 75 63 74 20 7b 0a 20 20 20  nst struct {.   
0480: 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
0490: 4e 61 6d 65 3b 0a 20 20 20 20 20 20 69 6e 74 20  Name;.      int 
04a0: 6f 70 3b 0a 20 20 20 20 7d 20 61 4f 70 5b 5d 20  op;.    } aOp[] 
04b0: 3d 20 7b 0a 20 20 20 20 20 20 7b 20 22 4d 45 4d  = {.      { "MEM
04c0: 4f 52 59 5f 55 53 45 44 22 2c 20 20 20 20 20 20  ORY_USED",      
04d0: 20 20 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53     SQLITE_STATUS
04e0: 5f 4d 45 4d 4f 52 59 5f 55 53 45 44 20 20 20 20  _MEMORY_USED    
04f0: 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
0500: 22 50 41 47 45 43 41 43 48 45 5f 55 53 45 44 22  "PAGECACHE_USED"
0510: 2c 20 20 20 20 20 20 53 51 4c 49 54 45 5f 53 54  ,      SQLITE_ST
0520: 41 54 55 53 5f 50 41 47 45 43 41 43 48 45 5f 55  ATUS_PAGECACHE_U
0530: 53 45 44 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  SED      },.    
0540: 20 20 7b 20 22 50 41 47 45 43 41 43 48 45 5f 4f    { "PAGECACHE_O
0550: 56 45 52 46 4c 4f 57 22 2c 20 20 53 51 4c 49 54  VERFLOW",  SQLIT
0560: 45 5f 53 54 41 54 55 53 5f 50 41 47 45 43 41 43  E_STATUS_PAGECAC
0570: 48 45 5f 4f 56 45 52 46 4c 4f 57 20 20 7d 2c 0a  HE_OVERFLOW  },.
0580: 20 20 20 20 20 20 7b 20 22 53 43 52 41 54 43 48        { "SCRATCH
0590: 5f 55 53 45 44 22 2c 20 20 20 20 20 20 20 20 53  _USED",        S
05a0: 51 4c 49 54 45 5f 53 54 41 54 55 53 5f 53 43 52  QLITE_STATUS_SCR
05b0: 41 54 43 48 5f 55 53 45 44 20 20 20 20 20 20 20  ATCH_USED       
05c0: 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 53 43 52   },.      { "SCR
05d0: 41 54 43 48 5f 4f 56 45 52 46 4c 4f 57 22 2c 20  ATCH_OVERFLOW", 
05e0: 20 20 20 53 51 4c 49 54 45 5f 53 54 41 54 55 53     SQLITE_STATUS
05f0: 5f 53 43 52 41 54 43 48 5f 4f 56 45 52 46 4c 4f  _SCRATCH_OVERFLO
0600: 57 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20  W    },.      { 
0610: 22 4d 41 4c 4c 4f 43 5f 53 49 5a 45 22 2c 20 20  "MALLOC_SIZE",  
0620: 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 53 54         SQLITE_ST
0630: 41 54 55 53 5f 4d 41 4c 4c 4f 43 5f 53 49 5a 45  ATUS_MALLOC_SIZE
0640: 20 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20           },.    
0650: 7d 3b 0a 20 20 20 20 69 6e 74 20 6e 4f 70 20 3d  };.    int nOp =
0660: 20 73 69 7a 65 6f 66 28 61 4f 70 29 2f 73 69 7a   sizeof(aOp)/siz
0670: 65 6f 66 28 61 4f 70 5b 30 5d 29 3b 0a 20 20 20  eof(aOp[0]);.   
0680: 20 7a 4e 61 6d 65 20 3d 20 28 63 6f 6e 73 74 20   zName = (const 
0690: 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
06a0: 6c 75 65 5f 74 65 78 74 28 61 72 67 76 5b 30 5d  lue_text(argv[0]
06b0: 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
06c0: 69 3c 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  i<nOp; i++){.   
06d0: 20 20 20 69 66 28 20 73 74 72 63 6d 70 28 61 4f     if( strcmp(aO
06e0: 70 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  p[i].zName, zNam
06f0: 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  e)==0 ){.       
0700: 20 6f 70 20 3d 20 61 4f 70 5b 69 5d 2e 6f 70 3b   op = aOp[i].op;
0710: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
0720: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
0730: 20 20 69 66 28 20 69 3e 3d 6e 4f 70 20 29 7b 0a    if( i>=nOp ){.
0740: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4d 73 67        char *zMsg
0750: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
0760: 74 66 28 22 75 6e 6b 6e 6f 77 6e 20 73 74 61 74  tf("unknown stat
0770: 75 73 20 70 72 6f 70 65 72 74 79 3a 20 25 73 22  us property: %s"
0780: 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
0790: 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 65  sqlite3_result_e
07a0: 72 72 6f 72 28 63 6f 6e 74 65 78 74 2c 20 7a 4d  rror(context, zM
07b0: 73 67 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 73  sg, -1);.      s
07c0: 71 6c 69 74 65 33 5f 66 72 65 65 28 7a 4d 73 67  qlite3_free(zMsg
07d0: 29 3b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 3b  );.      return;
07e0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
07f0: 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75      sqlite3_resu
0800: 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65 78 74  lt_error(context
0810: 2c 20 22 75 6e 6b 6e 6f 77 6e 20 73 74 61 74 75  , "unknown statu
0820: 73 20 74 79 70 65 22 2c 20 2d 31 29 3b 0a 20 20  s type", -1);.  
0830: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20    return;.  }.  
0840: 69 66 28 20 61 72 67 63 3d 3d 32 20 29 7b 0a 20  if( argc==2 ){. 
0850: 20 20 20 72 65 73 65 74 46 6c 61 67 20 3d 20 73     resetFlag = s
0860: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74  qlite3_value_int
0870: 28 61 72 67 76 5b 31 5d 29 3b 0a 20 20 7d 65 6c  (argv[1]);.  }el
0880: 73 65 7b 0a 20 20 20 20 72 65 73 65 74 46 6c 61  se{.    resetFla
0890: 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 63 20  g = 0;.  }.  rc 
08a0: 3d 20 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73  = sqlite3_status
08b0: 28 6f 70 2c 20 26 63 75 72 2c 20 26 6d 78 2c 20  (op, &cur, &mx, 
08c0: 72 65 73 65 74 46 6c 61 67 29 3b 0a 20 20 69 66  resetFlag);.  if
08d0: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
08e0: 29 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4d 73  ){.    char *zMs
08f0: 67 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  g = sqlite3_mpri
0900: 6e 74 66 28 22 73 71 6c 69 74 65 33 5f 73 74 61  ntf("sqlite3_sta
0910: 74 75 73 28 25 64 2c 2e 2e 2e 29 20 72 65 74 75  tus(%d,...) retu
0920: 72 6e 73 20 25 64 22 2c 20 6f 70 2c 20 72 63 29  rns %d", op, rc)
0930: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65  ;.    sqlite3_re
0940: 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74 65  sult_error(conte
0950: 78 74 2c 20 7a 4d 73 67 2c 20 2d 31 29 3b 0a 20  xt, zMsg, -1);. 
0960: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
0970: 7a 4d 73 67 29 3b 0a 20 20 20 20 72 65 74 75 72  zMsg);.    retur
0980: 6e 3b 0a 20 20 7d 20 0a 20 20 69 66 28 20 61 72  n;.  } .  if( ar
0990: 67 63 3d 3d 32 20 29 7b 0a 20 20 20 20 73 71 6c  gc==2 ){.    sql
09a0: 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28  ite3_result_int(
09b0: 63 6f 6e 74 65 78 74 2c 20 6d 78 29 3b 0a 20 20  context, mx);.  
09c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
09d0: 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 28 63 6f  e3_result_int(co
09e0: 6e 74 65 78 74 2c 20 63 75 72 29 3b 0a 20 20 7d  ntext, cur);.  }
09f0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 74 65 6e 73  .}../*.** Extens
0a00: 69 6f 6e 20 6c 6f 61 64 20 66 75 6e 63 74 69 6f  ion load functio
0a10: 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 57 49  n..*/.#ifdef _WI
0a20: 4e 33 32 0a 5f 5f 64 65 63 6c 73 70 65 63 28 64  N32.__declspec(d
0a30: 6c 6c 65 78 70 6f 72 74 29 0a 23 65 6e 64 69 66  llexport).#endif
0a40: 0a 69 6e 74 20 74 65 73 74 6c 6f 61 64 65 78 74  .int testloadext
0a50: 5f 69 6e 69 74 28 0a 20 20 73 71 6c 69 74 65 33  _init(.  sqlite3
0a60: 20 2a 64 62 2c 20 0a 20 20 63 68 61 72 20 2a 2a   *db, .  char **
0a70: 70 7a 45 72 72 4d 73 67 2c 20 0a 20 20 63 6f 6e  pzErrMsg, .  con
0a80: 73 74 20 73 71 6c 69 74 65 33 5f 61 70 69 5f 72  st sqlite3_api_r
0a90: 6f 75 74 69 6e 65 73 20 2a 70 41 70 69 0a 29 7b  outines *pApi.){
0aa0: 0a 20 20 69 6e 74 20 6e 45 72 72 20 3d 20 30 3b  .  int nErr = 0;
0ab0: 0a 20 20 53 51 4c 49 54 45 5f 45 58 54 45 4e 53  .  SQLITE_EXTENS
0ac0: 49 4f 4e 5f 49 4e 49 54 32 28 70 41 70 69 29 3b  ION_INIT2(pApi);
0ad0: 0a 20 20 6e 45 72 72 20 7c 3d 20 73 71 6c 69 74  .  nErr |= sqlit
0ae0: 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69  e3_create_functi
0af0: 6f 6e 28 64 62 2c 20 22 68 61 6c 66 22 2c 20 31  on(db, "half", 1
0b00: 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20 30 2c  , SQLITE_ANY, 0,
0b10: 20 68 61 6c 66 46 75 6e 63 2c 20 30 2c 20 30 29   halfFunc, 0, 0)
0b20: 3b 0a 20 20 6e 45 72 72 20 7c 3d 20 73 71 6c 69  ;.  nErr |= sqli
0b30: 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
0b40: 69 6f 6e 28 64 62 2c 20 22 73 71 6c 69 74 65 33  ion(db, "sqlite3
0b50: 5f 73 74 61 74 75 73 22 2c 20 31 2c 20 53 51 4c  _status", 1, SQL
0b60: 49 54 45 5f 41 4e 59 2c 20 30 2c 0a 20 20 20 20  ITE_ANY, 0,.    
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b80: 20 20 20 20 20 20 73 74 61 74 75 73 46 75 6e 63        statusFunc
0b90: 2c 20 30 2c 20 30 29 3b 0a 20 20 6e 45 72 72 20  , 0, 0);.  nErr 
0ba0: 7c 3d 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  |= sqlite3_creat
0bb0: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
0bc0: 73 71 6c 69 74 65 33 5f 73 74 61 74 75 73 22 2c  sqlite3_status",
0bd0: 20 32 2c 20 53 51 4c 49 54 45 5f 41 4e 59 2c 20   2, SQLITE_ANY, 
0be0: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
0c00: 74 75 73 46 75 6e 63 2c 20 30 2c 20 30 29 3b 0a  tusFunc, 0, 0);.
0c10: 20 20 72 65 74 75 72 6e 20 6e 45 72 72 20 3f 20    return nErr ? 
0c20: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53  SQLITE_ERROR : S
0c30: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a  QLITE_OK;.}../*.
0c40: 2a 2a 20 41 6e 6f 74 68 65 72 20 65 78 74 65 6e  ** Another exten
0c50: 73 69 6f 6e 20 65 6e 74 72 79 20 70 6f 69 6e 74  sion entry point
0c60: 2e 20 54 68 69 73 20 6f 6e 65 20 61 6c 77 61 79  . This one alway
0c70: 73 20 66 61 69 6c 73 2e 0a 2a 2f 0a 23 69 66 64  s fails..*/.#ifd
0c80: 65 66 20 5f 57 49 4e 33 32 0a 5f 5f 64 65 63 6c  ef _WIN32.__decl
0c90: 73 70 65 63 28 64 6c 6c 65 78 70 6f 72 74 29 0a  spec(dllexport).
0ca0: 23 65 6e 64 69 66 0a 69 6e 74 20 74 65 73 74 62  #endif.int testb
0cb0: 72 6f 6b 65 6e 65 78 74 5f 69 6e 69 74 28 0a 20  rokenext_init(. 
0cc0: 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 0a 20   sqlite3 *db, . 
0cd0: 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67   char **pzErrMsg
0ce0: 2c 20 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74  , .  const sqlit
0cf0: 65 33 5f 61 70 69 5f 72 6f 75 74 69 6e 65 73 20  e3_api_routines 
0d00: 2a 70 41 70 69 0a 29 7b 0a 20 20 63 68 61 72 20  *pApi.){.  char 
0d10: 2a 7a 45 72 72 3b 0a 20 20 53 51 4c 49 54 45 5f  *zErr;.  SQLITE_
0d20: 45 58 54 45 4e 53 49 4f 4e 5f 49 4e 49 54 32 28  EXTENSION_INIT2(
0d30: 70 41 70 69 29 3b 0a 20 20 7a 45 72 72 20 3d 20  pApi);.  zErr = 
0d40: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
0d50: 22 62 72 6f 6b 65 6e 21 22 29 3b 0a 20 20 2a 70  "broken!");.  *p
0d60: 7a 45 72 72 4d 73 67 20 3d 20 7a 45 72 72 3b 0a  zErrMsg = zErr;.
0d70: 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a          return 1;.}.