/ Hex Artifact Content
Login

Artifact 5e892ab84aece3f0428920bf46923f16ac83962a:


0000: 2f 2a 0a 2a 2a 20 32 30 30 36 20 41 75 67 75 73  /*.** 2006 Augus
0010: 74 20 32 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  t 23.**.** The a
0020: 75 74 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20  uthor disclaims 
0030: 63 6f 70 79 72 69 67 68 74 20 74 6f 20 74 68 69  copyright to thi
0040: 73 20 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20  s source code.  
0050: 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61  In place of.** a
0060: 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68   legal notice, h
0070: 65 72 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e  ere is a blessin
0080: 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20  g:.**.**    May 
0090: 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20  you do good and 
00a0: 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20  not evil..**    
00b0: 4d 61 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72  May you find for
00c0: 67 69 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75  giveness for you
00d0: 72 73 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76  rself and forgiv
00e0: 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20  e others..**    
00f0: 4d 61 79 20 79 6f 75 20 73 68 61 72 65 20 66 72  May you share fr
0100: 65 65 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69  eely, never taki
0110: 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75  ng more than you
0120: 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a   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 0a 2a 2a 20 54 65 73 74 20 65 78 74 65  ***.** Test exte
0180: 6e 73 69 6f 6e 20 66 6f 72 20 74 65 73 74 69 6e  nsion for testin
0190: 67 20 74 68 65 20 73 71 6c 69 74 65 33 5f 61 75  g the sqlite3_au
01a0: 74 6f 5f 65 78 74 65 6e 73 69 6f 6e 28 29 20 66  to_extension() f
01b0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 24  unction..**.** $
01c0: 49 64 3a 20 74 65 73 74 5f 61 75 74 6f 65 78 74  Id: test_autoext
01d0: 2e 63 2c 76 20 31 2e 34 20 32 30 30 38 2f 30 33  .c,v 1.4 2008/03
01e0: 2f 31 39 20 32 33 3a 35 32 3a 33 35 20 6d 6c 63  /19 23:52:35 mlc
01f0: 72 65 65 63 68 20 45 78 70 20 24 0a 2a 2f 0a 23  reech Exp $.*/.#
0200: 69 6e 63 6c 75 64 65 20 22 74 63 6c 2e 68 22 0a  include "tcl.h".
0210: 23 69 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65  #include "sqlite
0220: 33 65 78 74 2e 68 22 0a 0a 23 69 66 6e 64 65 66  3ext.h"..#ifndef
0230: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
0240: 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 73 74 61 74  D_EXTENSION.stat
0250: 69 63 20 53 51 4c 49 54 45 5f 45 58 54 45 4e 53  ic SQLITE_EXTENS
0260: 49 4f 4e 5f 49 4e 49 54 31 0a 0a 2f 2a 0a 2a 2a  ION_INIT1../*.**
0270: 20 54 68 65 20 73 71 72 28 29 20 53 51 4c 20 66   The sqr() SQL f
0280: 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73 20  unction returns 
0290: 74 68 65 20 73 71 75 61 72 65 20 6f 66 20 69 74  the square of it
02a0: 73 20 69 6e 70 75 74 20 76 61 6c 75 65 2e 0a 2a  s input value..*
02b0: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 71  /.static void sq
02c0: 72 46 75 6e 63 28 0a 20 20 73 71 6c 69 74 65 33  rFunc(.  sqlite3
02d0: 5f 63 6f 6e 74 65 78 74 20 2a 63 6f 6e 74 65 78  _context *contex
02e0: 74 2c 0a 20 20 69 6e 74 20 61 72 67 63 2c 0a 20  t,.  int argc,. 
02f0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
0300: 2a 61 72 67 76 0a 29 7b 0a 20 20 64 6f 75 62 6c  *argv.){.  doubl
0310: 65 20 72 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  e r = sqlite3_va
0320: 6c 75 65 5f 64 6f 75 62 6c 65 28 61 72 67 76 5b  lue_double(argv[
0330: 30 5d 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 72  0]);.  sqlite3_r
0340: 65 73 75 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e  esult_double(con
0350: 74 65 78 74 2c 20 72 2a 72 29 3b 0a 7d 0a 0a 2f  text, r*r);.}../
0360: 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65  *.** This is the
0370: 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 74 6f 20   entry point to 
0380: 72 65 67 69 73 74 65 72 20 74 68 65 20 65 78 74  register the ext
0390: 65 6e 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 73  ension for the s
03a0: 71 72 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a  qr() function..*
03b0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 73 71 72  /.static int sqr
03c0: 5f 69 6e 69 74 28 0a 20 20 73 71 6c 69 74 65 33  _init(.  sqlite3
03d0: 20 2a 64 62 2c 20 0a 20 20 63 68 61 72 20 2a 2a   *db, .  char **
03e0: 70 7a 45 72 72 4d 73 67 2c 20 0a 20 20 63 6f 6e  pzErrMsg, .  con
03f0: 73 74 20 73 71 6c 69 74 65 33 5f 61 70 69 5f 72  st sqlite3_api_r
0400: 6f 75 74 69 6e 65 73 20 2a 70 41 70 69 0a 29 7b  outines *pApi.){
0410: 0a 20 20 53 51 4c 49 54 45 5f 45 58 54 45 4e 53  .  SQLITE_EXTENS
0420: 49 4f 4e 5f 49 4e 49 54 32 28 70 41 70 69 29 3b  ION_INIT2(pApi);
0430: 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  .  sqlite3_creat
0440: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
0450: 73 71 72 22 2c 20 31 2c 20 53 51 4c 49 54 45 5f  sqr", 1, SQLITE_
0460: 41 4e 59 2c 20 30 2c 20 73 71 72 46 75 6e 63 2c  ANY, 0, sqrFunc,
0470: 20 30 2c 20 30 29 3b 0a 20 20 72 65 74 75 72 6e   0, 0);.  return
0480: 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65   0;.}../*.** The
0490: 20 63 75 62 65 28 29 20 53 51 4c 20 66 75 6e 63   cube() SQL func
04a0: 74 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65  tion returns the
04b0: 20 63 75 62 65 20 6f 66 20 69 74 73 20 69 6e 70   cube of its inp
04c0: 75 74 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61  ut value..*/.sta
04d0: 74 69 63 20 76 6f 69 64 20 63 75 62 65 46 75 6e  tic void cubeFun
04e0: 63 28 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e  c(.  sqlite3_con
04f0: 74 65 78 74 20 2a 63 6f 6e 74 65 78 74 2c 0a 20  text *context,. 
0500: 20 69 6e 74 20 61 72 67 63 2c 0a 20 20 73 71 6c   int argc,.  sql
0510: 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61 72 67  ite3_value **arg
0520: 76 0a 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72 20  v.){.  double r 
0530: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
0540: 64 6f 75 62 6c 65 28 61 72 67 76 5b 30 5d 29 3b  double(argv[0]);
0550: 0a 20 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  .  sqlite3_resul
0560: 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78 74  t_double(context
0570: 2c 20 72 2a 72 2a 72 29 3b 0a 7d 0a 0a 2f 2a 0a  , r*r*r);.}../*.
0580: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 65  ** This is the e
0590: 6e 74 72 79 20 70 6f 69 6e 74 20 74 6f 20 72 65  ntry point to re
05a0: 67 69 73 74 65 72 20 74 68 65 20 65 78 74 65 6e  gister the exten
05b0: 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 63 75 62  sion for the cub
05c0: 65 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  e() function..*/
05d0: 0a 73 74 61 74 69 63 20 69 6e 74 20 63 75 62 65  .static int cube
05e0: 5f 69 6e 69 74 28 0a 20 20 73 71 6c 69 74 65 33  _init(.  sqlite3
05f0: 20 2a 64 62 2c 20 0a 20 20 63 68 61 72 20 2a 2a   *db, .  char **
0600: 70 7a 45 72 72 4d 73 67 2c 20 0a 20 20 63 6f 6e  pzErrMsg, .  con
0610: 73 74 20 73 71 6c 69 74 65 33 5f 61 70 69 5f 72  st sqlite3_api_r
0620: 6f 75 74 69 6e 65 73 20 2a 70 41 70 69 0a 29 7b  outines *pApi.){
0630: 0a 20 20 53 51 4c 49 54 45 5f 45 58 54 45 4e 53  .  SQLITE_EXTENS
0640: 49 4f 4e 5f 49 4e 49 54 32 28 70 41 70 69 29 3b  ION_INIT2(pApi);
0650: 0a 20 20 73 71 6c 69 74 65 33 5f 63 72 65 61 74  .  sqlite3_creat
0660: 65 5f 66 75 6e 63 74 69 6f 6e 28 64 62 2c 20 22  e_function(db, "
0670: 63 75 62 65 22 2c 20 31 2c 20 53 51 4c 49 54 45  cube", 1, SQLITE
0680: 5f 41 4e 59 2c 20 30 2c 20 63 75 62 65 46 75 6e  _ANY, 0, cubeFun
0690: 63 2c 20 30 2c 20 30 29 3b 0a 20 20 72 65 74 75  c, 0, 0);.  retu
06a0: 72 6e 20 30 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54  rn 0;.}../*.** T
06b0: 68 69 73 20 69 73 20 61 20 62 72 6f 6b 65 6e 20  his is a broken 
06c0: 65 78 74 65 6e 73 69 6f 6e 20 65 6e 74 72 79 20  extension entry 
06d0: 70 6f 69 6e 74 0a 2a 2f 0a 73 74 61 74 69 63 20  point.*/.static 
06e0: 69 6e 74 20 62 72 6f 6b 65 6e 5f 69 6e 69 74 28  int broken_init(
06f0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  .  sqlite3 *db, 
0700: 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d  .  char **pzErrM
0710: 73 67 2c 20 0a 20 20 63 6f 6e 73 74 20 73 71 6c  sg, .  const sql
0720: 69 74 65 33 5f 61 70 69 5f 72 6f 75 74 69 6e 65  ite3_api_routine
0730: 73 20 2a 70 41 70 69 0a 29 7b 0a 20 20 63 68 61  s *pApi.){.  cha
0740: 72 20 2a 7a 45 72 72 3b 0a 20 20 53 51 4c 49 54  r *zErr;.  SQLIT
0750: 45 5f 45 58 54 45 4e 53 49 4f 4e 5f 49 4e 49 54  E_EXTENSION_INIT
0760: 32 28 70 41 70 69 29 3b 0a 20 20 7a 45 72 72 20  2(pApi);.  zErr 
0770: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
0780: 66 28 22 62 72 6f 6b 65 6e 20 61 75 74 6f 65 78  f("broken autoex
0790: 74 21 22 29 3b 0a 20 20 2a 70 7a 45 72 72 4d 73  t!");.  *pzErrMs
07a0: 67 20 3d 20 7a 45 72 72 3b 0a 20 20 72 65 74 75  g = zErr;.  retu
07b0: 72 6e 20 31 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74  rn 1;.}../*.** t
07c0: 63 6c 63 6d 64 3a 20 20 20 73 71 6c 69 74 65 33  clcmd:   sqlite3
07d0: 5f 61 75 74 6f 5f 65 78 74 65 6e 73 69 6f 6e 5f  _auto_extension_
07e0: 73 71 72 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74  sqr.**.** Regist
07f0: 65 72 20 74 68 65 20 22 73 71 72 22 20 65 78 74  er the "sqr" ext
0800: 65 6e 73 69 6f 6e 20 74 6f 20 62 65 20 6c 6f 61  ension to be loa
0810: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
0820: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  y..*/.static int
0830: 20 61 75 74 6f 45 78 74 53 71 72 4f 62 6a 43 6d   autoExtSqrObjCm
0840: 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69 65  d(.  void * clie
0850: 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49 6e  ntData,.  Tcl_In
0860: 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20 20  terp *interp,.  
0870: 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c 5f  int objc,.  Tcl_
0880: 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76 5b  Obj *CONST objv[
0890: 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 61  ].){.  sqlite3_a
08a0: 75 74 6f 5f 65 78 74 65 6e 73 69 6f 6e 28 28 76  uto_extension((v
08b0: 6f 69 64 2a 29 73 71 72 5f 69 6e 69 74 29 3b 0a  oid*)sqr_init);.
08c0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
08d0: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74 63 6c  OK;.}../*.** tcl
08e0: 63 6d 64 3a 20 20 20 73 71 6c 69 74 65 33 5f 61  cmd:   sqlite3_a
08f0: 75 74 6f 5f 65 78 74 65 6e 73 69 6f 6e 5f 63 75  uto_extension_cu
0900: 62 65 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  be.**.** Registe
0910: 72 20 74 68 65 20 22 63 75 62 65 22 20 65 78 74  r the "cube" ext
0920: 65 6e 73 69 6f 6e 20 74 6f 20 62 65 20 6c 6f 61  ension to be loa
0930: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
0940: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  y..*/.static int
0950: 20 61 75 74 6f 45 78 74 43 75 62 65 4f 62 6a 43   autoExtCubeObjC
0960: 6d 64 28 0a 20 20 76 6f 69 64 20 2a 20 63 6c 69  md(.  void * cli
0970: 65 6e 74 44 61 74 61 2c 0a 20 20 54 63 6c 5f 49  entData,.  Tcl_I
0980: 6e 74 65 72 70 20 2a 69 6e 74 65 72 70 2c 0a 20  nterp *interp,. 
0990: 20 69 6e 74 20 6f 62 6a 63 2c 0a 20 20 54 63 6c   int objc,.  Tcl
09a0: 5f 4f 62 6a 20 2a 43 4f 4e 53 54 20 6f 62 6a 76  _Obj *CONST objv
09b0: 5b 5d 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f  [].){.  sqlite3_
09c0: 61 75 74 6f 5f 65 78 74 65 6e 73 69 6f 6e 28 28  auto_extension((
09d0: 76 6f 69 64 2a 29 63 75 62 65 5f 69 6e 69 74 29  void*)cube_init)
09e0: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
09f0: 45 5f 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 74  E_OK;.}../*.** t
0a00: 63 6c 63 6d 64 3a 20 20 20 73 71 6c 69 74 65 33  clcmd:   sqlite3
0a10: 5f 61 75 74 6f 5f 65 78 74 65 6e 73 69 6f 6e 5f  _auto_extension_
0a20: 62 72 6f 6b 65 6e 0a 2a 2a 0a 2a 2a 20 52 65 67  broken.**.** Reg
0a30: 69 73 74 65 72 20 74 68 65 20 62 72 6f 6b 65 6e  ister the broken
0a40: 20 65 78 74 65 6e 73 69 6f 6e 20 74 6f 20 62 65   extension to be
0a50: 20 6c 6f 61 64 65 64 20 61 75 74 6f 6d 61 74 69   loaded automati
0a60: 63 61 6c 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63  cally..*/.static
0a70: 20 69 6e 74 20 61 75 74 6f 45 78 74 42 72 6f 6b   int autoExtBrok
0a80: 65 6e 4f 62 6a 43 6d 64 28 0a 20 20 76 6f 69 64  enObjCmd(.  void
0a90: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
0aa0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
0ab0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
0ac0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
0ad0: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
0ae0: 6c 69 74 65 33 5f 61 75 74 6f 5f 65 78 74 65 6e  lite3_auto_exten
0af0: 73 69 6f 6e 28 28 76 6f 69 64 2a 29 62 72 6f 6b  sion((void*)brok
0b00: 65 6e 5f 69 6e 69 74 29 3b 0a 20 20 72 65 74 75  en_init);.  retu
0b10: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a  rn SQLITE_OK;.}.
0b20: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
0b30: 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58 54 45  E_OMIT_LOAD_EXTE
0b40: 4e 53 49 4f 4e 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  NSION */.../*.**
0b50: 20 74 63 6c 63 6d 64 3a 20 20 20 73 71 6c 69 74   tclcmd:   sqlit
0b60: 65 33 5f 72 65 73 65 74 5f 61 75 74 6f 5f 65 78  e3_reset_auto_ex
0b70: 74 65 6e 73 69 6f 6e 0a 2a 2a 0a 2a 2a 20 52 65  tension.**.** Re
0b80: 73 65 74 20 61 6c 6c 20 61 75 74 6f 2d 65 78 74  set all auto-ext
0b90: 65 6e 73 69 6f 6e 73 0a 2a 2f 0a 73 74 61 74 69  ensions.*/.stati
0ba0: 63 20 69 6e 74 20 72 65 73 65 74 41 75 74 6f 45  c int resetAutoE
0bb0: 78 74 4f 62 6a 43 6d 64 28 0a 20 20 76 6f 69 64  xtObjCmd(.  void
0bc0: 20 2a 20 63 6c 69 65 6e 74 44 61 74 61 2c 0a 20   * clientData,. 
0bd0: 20 54 63 6c 5f 49 6e 74 65 72 70 20 2a 69 6e 74   Tcl_Interp *int
0be0: 65 72 70 2c 0a 20 20 69 6e 74 20 6f 62 6a 63 2c  erp,.  int objc,
0bf0: 0a 20 20 54 63 6c 5f 4f 62 6a 20 2a 43 4f 4e 53  .  Tcl_Obj *CONS
0c00: 54 20 6f 62 6a 76 5b 5d 0a 29 7b 0a 20 20 73 71  T objv[].){.  sq
0c10: 6c 69 74 65 33 5f 72 65 73 65 74 5f 61 75 74 6f  lite3_reset_auto
0c20: 5f 65 78 74 65 6e 73 69 6f 6e 28 29 3b 0a 20 20  _extension();.  
0c30: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b  return SQLITE_OK
0c40: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  ;.}.../*.** This
0c50: 20 70 72 6f 63 65 64 75 72 65 20 72 65 67 69 73   procedure regis
0c60: 74 65 72 73 20 74 68 65 20 54 43 4c 20 70 72 6f  ters the TCL pro
0c70: 63 73 20 64 65 66 69 6e 65 64 20 69 6e 20 74 68  cs defined in th
0c80: 69 73 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20  is file..*/.int 
0c90: 53 71 6c 69 74 65 74 65 73 74 5f 61 75 74 6f 65  Sqlitetest_autoe
0ca0: 78 74 5f 49 6e 69 74 28 54 63 6c 5f 49 6e 74 65  xt_Init(Tcl_Inte
0cb0: 72 70 20 2a 69 6e 74 65 72 70 29 7b 0a 23 69 66  rp *interp){.#if
0cc0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
0cd0: 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a  _LOAD_EXTENSION.
0ce0: 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43    Tcl_CreateObjC
0cf0: 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22  ommand(interp, "
0d00: 73 71 6c 69 74 65 33 5f 61 75 74 6f 5f 65 78 74  sqlite3_auto_ext
0d10: 65 6e 73 69 6f 6e 5f 73 71 72 22 2c 0a 20 20 20  ension_sqr",.   
0d20: 20 20 20 20 20 20 20 61 75 74 6f 45 78 74 53 71         autoExtSq
0d30: 72 4f 62 6a 43 6d 64 2c 20 30 2c 20 30 29 3b 0a  rObjCmd, 0, 0);.
0d40: 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43    Tcl_CreateObjC
0d50: 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22  ommand(interp, "
0d60: 73 71 6c 69 74 65 33 5f 61 75 74 6f 5f 65 78 74  sqlite3_auto_ext
0d70: 65 6e 73 69 6f 6e 5f 63 75 62 65 22 2c 0a 20 20  ension_cube",.  
0d80: 20 20 20 20 20 20 20 20 61 75 74 6f 45 78 74 43          autoExtC
0d90: 75 62 65 4f 62 6a 43 6d 64 2c 20 30 2c 20 30 29  ubeObjCmd, 0, 0)
0da0: 3b 0a 20 20 54 63 6c 5f 43 72 65 61 74 65 4f 62  ;.  Tcl_CreateOb
0db0: 6a 43 6f 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c  jCommand(interp,
0dc0: 20 22 73 71 6c 69 74 65 33 5f 61 75 74 6f 5f 65   "sqlite3_auto_e
0dd0: 78 74 65 6e 73 69 6f 6e 5f 62 72 6f 6b 65 6e 22  xtension_broken"
0de0: 2c 0a 20 20 20 20 20 20 20 20 20 20 61 75 74 6f  ,.          auto
0df0: 45 78 74 42 72 6f 6b 65 6e 4f 62 6a 43 6d 64 2c  ExtBrokenObjCmd,
0e00: 20 30 2c 20 30 29 3b 0a 23 65 6e 64 69 66 0a 20   0, 0);.#endif. 
0e10: 20 54 63 6c 5f 43 72 65 61 74 65 4f 62 6a 43 6f   Tcl_CreateObjCo
0e20: 6d 6d 61 6e 64 28 69 6e 74 65 72 70 2c 20 22 73  mmand(interp, "s
0e30: 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 61 75 74  qlite3_reset_aut
0e40: 6f 5f 65 78 74 65 6e 73 69 6f 6e 22 2c 0a 20 20  o_extension",.  
0e50: 20 20 20 20 20 20 20 20 72 65 73 65 74 41 75 74          resetAut
0e60: 6f 45 78 74 4f 62 6a 43 6d 64 2c 20 30 2c 20 30  oExtObjCmd, 0, 0
0e70: 29 3b 0a 20 20 72 65 74 75 72 6e 20 54 43 4c 5f  );.  return TCL_
0e80: 4f 4b 3b 0a 7d 0a                                OK;.}.