Hex Artifact Content Вы: nobody
Вход

Artifact 8dba232b07d31314b89c03508176230e2636a4d2:


0000: 2f 2f 64 61 74 61 62 61 73 65 2e 63 70 70 0d 0a  //database.cpp..
0010: 23 69 6e 63 6c 75 64 65 20 22 53 74 64 41 66 78  #include "StdAfx
0020: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 69  .h"..#include <i
0030: 6f 2e 68 3e 0d 0a 23 69 6e 63 6c 75 64 65 20 22  o.h>..#include "
0040: 64 61 74 61 62 61 73 65 2e 68 22 0d 0a 23 69 6e  database.h"..#in
0050: 63 6c 75 64 65 20 22 75 74 65 78 2e 68 22 0d 0a  clude "utex.h"..
0060: 23 69 6e 63 6c 75 64 65 20 22 76 74 61 62 5f 69  #include "vtab_i
0070: 6e 66 6f 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65  nfo.h"..#include
0080: 20 22 56 61 6c 75 65 57 6f 72 6b 2e 68 70 70 22   "ValueWork.hpp"
0090: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 72 65 73 75  ..#include "resu
00a0: 6c 74 6c 6f 61 64 65 72 2e 68 22 0d 0a 23 69 6e  ltloader.h"..#in
00b0: 63 6c 75 64 65 20 22 2e 2e 2f 5f 31 43 6f 6d 6d  clude "../_1Comm
00c0: 6f 6e 2f 63 74 78 74 72 65 65 2e 68 22 0d 0a 0d  on/ctxtree.h"...
00d0: 0a 43 53 74 72 69 6e 67 20 53 51 4c 69 74 65 42  .CString SQLiteB
00e0: 61 73 65 3a 3a 6d 5f 74 72 61 63 65 3b 0d 0a 0d  ase::m_trace;...
00f0: 0a 42 4c 5f 49 4e 49 54 5f 43 4f 4e 54 45 58 54  .BL_INIT_CONTEXT
0100: 28 43 53 4c 44 61 74 61 42 61 73 65 29 3b 0d 0a  (CSLDataBase);..
0110: 0d 0a 65 78 74 65 72 6e 20 22 43 22 20 42 4f 4f  ..extern "C" BOO
0120: 4c 20 62 4e 65 65 64 50 72 6f 66 69 6c 65 20 3d  L bNeedProfile =
0130: 20 46 41 4c 53 45 3b 0d 0a 43 53 74 72 69 6e 67   FALSE;..CString
0140: 20 73 74 72 50 72 6f 66 69 6c 65 3b 0d 0a 65 78   strProfile;..ex
0150: 74 65 72 6e 20 22 43 22 20 76 6f 69 64 20 64 6f  tern "C" void do
0160: 50 72 6f 66 69 6c 65 4d 73 67 28 63 6f 6e 73 74  ProfileMsg(const
0170: 20 63 68 61 72 2a 20 6d 73 67 29 0d 0a 7b 0d 0a   char* msg)..{..
0180: 09 43 53 74 72 69 6e 67 20 74 6d 70 28 6d 73 67  .CString tmp(msg
0190: 29 3b 0d 0a 09 74 6d 70 2e 52 65 70 6c 61 63 65  );...tmp.Replace
01a0: 28 22 5c 72 5c 6e 22 2c 20 22 5c 6e 22 29 3b 0d  ("\r\n", "\n");.
01b0: 0a 09 73 74 72 50 72 6f 66 69 6c 65 20 2b 3d 20  ..strProfile += 
01c0: 74 6d 70 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20  tmp;..}....void 
01d0: 62 61 73 65 53 74 72 32 49 64 28 73 71 6c 69 74  baseStr2Id(sqlit
01e0: 65 33 5f 63 6f 6e 74 65 78 74 2a 20 70 43 74 78  e3_context* pCtx
01f0: 2c 20 69 6e 74 20 6e 50 61 72 61 6d 2c 20 73 71  , int nParam, sq
0200: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 20 70 70  lite3_value** pp
0210: 41 72 67 73 29 0d 0a 7b 0d 0a 09 43 53 74 72 69  Args)..{...CStri
0220: 6e 67 20 74 65 78 74 20 3d 20 28 4c 50 43 53 54  ng text = (LPCST
0230: 52 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  R)sqlite3_value_
0240: 74 65 78 74 28 70 70 41 72 67 73 5b 30 5d 29 3b  text(ppArgs[0]);
0250: 0d 0a 09 44 57 4f 52 44 20 69 64 20 3d 20 30 3b  ...DWORD id = 0;
0260: 0d 0a 09 63 6f 6e 73 74 20 42 59 54 45 2a 20 70  ...const BYTE* p
0270: 74 72 20 3d 20 28 63 6f 6e 73 74 20 42 59 54 45  tr = (const BYTE
0280: 2a 29 28 4c 50 43 53 54 52 29 74 65 78 74 3b 0d  *)(LPCSTR)text;.
0290: 0a 09 66 6f 72 28 3b 3b 29 0d 0a 09 7b 0d 0a 09  ..for(;;)...{...
02a0: 09 44 57 4f 52 44 20 73 20 3d 20 28 44 57 4f 52  .DWORD s = (DWOR
02b0: 44 29 2a 70 74 72 3b 0d 0a 09 09 69 66 28 21 73  D)*ptr;....if(!s
02c0: 29 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09  ).....break;....
02d0: 69 64 20 3d 20 69 64 20 2a 20 33 36 20 2b 20 28  id = id * 36 + (
02e0: 73 20 3e 3d 20 27 41 27 20 3f 20 73 20 2d 27 41  s >= 'A' ? s -'A
02f0: 27 20 2b 20 31 30 20 3a 20 73 20 2d 20 27 30 27  ' + 10 : s - '0'
0300: 29 3b 0d 0a 09 09 70 74 72 2b 2b 3b 0d 0a 09 7d  );....ptr++;...}
0310: 0d 0a 09 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ...sqlite3_resul
0320: 74 5f 69 6e 74 28 70 43 74 78 2c 20 69 64 29 3b  t_int(pCtx, id);
0330: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 62 61 73 65  ..}....void base
0340: 49 64 32 53 74 72 28 73 71 6c 69 74 65 33 5f 63  Id2Str(sqlite3_c
0350: 6f 6e 74 65 78 74 2a 20 70 43 74 78 2c 20 69 6e  ontext* pCtx, in
0360: 74 20 6e 50 61 72 61 6d 2c 20 73 71 6c 69 74 65  t nParam, sqlite
0370: 33 5f 76 61 6c 75 65 2a 2a 20 70 70 41 72 67 73  3_value** ppArgs
0380: 29 0d 0a 7b 0d 0a 09 44 57 4f 52 44 20 69 64 20  )..{...DWORD id 
0390: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  = sqlite3_value_
03a0: 69 6e 74 28 70 70 41 72 67 73 5b 30 5d 29 2c 20  int(ppArgs[0]), 
03b0: 6c 65 6e 20 3d 20 73 71 6c 69 74 65 33 5f 76 61  len = sqlite3_va
03c0: 6c 75 65 5f 69 6e 74 28 70 70 41 72 67 73 5b 31  lue_int(ppArgs[1
03d0: 5d 29 3b 0d 0a 09 43 53 74 72 69 6e 67 20 74 65  ]);...CString te
03e0: 78 74 3b 0d 0a 09 42 59 54 45 2a 20 70 74 72 20  xt;...BYTE* ptr 
03f0: 3d 20 28 42 59 54 45 2a 29 74 65 78 74 2e 47 65  = (BYTE*)text.Ge
0400: 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 74 68  tBufferSetLength
0410: 28 6c 65 6e 29 3b 0d 0a 09 6d 65 6d 73 65 74 28  (len);...memset(
0420: 70 74 72 2c 20 27 20 27 2c 20 6c 65 6e 29 3b 0d  ptr, ' ', len);.
0430: 0a 09 69 64 32 73 74 72 28 69 64 2c 20 70 74 72  ..id2str(id, ptr
0440: 2c 20 6c 65 6e 29 3b 0d 0a 09 73 71 6c 69 74 65  , len);...sqlite
0450: 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 70 43  3_result_text(pC
0460: 74 78 2c 20 74 65 78 74 2c 20 6c 65 6e 2c 20 53  tx, text, len, S
0470: 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29  QLITE_TRANSIENT)
0480: 3b 0d 0a 7d 0d 0a 0d 0a 2f 2f 20 d4 f3 ed ea f6  ;..}....// .....
0490: e8 ff 2c 20 ea ee f2 ee f0 e0 ff 20 e2 20 ee f2  .., ....... . ..
04a0: eb e8 f7 e8 e5 20 ee f2 20 63 6f 61 6c 65 73 63  ..... .. coalesc
04b0: 65 2c 20 f3 ec e5 e5 f2 20 e2 ee e7 e2 f0 e0 f9  e, ..... .......
04c0: e0 f2 fc 20 ed e5 20 f2 ee eb fc ea ee 0d 0a 2f  ... .. ......../
04d0: 2f 20 ef e5 f0 e2 ee e5 20 ed e5 2d ed f3 eb fc  / ...... ..-....
04e0: 20 e7 ed e0 f7 e5 ed e8 e5 2c 20 ed ee 20 e8 20   ........, .. . 
04f0: eb fe e1 ee e5 20 e7 e0 e4 e0 ed ed ee e5 20 ef  ..... ........ .
0500: e5 f0 e2 fb ec 20 e0 f0 e3 f3 ec e5 ed f2 ee ec  ..... ..........
0510: 2e 0d 0a 76 6f 69 64 20 63 6f 61 6c 65 73 63 65  ...void coalesce
0520: 45 78 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  Ex(sqlite3_conte
0530: 78 74 2a 20 70 43 74 78 2c 20 69 6e 74 20 6e 50  xt* pCtx, int nP
0540: 61 72 61 6d 2c 20 73 71 6c 69 74 65 33 5f 76 61  aram, sqlite3_va
0550: 6c 75 65 2a 2a 20 70 70 41 72 67 73 29 0d 0a 7b  lue** ppArgs)..{
0560: 0d 0a 09 69 66 28 6e 50 61 72 61 6d 20 3e 20 31  ...if(nParam > 1
0570: 29 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 44 20 6e  )...{....DWORD n
0580: 75 6d 62 65 72 20 3d 20 73 71 6c 69 74 65 33 5f  umber = sqlite3_
0590: 76 61 6c 75 65 5f 69 6e 74 28 70 70 41 72 67 73  value_int(ppArgs
05a0: 5b 30 5d 29 20 2d 20 31 3b 0d 0a 09 09 69 66 28  [0]) - 1;....if(
05b0: 6e 75 6d 62 65 72 20 3c 20 6e 50 61 72 61 6d 20  number < nParam 
05c0: 2d 20 31 29 0d 0a 09 09 7b 0d 0a 09 09 09 66 6f  - 1)....{.....fo
05d0: 72 28 69 6e 74 20 6b 20 3d 20 31 3b 20 6b 20 3c  r(int k = 1; k <
05e0: 20 6e 50 61 72 61 6d 3b 20 6b 2b 2b 29 0d 0a 09   nParam; k++)...
05f0: 09 09 7b 0d 0a 09 09 09 09 69 66 28 53 51 4c 49  ..{......if(SQLI
0600: 54 45 5f 4e 55 4c 4c 20 21 3d 20 73 71 6c 69 74  TE_NULL != sqlit
0610: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 70  e3_value_type(pp
0620: 41 72 67 73 5b 6b 5d 29 29 0d 0a 09 09 09 09 7b  Args[k]))......{
0630: 0d 0a 09 09 09 09 09 69 66 28 21 6e 75 6d 62 65  .......if(!numbe
0640: 72 29 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09  r).......{......
0650: 09 09 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  ..sqlite3_result
0660: 5f 76 61 6c 75 65 28 70 43 74 78 2c 20 70 70 41  _value(pCtx, ppA
0670: 72 67 73 5b 6b 5d 29 3b 0d 0a 09 09 09 09 09 09  rgs[k]);........
0680: 72 65 74 75 72 6e 3b 0d 0a 09 09 09 09 09 7d 0d  return;.......}.
0690: 0a 09 09 09 09 09 6e 75 6d 62 65 72 2d 2d 3b 0d  ......number--;.
06a0: 0a 09 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09  .....}.....}....
06b0: 7d 0d 0a 09 7d 0d 0a 09 73 71 6c 69 74 65 33 5f  }...}...sqlite3_
06c0: 72 65 73 75 6c 74 5f 6e 75 6c 6c 28 70 43 74 78  result_null(pCtx
06d0: 29 3b 0d 0a 7d 0d 0a 0d 0a 73 74 72 75 63 74 20  );..}....struct 
06e0: 62 69 6e 64 53 71 6c 50 61 72 61 6d 0d 0a 7b 0d  bindSqlParam..{.
06f0: 0a 09 62 69 6e 64 53 71 6c 50 61 72 61 6d 28 63  ..bindSqlParam(c
0700: 6f 6e 73 74 20 43 53 74 72 69 6e 67 26 20 70 6e  onst CString& pn
0710: 2c 20 69 6e 74 20 69 64 78 4e 75 6d 2c 20 73 71  , int idxNum, sq
0720: 6c 69 74 65 33 2a 20 62 2c 20 73 71 6c 69 74 65  lite3* b, sqlite
0730: 33 5f 73 74 6d 74 2a 20 73 29 0d 0a 09 09 3a 70  3_stmt* s)....:p
0740: 61 72 61 6d 4e 61 6d 65 28 70 6e 29 2c 20 6e 50  aramName(pn), nP
0750: 61 72 61 6d 4e 75 6d 28 69 64 78 4e 75 6d 29 2c  aramNum(idxNum),
0760: 20 70 42 61 73 65 28 62 29 2c 20 70 53 74 6d 74   pBase(b), pStmt
0770: 28 73 29 7b 7d 0d 0a 09 63 6f 6e 73 74 20 43 53  (s){}...const CS
0780: 74 72 69 6e 67 26 20 70 61 72 61 6d 4e 61 6d 65  tring& paramName
0790: 3b 0d 0a 09 69 6e 74 20 6e 50 61 72 61 6d 4e 75  ;...int nParamNu
07a0: 6d 3b 0d 0a 09 73 71 6c 69 74 65 33 2a 20 70 42  m;...sqlite3* pB
07b0: 61 73 65 3b 0d 0a 09 73 71 6c 69 74 65 33 5f 73  ase;...sqlite3_s
07c0: 74 6d 74 2a 20 70 53 74 6d 74 3b 0d 0a 09 0d 0a  tmt* pStmt;.....
07d0: 09 76 6f 69 64 20 65 72 72 6f 72 28 4c 50 43 53  .void error(LPCS
07e0: 54 52 20 74 65 78 74 29 0d 0a 09 7b 0d 0a 09 09  TR text)...{....
07f0: 43 53 74 72 69 6e 67 20 65 72 72 3b 0d 0a 09 09  CString err;....
0800: 65 72 72 2e 46 6f 72 6d 61 74 28 22 ce f8 e8 e1  err.Format("....
0810: ea e0 20 f3 f1 f2 e0 ed ee e2 ea e8 20 73 71 6c  .. ......... sql
0820: 2d ef e0 f0 e0 ec e5 f2 f0 e0 20 25 73 20 2d 20  -......... %s - 
0830: 25 73 22 2c 20 28 4c 50 43 53 54 52 29 70 61 72  %s", (LPCSTR)par
0840: 61 6d 4e 61 6d 65 2c 20 74 65 78 74 29 3b 0d 0a  amName, text);..
0850: 09 09 43 42 4c 4d 6f 64 75 6c 65 3a 3a 52 61 69  ..CBLModule::Rai
0860: 73 65 45 78 74 52 75 6e 74 69 6d 65 45 72 72 6f  seExtRuntimeErro
0870: 72 28 65 72 72 2c 20 46 41 4c 53 45 29 3b 0d 0a  r(err, FALSE);..
0880: 09 7d 0d 0a 09 76 6f 69 64 20 62 69 6e 64 54 65  .}...void bindTe
0890: 78 74 28 63 6f 6e 73 74 20 43 53 74 72 69 6e 67  xt(const CString
08a0: 26 20 74 65 78 74 29 0d 0a 09 7b 0d 0a 09 09 43  & text)...{....C
08b0: 53 74 72 69 6e 67 20 73 74 72 28 74 65 78 74 29  String str(text)
08c0: 3b 0d 0a 09 09 75 38 74 65 78 74 3a 3a 74 6f 55  ;....u8text::toU
08d0: 74 66 38 28 73 74 72 29 3b 0d 0a 09 09 63 68 65  tf8(str);....che
08e0: 63 6b 45 72 72 28 73 71 6c 69 74 65 33 5f 62 69  ckErr(sqlite3_bi
08f0: 6e 64 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 6e  nd_text(pStmt, n
0900: 50 61 72 61 6d 4e 75 6d 2c 20 73 74 72 2c 20 73  ParamNum, str, s
0910: 74 72 2e 47 65 74 4c 65 6e 67 74 68 28 29 2c 20  tr.GetLength(), 
0920: 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
0930: 29 29 3b 0d 0a 09 7d 0d 0a 09 0d 0a 09 76 6f 69  ));...}......voi
0940: 64 20 62 69 6e 64 4e 75 6d 65 72 69 63 28 63 6f  d bindNumeric(co
0950: 6e 73 74 20 43 56 61 6c 75 65 2a 20 70 56 61 6c  nst CValue* pVal
0960: 75 65 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 70 56  ue)...{....if(pV
0970: 61 6c 75 65 2d 3e 6d 5f 4e 75 6d 62 65 72 2e 6d  alue->m_Number.m
0980: 5f 6e 53 63 61 6c 65 4c 65 6e 29 0d 0a 09 09 09  _nScaleLen).....
0990: 63 68 65 63 6b 45 72 72 28 73 71 6c 69 74 65 33  checkErr(sqlite3
09a0: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 70 53 74  _bind_double(pSt
09b0: 6d 74 2c 20 6e 50 61 72 61 6d 4e 75 6d 2c 20 70  mt, nParamNum, p
09c0: 56 61 6c 75 65 2d 3e 6d 5f 4e 75 6d 62 65 72 2e  Value->m_Number.
09d0: 47 65 74 44 6f 75 62 6c 65 28 29 29 29 3b 0d 0a  GetDouble()));..
09e0: 09 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 09  ..else....{.....
09f0: 6c 6f 6e 67 20 76 61 6c 20 3d 20 70 56 61 6c 75  long val = pValu
0a00: 65 2d 3e 6d 5f 4e 75 6d 62 65 72 3b 0d 0a 09 09  e->m_Number;....
0a10: 09 69 66 28 30 20 21 3d 20 70 56 61 6c 75 65 2d  .if(0 != pValue-
0a20: 3e 6d 5f 4e 75 6d 62 65 72 2e 43 6f 6d 70 61 72  >m_Number.Compar
0a30: 65 4c 6f 6e 67 28 76 61 6c 29 29 0d 0a 09 09 09  eLong(val)).....
0a40: 09 63 68 65 63 6b 45 72 72 28 73 71 6c 69 74 65  .checkErr(sqlite
0a50: 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 70 53 74  3_bind_int64(pSt
0a60: 6d 74 2c 20 6e 50 61 72 61 6d 4e 75 6d 2c 20 5f  mt, nParamNum, _
0a70: 61 74 6f 69 36 34 28 70 56 61 6c 75 65 2d 3e 46  atoi64(pValue->F
0a80: 6f 72 6d 61 74 28 29 29 29 29 3b 0d 0a 09 09 09  ormat())));.....
0a90: 65 6c 73 65 0d 0a 09 09 09 09 63 68 65 63 6b 45  else......checkE
0aa0: 72 72 28 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  rr(sqlite3_bind_
0ab0: 69 6e 74 28 70 53 74 6d 74 2c 20 6e 50 61 72 61  int(pStmt, nPara
0ac0: 6d 4e 75 6d 2c 20 76 61 6c 29 29 3b 0d 0a 09 09  mNum, val));....
0ad0: 7d 0d 0a 09 7d 0d 0a 09 0d 0a 09 76 6f 69 64 20  }...}......void 
0ae0: 62 69 6e 64 4e 75 6c 6c 28 29 0d 0a 09 7b 0d 0a  bindNull()...{..
0af0: 09 09 63 68 65 63 6b 45 72 72 28 73 71 6c 69 74  ..checkErr(sqlit
0b00: 65 33 5f 62 69 6e 64 5f 6e 75 6c 6c 28 70 53 74  e3_bind_null(pSt
0b10: 6d 74 2c 20 6e 50 61 72 61 6d 4e 75 6d 29 29 3b  mt, nParamNum));
0b20: 0d 0a 09 7d 0d 0a 09 76 6f 69 64 20 62 69 6e 64  ...}...void bind
0b30: 46 72 61 67 6d 65 6e 74 28 4c 50 43 53 54 52 29  Fragment(LPCSTR)
0b40: 0d 0a 09 7b 0d 0a 09 09 65 72 72 6f 72 28 22 cd  ...{....error(".
0b50: e5 e2 e5 f0 ed fb e9 20 ec ee e4 e8 f4 e8 ea e0  ....... ........
0b60: f2 ee f0 22 29 3b 0d 0a 09 7d 0d 0a 09 0d 0a 09  ...");...}......
0b70: 76 6f 69 64 20 63 68 65 63 6b 45 72 72 28 69 6e  void checkErr(in
0b80: 74 20 72 65 73 29 0d 0a 09 7b 0d 0a 09 09 69 66  t res)...{....if
0b90: 28 53 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 72 65  (SQLITE_OK != re
0ba0: 73 29 0d 0a 09 09 7b 0d 0a 09 09 09 43 53 74 72  s)....{.....CStr
0bb0: 69 6e 67 20 65 72 72 28 75 38 74 65 78 74 3a 3a  ing err(u8text::
0bc0: 66 72 6f 6d 55 74 66 38 28 73 71 6c 69 74 65 33  fromUtf8(sqlite3
0bd0: 5f 65 72 72 6d 73 67 28 70 42 61 73 65 29 29 29  _errmsg(pBase)))
0be0: 3b 0d 0a 09 09 09 65 72 72 6f 72 28 65 72 72 29  ;.....error(err)
0bf0: 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 7d 3b 0d 0a  ;....}...}..};..
0c00: 0d 0a 73 74 72 75 63 74 20 74 72 61 6e 5f 67 75  ..struct tran_gu
0c10: 61 72 64 0d 0a 7b 0d 0a 09 69 6e 74 20 61 63 2c  ard..{...int ac,
0c20: 20 65 72 72 3b 0d 0a 09 73 71 6c 69 74 65 33 2a   err;...sqlite3*
0c30: 20 5f 70 44 42 3b 0d 0a 09 74 72 61 6e 5f 67 75   _pDB;...tran_gu
0c40: 61 72 64 28 73 71 6c 69 74 65 33 2a 20 70 44 42  ard(sqlite3* pDB
0c50: 29 20 3a 20 5f 70 44 42 28 70 44 42 29 2c 20 65  ) : _pDB(pDB), e
0c60: 72 72 28 54 52 55 45 29 2c 20 61 63 28 73 71 6c  rr(TRUE), ac(sql
0c70: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
0c80: 6d 69 74 28 70 44 42 29 29 0d 0a 09 7b 0d 0a 09  mit(pDB))...{...
0c90: 09 69 66 28 61 63 29 0d 0a 09 09 09 73 71 6c 69  .if(ac).....sqli
0ca0: 74 65 33 5f 65 78 65 63 28 5f 70 44 42 2c 20 22  te3_exec(_pDB, "
0cb0: 62 65 67 69 6e 22 2c 20 4e 55 4c 4c 2c 20 4e 55  begin", NULL, NU
0cc0: 4c 4c 2c 20 4e 55 4c 4c 29 3b 0d 0a 09 7d 0d 0a  LL, NULL);...}..
0cd0: 09 7e 74 72 61 6e 5f 67 75 61 72 64 28 29 0d 0a  .~tran_guard()..
0ce0: 09 7b 0d 0a 09 09 69 66 28 61 63 29 0d 0a 09 09  .{....if(ac)....
0cf0: 09 73 71 6c 69 74 65 33 5f 65 78 65 63 28 5f 70  .sqlite3_exec(_p
0d00: 44 42 2c 20 65 72 72 20 3f 20 22 72 6f 6c 6c 62  DB, err ? "rollb
0d10: 61 63 6b 22 20 3a 20 22 63 6f 6d 6d 69 74 22 2c  ack" : "commit",
0d20: 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20 4e 55 4c   NULL, NULL, NUL
0d30: 4c 29 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 69  L);...}..};....i
0d40: 6e 6c 69 6e 65 20 42 4f 4f 4c 20 69 73 49 44 65  nline BOOL isIDe
0d50: 71 75 61 6c 28 4c 50 43 53 54 52 20 69 64 31 2c  qual(LPCSTR id1,
0d60: 20 4c 50 43 53 54 52 20 69 64 32 29 0d 0a 7b 0d   LPCSTR id2)..{.
0d70: 0a 09 72 65 74 75 72 6e 20 2a 28 75 69 36 34 2a  ..return *(ui64*
0d80: 29 69 64 31 20 3d 3d 20 2a 28 75 69 36 34 2a 29  )id1 == *(ui64*)
0d90: 69 64 32 20 26 26 20 28 44 57 4f 52 44 29 28 42  id2 && (DWORD)(B
0da0: 59 54 45 29 69 64 31 5b 38 5d 20 3d 3d 20 28 44  YTE)id1[8] == (D
0db0: 57 4f 52 44 29 28 42 59 54 45 29 69 64 32 5b 38  WORD)(BYTE)id2[8
0dc0: 5d 3b 0d 0a 7d 0d 0a 0d 0a 74 79 70 65 64 65 66  ];..}....typedef
0dd0: 20 75 6e 73 69 67 6e 65 64 20 5f 5f 69 6e 74 36   unsigned __int6
0de0: 34 20 69 64 38 3b 0d 0a 0d 0a 69 64 38 20 69 64  4 id8;....id8 id
0df0: 39 74 6f 38 28 4c 50 43 53 54 52 20 70 49 44 29  9to8(LPCSTR pID)
0e00: 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 28 28 2a  ..{...return ((*
0e10: 28 69 64 38 2a 29 28 70 49 44 20 2b 20 36 29 20  (id8*)(pID + 6) 
0e20: 26 20 30 78 46 46 46 46 46 46 29 20 3c 3c 20 33  & 0xFFFFFF) << 3
0e30: 32 29 20 7c 20 73 74 72 32 69 64 28 28 63 6f 6e  2) | str2id((con
0e40: 73 74 20 42 59 54 45 2a 29 70 49 44 2c 20 36 29  st BYTE*)pID, 6)
0e50: 3b 0d 0a 7d 0d 0a 0d 0a 69 64 38 20 6f 62 6a 49  ;..}....id8 objI
0e60: 44 74 6f 38 28 63 6f 6e 73 74 20 43 4f 62 6a 49  Dto8(const CObjI
0e70: 44 26 20 6f 69 64 29 0d 0a 7b 0d 0a 09 72 65 74  D& oid)..{...ret
0e80: 75 72 6e 20 28 28 2a 28 69 64 38 2a 29 6f 69 64  urn ((*(id8*)oid
0e90: 2e 44 42 53 69 67 6e 2e 53 69 67 6e 29 20 3c 3c  .DBSign.Sign) <<
0ea0: 20 33 32 29 20 7c 20 6f 69 64 2e 4f 62 6a 49 44   32) | oid.ObjID
0eb0: 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 69 64 38  ;..}....void id8
0ec0: 74 6f 39 28 69 64 38 20 69 64 2c 20 4c 50 53 54  to9(id8 id, LPST
0ed0: 52 20 70 74 72 29 0d 0a 7b 0d 0a 09 2a 28 44 57  R ptr)..{...*(DW
0ee0: 4f 52 44 2a 29 70 74 72 20 3d 20 27 20 20 20 20  ORD*)ptr = '    
0ef0: 27 3b 0d 0a 09 2a 28 44 57 4f 52 44 2a 29 28 70  ';...*(DWORD*)(p
0f00: 74 72 20 2b 20 34 29 20 3d 20 27 20 20 20 20 27  tr + 4) = '    '
0f10: 3b 0d 0a 09 69 64 32 73 74 72 28 28 44 57 4f 52  ;...id2str((DWOR
0f20: 44 29 69 64 2c 20 28 42 59 54 45 2a 29 70 74 72  D)id, (BYTE*)ptr
0f30: 2c 20 36 29 3b 0d 0a 09 2a 28 44 57 4f 52 44 2a  , 6);...*(DWORD*
0f40: 29 28 70 74 72 20 2b 20 36 29 20 3d 20 28 44 57  )(ptr + 6) = (DW
0f50: 4f 52 44 29 28 69 64 20 3e 3e 20 33 32 29 3b 0d  ORD)(id >> 32);.
0f60: 0a 7d 0d 0a 0d 0a 73 74 72 75 63 74 20 4f 62 6a  .}....struct Obj
0f70: 49 44 53 65 74 0d 0a 7b 0d 0a 09 4f 62 6a 49 44  IDSet..{...ObjID
0f80: 53 65 74 28 29 0d 0a 09 7b 0d 0a 09 09 6d 65 6d  Set()...{....mem
0f90: 73 65 74 28 70 70 41 73 73 6f 63 2c 20 30 2c 20  set(ppAssoc, 0, 
0fa0: 73 69 7a 65 6f 66 28 70 70 41 73 73 6f 63 29 29  sizeof(ppAssoc))
0fb0: 3b 0d 0a 09 09 63 6e 74 20 3d 20 30 3b 0d 0a 09  ;....cnt = 0;...
0fc0: 7d 0d 0a 09 7e 4f 62 6a 49 44 53 65 74 28 29 0d  }...~ObjIDSet().
0fd0: 0a 09 7b 0d 0a 09 09 69 66 28 63 6e 74 29 0d 0a  ..{....if(cnt)..
0fe0: 09 09 7b 0d 0a 09 09 09 44 57 4f 52 44 20 65 20  ..{.....DWORD e 
0ff0: 3d 20 63 6e 74 3b 0d 0a 09 09 09 61 73 73 6f 63  = cnt;.....assoc
1000: 2a 2a 20 70 70 41 73 73 20 3d 20 70 70 41 73 73  ** ppAss = ppAss
1010: 6f 63 3b 0d 0a 09 09 09 66 6f 72 28 3b 3b 29 0d  oc;.....for(;;).
1020: 0a 09 09 09 7b 0d 0a 09 09 09 09 77 68 69 6c 65  ....{......while
1030: 28 21 2a 70 70 41 73 73 29 0d 0a 09 09 09 09 09  (!*ppAss).......
1040: 70 70 41 73 73 2b 2b 3b 0d 0a 09 09 09 09 61 73  ppAss++;......as
1050: 73 6f 63 2a 20 70 41 73 73 20 3d 20 2a 70 70 41  soc* pAss = *ppA
1060: 73 73 2b 2b 3b 0d 0a 09 09 09 09 77 68 69 6c 65  ss++;......while
1070: 28 70 41 73 73 29 0d 0a 09 09 09 09 7b 0d 0a 09  (pAss)......{...
1080: 09 09 09 09 61 73 73 6f 63 2a 20 70 44 65 6c 20  ....assoc* pDel 
1090: 3d 20 70 41 73 73 3b 0d 0a 09 09 09 09 09 70 41  = pAss;.......pA
10a0: 73 73 20 3d 20 70 41 73 73 2d 3e 6e 65 78 74 3b  ss = pAss->next;
10b0: 0d 0a 09 09 09 09 09 64 65 6c 65 74 65 20 70 44  .......delete pD
10c0: 65 6c 3b 0d 0a 09 09 09 09 09 69 66 28 21 2d 2d  el;.......if(!--
10d0: 65 29 0d 0a 09 09 09 09 09 09 72 65 74 75 72 6e  e)........return
10e0: 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a  ;......}.....}..
10f0: 09 09 7d 0d 0a 09 7d 0d 0a 09 76 6f 69 64 20 69  ..}...}...void i
1100: 6e 73 65 72 74 28 69 64 38 20 69 64 29 0d 0a 09  nsert(id8 id)...
1110: 7b 0d 0a 09 09 44 57 4f 52 44 20 70 6f 73 20 3d  {....DWORD pos =
1120: 20 69 64 20 25 20 68 61 73 68 53 69 7a 65 3b 0d   id % hashSize;.
1130: 0a 09 09 61 73 73 6f 63 2a 20 70 41 73 73 20 3d  ...assoc* pAss =
1140: 20 70 70 41 73 73 6f 63 5b 70 6f 73 5d 3b 0d 0a   ppAssoc[pos];..
1150: 09 09 77 68 69 6c 65 28 70 41 73 73 29 0d 0a 09  ..while(pAss)...
1160: 09 7b 0d 0a 09 09 09 69 66 28 70 41 73 73 2d 3e  .{.....if(pAss->
1170: 69 64 20 3d 3d 20 69 64 29 0d 0a 09 09 09 09 72  id == id)......r
1180: 65 74 75 72 6e 3b 0d 0a 09 09 09 70 41 73 73 20  eturn;.....pAss 
1190: 3d 20 70 41 73 73 2d 3e 6e 65 78 74 3b 0d 0a 09  = pAss->next;...
11a0: 09 7d 0d 0a 09 09 70 70 41 73 73 6f 63 5b 70 6f  .}....ppAssoc[po
11b0: 73 5d 20 3d 20 6e 65 77 20 61 73 73 6f 63 28 70  s] = new assoc(p
11c0: 70 41 73 73 6f 63 5b 70 6f 73 5d 2c 20 69 64 29  pAssoc[pos], id)
11d0: 3b 0d 0a 09 09 63 6e 74 2b 2b 3b 0d 0a 09 7d 0d  ;....cnt++;...}.
11e0: 0a 09 42 4f 4f 4c 20 65 78 69 73 74 28 69 64 38  ..BOOL exist(id8
11f0: 20 69 64 29 0d 0a 09 7b 0d 0a 09 09 66 6f 72 28   id)...{....for(
1200: 61 73 73 6f 63 2a 20 70 41 73 73 20 3d 20 70 70  assoc* pAss = pp
1210: 41 73 73 6f 63 5b 69 64 20 25 20 68 61 73 68 53  Assoc[id % hashS
1220: 69 7a 65 5d 3b 20 70 41 73 73 20 3b 20 70 41 73  ize]; pAss ; pAs
1230: 73 20 3d 20 70 41 73 73 2d 3e 6e 65 78 74 29 0d  s = pAss->next).
1240: 0a 09 09 09 69 66 28 70 41 73 73 2d 3e 69 64 20  ....if(pAss->id 
1250: 3d 3d 20 69 64 29 0d 0a 09 09 09 09 72 65 74 75  == id)......retu
1260: 72 6e 20 54 52 55 45 3b 0d 0a 09 09 72 65 74 75  rn TRUE;....retu
1270: 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 7d 0d 0a 09  rn FALSE;...}...
1280: 0d 0a 09 44 57 4f 52 44 20 63 6f 75 6e 74 28 29  ...DWORD count()
1290: 20 7b 72 65 74 75 72 6e 20 63 6e 74 3b 7d 0d 0a   {return cnt;}..
12a0: 09 0d 0a 09 69 64 38 20 66 69 72 73 74 28 29 09  ....id8 first().
12b0: 2f 2f 20 cd e5 20 e2 fb e7 fb e2 e0 f2 fc 2c 20  // .. ........, 
12c0: e5 f1 eb e8 20 ed e5 f2 20 fd eb e5 ec e5 ed f2  .... ... .......
12d0: ee e2 21 21 21 21 0d 0a 09 7b 0d 0a 09 09 66 6f  ..!!!!...{....fo
12e0: 72 28 61 73 73 6f 63 2a 2a 20 70 70 41 20 3d 20  r(assoc** ppA = 
12f0: 70 70 41 73 73 6f 63 3b 20 21 2a 70 70 41 3b 20  ppAssoc; !*ppA; 
1300: 70 70 41 2b 2b 29 3b 0d 0a 09 09 72 65 74 75 72  ppA++);....retur
1310: 6e 20 28 2a 70 70 41 29 2d 3e 69 64 3b 0d 0a 09  n (*ppA)->id;...
1320: 7d 0d 0a 09 76 6f 69 64 20 72 65 6d 6f 76 65 28  }...void remove(
1330: 69 64 38 20 69 64 29 0d 0a 09 7b 0d 0a 09 09 61  id8 id)...{....a
1340: 73 73 6f 63 2a 2a 20 70 70 41 73 73 20 3d 20 70  ssoc** ppAss = p
1350: 70 41 73 73 6f 63 20 2b 20 69 64 20 25 20 68 61  pAssoc + id % ha
1360: 73 68 53 69 7a 65 3b 0d 0a 09 09 66 6f 72 28 3b  shSize;....for(;
1370: 3b 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 28  ;)....{.....if((
1380: 2a 70 70 41 73 73 29 2d 3e 69 64 20 3d 3d 20 69  *ppAss)->id == i
1390: 64 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 61 73  d).....{......as
13a0: 73 6f 63 2a 20 70 44 65 6c 20 3d 20 2a 70 70 41  soc* pDel = *ppA
13b0: 73 73 3b 0d 0a 09 09 09 09 2a 70 70 41 73 73 20  ss;......*ppAss 
13c0: 3d 20 70 44 65 6c 2d 3e 6e 65 78 74 3b 0d 0a 09  = pDel->next;...
13d0: 09 09 09 64 65 6c 65 74 65 20 70 44 65 6c 3b 0d  ...delete pDel;.
13e0: 0a 09 09 09 09 63 6e 74 2d 2d 3b 0d 0a 09 09 09  .....cnt--;.....
13f0: 09 72 65 74 75 72 6e 3b 0d 0a 09 09 09 7d 0d 0a  .return;.....}..
1400: 09 09 09 70 70 41 73 73 20 3d 20 26 28 2a 70 70  ...ppAss = &(*pp
1410: 41 73 73 29 2d 3e 6e 65 78 74 3b 0d 0a 09 09 7d  Ass)->next;....}
1420: 0d 0a 09 7d 0d 0a 09 76 6f 69 64 20 64 6f 49 6e  ...}...void doIn
1430: 73 65 72 74 28 73 71 6c 69 74 65 33 5f 73 74 6d  sert(sqlite3_stm
1440: 74 2a 20 70 49 6e 73 65 72 74 29 0d 0a 09 7b 0d  t* pInsert)...{.
1450: 0a 09 09 69 66 28 21 63 6e 74 29 0d 0a 09 09 09  ...if(!cnt).....
1460: 72 65 74 75 72 6e 3b 0d 0a 09 09 0d 0a 09 09 43  return;........C
1470: 53 74 72 69 6e 67 20 74 65 78 74 3b 0d 0a 09 09  String text;....
1480: 44 57 4f 52 44 20 65 20 3d 20 63 6e 74 3b 0d 0a  DWORD e = cnt;..
1490: 09 09 61 73 73 6f 63 2a 2a 20 70 70 41 73 73 20  ..assoc** ppAss 
14a0: 3d 20 70 70 41 73 73 6f 63 3b 0d 0a 09 09 0d 0a  = ppAssoc;......
14b0: 09 09 66 6f 72 28 3b 3b 29 0d 0a 09 09 7b 0d 0a  ..for(;;)....{..
14c0: 09 09 09 77 68 69 6c 65 28 21 2a 70 70 41 73 73  ...while(!*ppAss
14d0: 29 0d 0a 09 09 09 09 70 70 41 73 73 2b 2b 3b 0d  )......ppAss++;.
14e0: 0a 09 09 09 66 6f 72 28 61 73 73 6f 63 2a 20 70  ....for(assoc* p
14f0: 41 73 73 20 3d 20 2a 70 70 41 73 73 2b 2b 3b 20  Ass = *ppAss++; 
1500: 70 41 73 73 3b 20 70 41 73 73 20 3d 20 70 41 73  pAss; pAss = pAs
1510: 73 2d 3e 6e 65 78 74 29 0d 0a 09 09 09 7b 0d 0a  s->next).....{..
1520: 09 09 09 09 69 64 38 74 6f 39 28 70 41 73 73 2d  ....id8to9(pAss-
1530: 3e 69 64 2c 20 74 65 78 74 2e 47 65 74 42 75 66  >id, text.GetBuf
1540: 66 65 72 53 65 74 4c 65 6e 67 74 68 28 39 29 29  ferSetLength(9))
1550: 3b 0d 0a 09 09 09 09 75 38 74 65 78 74 3a 3a 74  ;......u8text::t
1560: 6f 55 74 66 38 28 74 65 78 74 29 3b 0d 0a 09 09  oUtf8(text);....
1570: 09 09 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  ..sqlite3_bind_t
1580: 65 78 74 28 70 49 6e 73 65 72 74 2c 20 31 2c 20  ext(pInsert, 1, 
1590: 74 65 78 74 2c 20 74 65 78 74 2e 47 65 74 4c 65  text, text.GetLe
15a0: 6e 67 74 68 28 29 2c 20 53 51 4c 49 54 45 5f 54  ngth(), SQLITE_T
15b0: 52 41 4e 53 49 45 4e 54 29 3b 0d 0a 09 09 09 09  RANSIENT);......
15c0: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 49 6e  sqlite3_step(pIn
15d0: 73 65 72 74 29 3b 0d 0a 09 09 09 09 73 71 6c 69  sert);......sqli
15e0: 74 65 33 5f 72 65 73 65 74 28 70 49 6e 73 65 72  te3_reset(pInser
15f0: 74 29 3b 0d 0a 09 09 09 09 69 66 28 21 2d 2d 65  t);......if(!--e
1600: 29 0d 0a 09 09 09 09 09 72 65 74 75 72 6e 3b 0d  ).......return;.
1610: 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a  ....}....}...}..
1620: 70 72 6f 74 65 63 74 65 64 3a 0d 0a 09 65 6e 75  protected:...enu
1630: 6d 20 7b 68 61 73 68 53 69 7a 65 20 3d 20 31 31  m {hashSize = 11
1640: 37 7d 3b 0d 0a 0d 0a 09 73 74 72 75 63 74 20 61  7};.....struct a
1650: 73 73 6f 63 20 0d 0a 09 7b 0d 0a 09 09 61 73 73  ssoc ...{....ass
1660: 6f 63 28 61 73 73 6f 63 2a 20 6e 2c 20 69 64 38  oc(assoc* n, id8
1670: 20 69 29 20 3a 20 6e 65 78 74 28 6e 29 2c 20 69   i) : next(n), i
1680: 64 28 69 29 7b 7d 0d 0a 09 09 69 64 38 20 69 64  d(i){}....id8 id
1690: 3b 0d 0a 09 09 61 73 73 6f 63 2a 20 6e 65 78 74  ;....assoc* next
16a0: 3b 0d 0a 09 7d 3b 0d 0a 09 61 73 73 6f 63 2a 20  ;...};...assoc* 
16b0: 70 70 41 73 73 6f 63 5b 68 61 73 68 53 69 7a 65  ppAssoc[hashSize
16c0: 5d 3b 0d 0a 09 44 57 4f 52 44 20 63 6e 74 3b 0d  ];...DWORD cnt;.
16d0: 0a 7d 3b 0d 0a 0d 0a 74 65 6d 70 6c 61 74 65 3c  .};....template<
16e0: 69 6e 74 20 6e 46 69 65 6c 64 3e 0d 0a 73 74 72  int nField>..str
16f0: 75 63 74 20 6b 65 79 4f 62 6a 20 3a 20 43 4b 65  uct keyObj : CKe
1700: 79 4f 62 6a 0d 0a 7b 0d 0a 09 6b 65 79 4f 62 6a  yObj..{...keyObj
1710: 28 43 49 6e 64 65 78 2a 20 70 49 29 20 3a 20 43  (CIndex* pI) : C
1720: 4b 65 79 4f 62 6a 28 70 49 2c 20 30 2c 20 30 29  KeyObj(pI, 0, 0)
1730: 7b 7d 0d 0a 09 63 68 61 72 20 69 64 5b 31 30 5d  {}...char id[10]
1740: 3b 0d 0a 09 76 69 72 74 75 61 6c 20 76 6f 69 64  ;...virtual void
1750: 20 50 72 65 70 61 72 65 4b 65 79 28 29 0d 0a 09   PrepareKey()...
1760: 7b 0d 0a 09 09 6d 5f 70 53 74 6f 72 65 4f 62 6a  {....m_pStoreObj
1770: 2d 3e 46 58 5f 53 74 72 69 6e 67 28 6e 46 69 65  ->FX_String(nFie
1780: 6c 64 2c 20 69 64 2c 20 39 2c 20 31 29 3b 0d 0a  ld, id, 9, 1);..
1790: 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 69 6e 6c 69 6e 65  .}..};....inline
17a0: 20 76 6f 69 64 20 70 72 6f 63 65 73 73 52 65 66   void processRef
17b0: 56 61 6c 75 65 28 43 56 61 6c 75 65 2a 20 70 56  Value(CValue* pV
17c0: 61 6c 75 65 2c 20 43 53 74 6f 72 65 4f 62 6a 26  alue, CStoreObj&
17d0: 20 73 74 6f 72 65 2c 20 6b 65 79 4f 62 6a 3c 30   store, keyObj<0
17e0: 3e 26 20 6b 65 79 2c 20 4f 62 6a 49 44 53 65 74  >& key, ObjIDSet
17f0: 26 20 65 6c 65 6d 65 6e 74 73 2c 20 4f 62 6a 49  & elements, ObjI
1800: 44 53 65 74 26 20 67 72 6f 75 70 73 2c 20 4c 50  DSet& groups, LP
1810: 53 54 52 20 70 52 65 63 49 73 46 6f 6c 64 65 72  STR pRecIsFolder
1820: 29 0d 0a 7b 0d 0a 09 69 64 38 20 69 64 20 3d 20  )..{...id8 id = 
1830: 6f 62 6a 49 44 74 6f 38 28 70 56 61 6c 75 65 2d  objIDto8(pValue-
1840: 3e 6d 5f 4f 62 6a 49 44 29 3b 0d 0a 09 69 66 28  >m_ObjID);...if(
1850: 30 78 32 30 32 30 32 30 30 30 30 30 30 30 30 30  0x20202000000000
1860: 20 3d 3d 20 69 64 29 0d 0a 09 7b 0d 0a 09 09 67   == id)...{....g
1870: 72 6f 75 70 73 2e 69 6e 73 65 72 74 28 69 64 29  roups.insert(id)
1880: 3b 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 7d  ;....return;...}
1890: 0d 0a 09 69 64 38 74 6f 39 28 69 64 2c 20 6b 65  ...id8to9(id, ke
18a0: 79 2e 69 64 29 3b 0d 0a 0d 0a 09 69 66 28 73 74  y.id);.....if(st
18b0: 6f 72 65 2e 47 6f 74 6f 28 26 6b 65 79 2c 20 63  ore.Goto(&key, c
18c0: 63 45 2c 20 30 29 29 0d 0a 09 7b 0d 0a 09 09 69  cE, 0))...{....i
18d0: 66 28 28 44 57 4f 52 44 29 28 42 59 54 45 29 2a  f((DWORD)(BYTE)*
18e0: 70 52 65 63 49 73 46 6f 6c 64 65 72 20 3d 3d 20  pRecIsFolder == 
18f0: 27 32 27 29 0d 0a 09 09 09 65 6c 65 6d 65 6e 74  '2').....element
1900: 73 2e 69 6e 73 65 72 74 28 69 64 29 3b 0d 0a 09  s.insert(id);...
1910: 09 65 6c 73 65 0d 0a 09 09 09 67 72 6f 75 70 73  .else.....groups
1920: 2e 69 6e 73 65 72 74 28 69 64 29 3b 0d 0a 09 7d  .insert(id);...}
1930: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 70 75 74 76  ..}....void putv
1940: 6c 52 65 66 65 72 65 6e 63 65 28 43 53 62 43 6e  lReference(CSbCn
1950: 74 54 79 70 65 44 65 66 2a 20 70 52 65 66 44 65  tTypeDef* pRefDe
1960: 66 2c 20 43 50 74 72 41 72 72 61 79 2a 20 70 56  f, CPtrArray* pV
1970: 4c 2c 20 43 56 61 6c 75 65 2a 20 70 56 61 6c 2c  L, CValue* pVal,
1980: 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 20 70   sqlite3_stmt* p
1990: 49 6e 73 65 72 74 2c 20 42 4f 4f 4c 20 62 57 69  Insert, BOOL bWi
19a0: 74 68 47 72 6f 75 70 73 29 0d 0a 7b 0d 0a 09 4f  thGroups)..{...O
19b0: 62 6a 49 44 53 65 74 20 65 6c 65 6d 65 6e 74 73  bjIDSet elements
19c0: 3b 0d 0a 09 4f 62 6a 49 44 53 65 74 20 67 72 6f  ;...ObjIDSet gro
19d0: 75 70 73 3b 0d 0a 09 4f 62 6a 49 44 53 65 74 20  ups;...ObjIDSet 
19e0: 70 72 6f 63 65 73 73 65 64 47 72 6f 75 70 73 3b  processedGroups;
19f0: 0d 0a 0d 0a 09 43 54 61 62 6c 65 45 78 2a 20 70  .....CTableEx* p
1a00: 54 61 62 6c 65 20 3d 20 28 43 54 61 62 6c 65 45  Table = (CTableE
1a10: 78 2a 29 70 44 61 74 61 44 69 63 74 2d 3e 47 65  x*)pDataDict->Ge
1a20: 74 54 61 62 6c 65 28 70 52 65 66 44 65 66 2d 3e  tTable(pRefDef->
1a30: 47 65 74 54 61 62 6c 65 4e 61 6d 65 28 29 29 3b  GetTableName());
1a40: 0d 0a 09 4c 50 53 54 52 20 70 52 65 63 49 44 20  ...LPSTR pRecID 
1a50: 3d 20 70 54 61 62 6c 65 2d 3e 72 65 63 6f 72 64  = pTable->record
1a60: 42 75 66 66 65 72 28 29 3b 0d 0a 09 4c 50 53 54  Buffer();...LPST
1a70: 52 20 70 52 65 63 50 49 44 20 3d 20 70 52 65 63  R pRecPID = pRec
1a80: 49 44 20 2b 20 39 3b 0d 0a 09 4c 50 53 54 52 20  ID + 9;...LPSTR 
1a90: 70 52 65 63 49 73 46 6f 6c 64 65 72 20 3d 20 70  pRecIsFolder = p
1aa0: 52 65 63 49 44 20 2b 20 31 38 3b 0d 0a 09 66 6f  RecID + 18;...fo
1ab0: 72 28 44 57 4f 52 44 20 69 20 3d 20 32 3b 20 3b  r(DWORD i = 2; ;
1ac0: 20 69 2b 2b 29 0d 0a 09 7b 0d 0a 09 09 43 46 69   i++)...{....CFi
1ad0: 65 6c 64 2a 20 70 46 69 65 6c 64 20 3d 20 70 54  eld* pField = pT
1ae0: 61 62 6c 65 2d 3e 66 69 65 6c 64 28 69 29 3b 0d  able->field(i);.
1af0: 0a 09 09 69 66 28 2a 28 44 57 4f 52 44 2a 29 70  ...if(*(DWORD*)p
1b00: 46 69 65 6c 64 2d 3e 73 7a 4e 61 6d 65 20 3d 3d  Field->szName ==
1b10: 20 27 4f 46 53 49 27 29 0d 0a 09 09 09 62 72 65   'OFSI').....bre
1b20: 61 6b 3b 0d 0a 09 09 70 52 65 63 49 73 46 6f 6c  ak;....pRecIsFol
1b30: 64 65 72 20 2b 3d 20 70 46 69 65 6c 64 2d 3e 73  der += pField->s
1b40: 69 7a 65 43 46 69 65 6c 64 3b 0d 0a 09 7d 0d 0a  izeCField;...}..
1b50: 09 2f 2f 20 c8 f9 e5 ec 20 ef ee 20 e8 e4 f8 ed  .// .... .. ....
1b60: e8 ea f3 0d 0a 09 7b 0d 0a 09 09 43 49 6e 64 65  ......{....CInde
1b70: 78 2a 20 70 49 20 3d 20 70 54 61 62 6c 65 2d 3e  x* pI = pTable->
1b80: 69 6e 64 65 78 28 30 29 3b 0d 0a 09 09 43 53 74  index(0);....CSt
1b90: 6f 72 65 4f 62 6a 20 73 74 6f 72 65 28 70 54 61  oreObj store(pTa
1ba0: 62 6c 65 2c 20 70 49 29 3b 0d 0a 09 09 6b 65 79  ble, pI);....key
1bb0: 4f 62 6a 3c 30 3e 20 6b 65 79 28 70 49 29 3b 0d  Obj<0> key(pI);.
1bc0: 0a 09 09 69 66 28 70 56 4c 29 0d 0a 09 09 7b 0d  ...if(pVL)....{.
1bd0: 0a 09 09 09 43 56 61 6c 75 65 49 74 65 6d 2a 2a  ....CValueItem**
1be0: 20 70 70 49 74 65 6d 73 20 3d 20 28 43 56 61 6c   ppItems = (CVal
1bf0: 75 65 49 74 65 6d 2a 2a 29 70 56 4c 2d 3e 47 65  ueItem**)pVL->Ge
1c00: 74 44 61 74 61 28 29 3b 0d 0a 09 09 09 66 6f 72  tData();.....for
1c10: 28 44 57 4f 52 44 20 63 20 3d 20 70 56 4c 2d 3e  (DWORD c = pVL->
1c20: 47 65 74 53 69 7a 65 28 29 3b 20 63 2d 2d 3b 20  GetSize(); c--; 
1c30: 70 70 49 74 65 6d 73 2b 2b 29 0d 0a 09 09 09 09  ppItems++)......
1c40: 70 72 6f 63 65 73 73 52 65 66 56 61 6c 75 65 28  processRefValue(
1c50: 26 28 2a 70 70 49 74 65 6d 73 29 2d 3e 6d 5f 76  &(*ppItems)->m_v
1c60: 61 6c 75 65 2c 20 73 74 6f 72 65 2c 20 6b 65 79  alue, store, key
1c70: 2c 20 65 6c 65 6d 65 6e 74 73 2c 20 67 72 6f 75  , elements, grou
1c80: 70 73 2c 20 70 52 65 63 49 73 46 6f 6c 64 65 72  ps, pRecIsFolder
1c90: 29 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 0d  );....}....else.
1ca0: 0a 09 09 09 70 72 6f 63 65 73 73 52 65 66 56 61  ....processRefVa
1cb0: 6c 75 65 28 70 56 61 6c 2c 20 73 74 6f 72 65 2c  lue(pVal, store,
1cc0: 20 6b 65 79 2c 20 65 6c 65 6d 65 6e 74 73 2c 20   key, elements, 
1cd0: 67 72 6f 75 70 73 2c 20 70 52 65 63 49 73 46 6f  groups, pRecIsFo
1ce0: 6c 64 65 72 29 3b 0d 0a 09 7d 0d 0a 09 69 66 28  lder);...}...if(
1cf0: 67 72 6f 75 70 73 2e 63 6f 75 6e 74 28 29 29 0d  groups.count()).
1d00: 0a 09 7b 0d 0a 09 09 2f 2f 20 d2 e5 ef e5 f0 fc  ..{....// ......
1d10: 20 e1 f3 e4 e5 ec 20 f0 e0 e7 e2 ee f0 e0 f7 e8   ..... .........
1d20: e2 e0 f2 fc 20 e3 f0 f3 ef ef fb 0d 0a 09 09 43  .... ..........C
1d30: 49 6e 64 65 78 2a 20 70 49 20 3d 20 70 54 61 62  Index* pI = pTab
1d40: 6c 65 2d 3e 47 65 74 49 6e 64 65 78 28 31 29 3b  le->GetIndex(1);
1d50: 0d 0a 09 09 43 53 74 6f 72 65 4f 62 6a 20 73 74  ....CStoreObj st
1d60: 6f 72 65 28 70 54 61 62 6c 65 2c 20 70 49 29 3b  ore(pTable, pI);
1d70: 0d 0a 09 09 6b 65 79 4f 62 6a 3c 31 3e 20 6b 65  ....keyObj<1> ke
1d80: 79 28 70 49 29 3b 0d 0a 09 09 77 68 69 6c 65 28  y(pI);....while(
1d90: 67 72 6f 75 70 73 2e 63 6f 75 6e 74 28 29 29 0d  groups.count()).
1da0: 0a 09 09 7b 0d 0a 09 09 09 69 64 38 20 69 64 20  ...{.....id8 id 
1db0: 3d 20 67 72 6f 75 70 73 2e 66 69 72 73 74 28 29  = groups.first()
1dc0: 3b 0d 0a 09 09 09 70 72 6f 63 65 73 73 65 64 47  ;.....processedG
1dd0: 72 6f 75 70 73 2e 69 6e 73 65 72 74 28 69 64 29  roups.insert(id)
1de0: 3b 0d 0a 09 09 09 69 64 38 74 6f 39 28 69 64 2c  ;.....id8to9(id,
1df0: 20 6b 65 79 2e 69 64 29 3b 0d 0a 09 09 09 69 66   key.id);.....if
1e00: 28 73 74 6f 72 65 2e 47 6f 74 6f 28 26 6b 65 79  (store.Goto(&key
1e10: 2c 20 63 63 47 45 2c 20 30 29 29 0d 0a 09 09 09  , ccGE, 0)).....
1e20: 7b 0d 0a 09 09 09 09 77 68 69 6c 65 28 69 73 49  {......while(isI
1e30: 44 65 71 75 61 6c 28 6b 65 79 2e 69 64 2c 20 70  Dequal(key.id, p
1e40: 52 65 63 50 49 44 29 29 0d 0a 09 09 09 09 7b 0d  RecPID))......{.
1e50: 0a 09 09 09 09 09 69 64 38 20 65 69 64 20 3d 20  ......id8 eid = 
1e60: 69 64 39 74 6f 38 28 70 52 65 63 49 44 29 3b 0d  id9to8(pRecID);.
1e70: 0a 09 09 09 09 09 69 66 28 28 44 57 4f 52 44 29  ......if((DWORD)
1e80: 28 42 59 54 45 29 2a 70 52 65 63 49 73 46 6f 6c  (BYTE)*pRecIsFol
1e90: 64 65 72 20 3d 3d 20 27 32 27 29 0d 0a 09 09 09  der == '2').....
1ea0: 09 09 09 65 6c 65 6d 65 6e 74 73 2e 69 6e 73 65  ...elements.inse
1eb0: 72 74 28 65 69 64 29 3b 0d 0a 09 09 09 09 09 65  rt(eid);.......e
1ec0: 6c 73 65 20 69 66 28 21 70 72 6f 63 65 73 73 65  lse if(!processe
1ed0: 64 47 72 6f 75 70 73 2e 65 78 69 73 74 28 65 69  dGroups.exist(ei
1ee0: 64 29 29 0d 0a 09 09 09 09 09 09 67 72 6f 75 70  d))........group
1ef0: 73 2e 69 6e 73 65 72 74 28 65 69 64 29 3b 0d 0a  s.insert(eid);..
1f00: 09 09 09 09 09 69 66 28 21 73 74 6f 72 65 2e 47  .....if(!store.G
1f10: 6f 74 6f 28 6e 61 76 4e 65 78 74 2c 20 30 29 29  oto(navNext, 0))
1f20: 0d 0a 09 09 09 09 09 09 62 72 65 61 6b 3b 0d 0a  ........break;..
1f30: 09 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 09  ....}.....}.....
1f40: 67 72 6f 75 70 73 2e 72 65 6d 6f 76 65 28 69 64  groups.remove(id
1f50: 29 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 2f 2f  );....}...}...//
1f60: 20 c8 20 f2 e5 ef e5 f0 fc 20 e7 e0 ef e8 f5 e0   . ...... ......
1f70: e5 ec 20 e2 f1 e5 20 e2 20 f2 e0 e1 eb e8 f6 f3  .. ... . .......
1f80: 0d 0a 09 65 6c 65 6d 65 6e 74 73 2e 64 6f 49 6e  ...elements.doIn
1f90: 73 65 72 74 28 70 49 6e 73 65 72 74 29 3b 0d 0a  sert(pInsert);..
1fa0: 09 69 66 28 62 57 69 74 68 47 72 6f 75 70 73 29  .if(bWithGroups)
1fb0: 0d 0a 09 09 70 72 6f 63 65 73 73 65 64 47 72 6f  ....processedGro
1fc0: 75 70 73 2e 64 6f 49 6e 73 65 72 74 28 70 49 6e  ups.doInsert(pIn
1fd0: 73 65 72 74 29 3b 0d 0a 7d 3b 0d 0a 0d 0a 73 74  sert);..};....st
1fe0: 72 75 63 74 20 6b 65 79 42 79 50 6c 61 6e 4b 6f  ruct keyByPlanKo
1ff0: 64 65 20 3a 20 43 4b 65 79 4f 62 6a 20 0d 0a 7b  de : CKeyObj ..{
2000: 0d 0a 09 6b 65 79 42 79 50 6c 61 6e 4b 6f 64 65  ...keyByPlanKode
2010: 28 43 49 6e 64 65 78 2a 20 70 49 29 20 3a 20 43  (CIndex* pI) : C
2020: 4b 65 79 4f 62 6a 28 70 49 2c 20 30 2c 20 30 29  KeyObj(pI, 0, 0)
2030: 2c 20 70 6c 61 6e 28 27 20 20 20 20 27 29 7b 7d  , plan('    '){}
2040: 0d 0a 09 44 57 4f 52 44 20 70 6c 61 6e 3b 0d 0a  ...DWORD plan;..
2050: 09 43 53 74 72 69 6e 67 20 63 6f 64 65 3b 0d 0a  .CString code;..
2060: 09 76 69 72 74 75 61 6c 20 76 6f 69 64 20 50 72  .virtual void Pr
2070: 65 70 61 72 65 4b 65 79 28 29 0d 0a 09 7b 0d 0a  epareKey()...{..
2080: 09 09 6d 5f 70 53 74 6f 72 65 4f 62 6a 2d 3e 46  ..m_pStoreObj->F
2090: 58 5f 53 74 72 69 6e 67 28 31 2c 20 28 63 68 61  X_String(1, (cha
20a0: 72 2a 29 26 70 6c 61 6e 2c 20 34 2c 20 31 29 3b  r*)&plan, 4, 1);
20b0: 0d 0a 09 09 6d 5f 70 53 74 6f 72 65 4f 62 6a 2d  ....m_pStoreObj-
20c0: 3e 46 58 5f 53 74 72 69 6e 67 28 32 2c 20 28 63  >FX_String(2, (c
20d0: 68 61 72 2a 29 28 4c 50 43 53 54 52 29 63 6f 64  har*)(LPCSTR)cod
20e0: 65 2c 20 63 6f 64 65 2e 47 65 74 4c 65 6e 67 74  e, code.GetLengt
20f0: 68 28 29 2c 20 31 29 3b 0d 0a 09 7d 0d 0a 7d 3b  h(), 1);...}..};
2100: 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 76 6f 69 64 20  ....inline void 
2110: 70 72 6f 63 65 73 73 41 63 63 56 61 6c 75 65 28  processAccValue(
2120: 43 56 61 6c 75 65 2a 20 70 56 61 6c 75 65 2c 20  CValue* pValue, 
2130: 43 53 74 6f 72 65 4f 62 6a 26 20 73 74 6f 72 65  CStoreObj& store
2140: 2c 20 6b 65 79 4f 62 6a 3c 30 3e 26 20 6b 65 79  , keyObj<0>& key
2150: 2c 20 4f 62 6a 49 44 53 65 74 26 20 65 6c 65 6d  , ObjIDSet& elem
2160: 65 6e 74 73 2c 0d 0a 09 09 44 57 4f 52 44 20 70  ents,....DWORD p
2170: 6c 61 6e 49 44 2c 20 44 57 4f 52 44 20 63 6f 64  lanID, DWORD cod
2180: 65 4c 65 6e 2c 20 43 4d 61 70 53 74 72 69 6e 67  eLen, CMapString
2190: 54 6f 50 74 72 26 20 67 72 6f 75 70 73 2c 20 4c  ToPtr& groups, L
21a0: 50 53 54 52 20 70 52 65 63 49 73 46 6f 6c 64 65  PSTR pRecIsFolde
21b0: 72 2c 20 4c 50 53 54 52 20 70 52 65 63 43 6f 64  r, LPSTR pRecCod
21c0: 65 2c 20 4c 50 53 54 52 20 70 52 65 63 50 6c 61  e, LPSTR pRecPla
21d0: 6e 49 44 29 0d 0a 7b 0d 0a 09 69 64 38 20 69 64  nID)..{...id8 id
21e0: 20 3d 20 6f 62 6a 49 44 74 6f 38 28 70 56 61 6c   = objIDto8(pVal
21f0: 75 65 2d 3e 6d 5f 4f 62 6a 49 44 29 3b 0d 0a 09  ue->m_ObjID);...
2200: 69 66 28 30 78 32 30 32 30 32 30 30 30 30 30 30  if(0x20202000000
2210: 30 30 30 20 3d 3d 20 69 64 29 0d 0a 09 7b 0d 0a  000 == id)...{..
2220: 09 09 67 72 6f 75 70 73 5b 22 22 5d 20 3d 20 30  ..groups[""] = 0
2230: 3b 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 7d  ;....return;...}
2240: 0d 0a 09 69 64 38 74 6f 39 28 69 64 2c 20 6b 65  ...id8to9(id, ke
2250: 79 2e 69 64 29 3b 0d 0a 0d 0a 09 69 66 28 73 74  y.id);.....if(st
2260: 6f 72 65 2e 47 6f 74 6f 28 26 6b 65 79 2c 20 63  ore.Goto(&key, c
2270: 63 45 2c 20 30 29 29 0d 0a 09 7b 0d 0a 09 09 69  cE, 0))...{....i
2280: 66 28 2a 28 44 57 4f 52 44 2a 29 70 52 65 63 50  f(*(DWORD*)pRecP
2290: 6c 61 6e 49 44 20 3d 3d 20 70 6c 61 6e 49 44 29  lanID == planID)
22a0: 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 28 44 57  ....{.....if((DW
22b0: 4f 52 44 29 28 42 59 54 45 29 2a 70 52 65 63 49  ORD)(BYTE)*pRecI
22c0: 73 46 6f 6c 64 65 72 20 3d 3d 20 27 30 27 29 0d  sFolder == '0').
22d0: 0a 09 09 09 09 65 6c 65 6d 65 6e 74 73 2e 69 6e  .....elements.in
22e0: 73 65 72 74 28 69 64 29 3b 0d 0a 09 09 09 65 6c  sert(id);.....el
22f0: 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 43 53  se.....{......CS
2300: 74 72 69 6e 67 20 63 6f 64 65 28 70 52 65 63 43  tring code(pRecC
2310: 6f 64 65 2c 20 63 6f 64 65 4c 65 6e 29 3b 0d 0a  ode, codeLen);..
2320: 09 09 09 09 63 6f 64 65 2e 54 72 69 6d 52 69 67  ....code.TrimRig
2330: 68 74 28 29 3b 0d 0a 09 09 09 09 67 72 6f 75 70  ht();......group
2340: 73 5b 63 6f 64 65 5d 20 3d 20 30 3b 0d 0a 09 09  s[code] = 0;....
2350: 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 7d 0d 0a  .}....}...}..}..
2360: 0d 0a 76 6f 69 64 20 70 75 74 76 6c 41 63 63 6f  ..void putvlAcco
2370: 75 6e 74 73 28 43 50 6c 61 6e 44 65 66 2a 20 70  unts(CPlanDef* p
2380: 50 6c 61 6e 44 65 66 2c 20 43 50 74 72 41 72 72  PlanDef, CPtrArr
2390: 61 79 2a 20 70 56 4c 2c 20 43 56 61 6c 75 65 2a  ay* pVL, CValue*
23a0: 20 70 56 61 6c 2c 20 73 71 6c 69 74 65 33 5f 73   pVal, sqlite3_s
23b0: 74 6d 74 2a 20 70 49 6e 73 65 72 74 29 0d 0a 7b  tmt* pInsert)..{
23c0: 0d 0a 09 4f 62 6a 49 44 53 65 74 20 65 6c 65 6d  ...ObjIDSet elem
23d0: 65 6e 74 73 3b 0d 0a 09 43 4d 61 70 53 74 72 69  ents;...CMapStri
23e0: 6e 67 54 6f 50 74 72 20 70 72 6f 63 65 73 73 65  ngToPtr processe
23f0: 64 47 72 6f 75 70 73 3b 0d 0a 09 43 4d 61 70 53  dGroups;...CMapS
2400: 74 72 69 6e 67 54 6f 50 74 72 20 67 72 6f 75 70  tringToPtr group
2410: 73 3b 0d 0a 0d 0a 09 43 54 61 62 6c 65 45 78 2a  s;.....CTableEx*
2420: 20 70 54 61 62 6c 65 20 3d 20 28 43 54 61 62 6c   pTable = (CTabl
2430: 65 45 78 2a 29 70 44 61 74 61 44 69 63 74 2d 3e  eEx*)pDataDict->
2440: 47 65 74 54 61 62 6c 65 28 22 31 53 41 43 43 53  GetTable("1SACCS
2450: 22 29 3b 0d 0a 09 4c 50 53 54 52 20 70 52 65 63  ");...LPSTR pRec
2460: 49 44 20 3d 20 70 54 61 62 6c 65 2d 3e 72 65 63  ID = pTable->rec
2470: 6f 72 64 42 75 66 66 65 72 28 29 3b 0d 0a 09 4c  ordBuffer();...L
2480: 50 53 54 52 20 70 52 65 63 50 49 44 20 3d 20 70  PSTR pRecPID = p
2490: 52 65 63 49 44 20 2b 20 39 3b 0d 0a 09 4c 50 53  RecID + 9;...LPS
24a0: 54 52 20 70 52 65 63 43 6f 64 65 20 3d 20 70 52  TR pRecCode = pR
24b0: 65 63 50 49 44 20 2b 20 34 3b 0d 0a 09 69 6e 74  ecPID + 4;...int
24c0: 20 63 6f 64 65 4c 65 6e 20 3d 20 70 54 61 62 6c   codeLen = pTabl
24d0: 65 2d 3e 66 69 65 6c 64 28 32 29 2d 3e 73 69 7a  e->field(2)->siz
24e0: 65 43 46 69 65 6c 64 3b 0d 0a 09 4c 50 53 54 52  eCField;...LPSTR
24f0: 20 70 52 65 63 49 73 46 6f 6c 64 65 72 20 3d 20   pRecIsFolder = 
2500: 70 52 65 63 43 6f 64 65 20 2b 20 63 6f 64 65 4c  pRecCode + codeL
2510: 65 6e 20 2b 20 70 54 61 62 6c 65 2d 3e 66 69 65  en + pTable->fie
2520: 6c 64 28 33 29 2d 3e 73 69 7a 65 43 46 69 65 6c  ld(3)->sizeCFiel
2530: 64 20 2b 20 33 3b 0d 0a 09 0d 0a 09 43 49 6e 64  d + 3;......CInd
2540: 65 78 2a 20 70 49 64 78 43 6f 64 65 20 3d 20 70  ex* pIdxCode = p
2550: 54 61 62 6c 65 2d 3e 47 65 74 49 6e 64 65 78 28  Table->GetIndex(
2560: 31 29 3b 0d 0a 09 6b 65 79 42 79 50 6c 61 6e 4b  1);...keyByPlanK
2570: 6f 64 65 20 6b 65 79 43 6f 64 65 28 70 49 64 78  ode keyCode(pIdx
2580: 43 6f 64 65 29 3b 0d 0a 09 69 64 32 73 74 72 28  Code);...id2str(
2590: 70 50 6c 61 6e 44 65 66 2d 3e 6d 5f 49 44 2c 20  pPlanDef->m_ID, 
25a0: 28 42 59 54 45 2a 29 26 6b 65 79 43 6f 64 65 2e  (BYTE*)&keyCode.
25b0: 70 6c 61 6e 2c 20 34 29 3b 0d 0a 09 0d 0a 0d 0a  plan, 4);.......
25c0: 09 2f 2f 20 c8 f9 e5 ec 20 ef ee 20 e8 e4 f8 ed  .// .... .. ....
25d0: e8 ea f3 0d 0a 09 7b 0d 0a 09 09 43 49 6e 64 65  ......{....CInde
25e0: 78 2a 20 70 49 20 3d 20 70 54 61 62 6c 65 2d 3e  x* pI = pTable->
25f0: 69 6e 64 65 78 28 30 29 3b 0d 0a 09 09 43 53 74  index(0);....CSt
2600: 6f 72 65 4f 62 6a 20 73 74 6f 72 65 28 70 54 61  oreObj store(pTa
2610: 62 6c 65 2c 20 70 49 29 3b 0d 0a 09 09 6b 65 79  ble, pI);....key
2620: 4f 62 6a 3c 30 3e 20 6b 65 79 28 70 49 29 3b 0d  Obj<0> key(pI);.
2630: 0a 09 09 69 66 28 70 56 4c 29 0d 0a 09 09 7b 0d  ...if(pVL)....{.
2640: 0a 09 09 09 43 56 61 6c 75 65 49 74 65 6d 2a 2a  ....CValueItem**
2650: 20 70 70 49 74 65 6d 73 20 3d 20 28 43 56 61 6c   ppItems = (CVal
2660: 75 65 49 74 65 6d 2a 2a 29 70 56 4c 2d 3e 47 65  ueItem**)pVL->Ge
2670: 74 44 61 74 61 28 29 3b 0d 0a 09 09 09 66 6f 72  tData();.....for
2680: 28 44 57 4f 52 44 20 63 20 3d 20 70 56 4c 2d 3e  (DWORD c = pVL->
2690: 47 65 74 53 69 7a 65 28 29 3b 20 63 2d 2d 3b 20  GetSize(); c--; 
26a0: 70 70 49 74 65 6d 73 2b 2b 29 0d 0a 09 09 09 09  ppItems++)......
26b0: 70 72 6f 63 65 73 73 41 63 63 56 61 6c 75 65 28  processAccValue(
26c0: 26 28 2a 70 70 49 74 65 6d 73 29 2d 3e 6d 5f 76  &(*ppItems)->m_v
26d0: 61 6c 75 65 2c 20 73 74 6f 72 65 2c 20 6b 65 79  alue, store, key
26e0: 2c 20 65 6c 65 6d 65 6e 74 73 2c 20 6b 65 79 43  , elements, keyC
26f0: 6f 64 65 2e 70 6c 61 6e 2c 20 63 6f 64 65 4c 65  ode.plan, codeLe
2700: 6e 2c 20 67 72 6f 75 70 73 2c 20 70 52 65 63 49  n, groups, pRecI
2710: 73 46 6f 6c 64 65 72 2c 20 70 52 65 63 43 6f 64  sFolder, pRecCod
2720: 65 2c 20 70 52 65 63 50 49 44 29 3b 0d 0a 09 09  e, pRecPID);....
2730: 7d 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 09 70 72  }....else.....pr
2740: 6f 63 65 73 73 41 63 63 56 61 6c 75 65 28 70 56  ocessAccValue(pV
2750: 61 6c 2c 20 73 74 6f 72 65 2c 20 6b 65 79 2c 20  al, store, key, 
2760: 65 6c 65 6d 65 6e 74 73 2c 20 6b 65 79 43 6f 64  elements, keyCod
2770: 65 2e 70 6c 61 6e 2c 20 63 6f 64 65 4c 65 6e 2c  e.plan, codeLen,
2780: 20 67 72 6f 75 70 73 2c 20 70 52 65 63 49 73 46   groups, pRecIsF
2790: 6f 6c 64 65 72 2c 20 70 52 65 63 43 6f 64 65 2c  older, pRecCode,
27a0: 20 70 52 65 63 50 49 44 29 3b 0d 0a 09 7d 0d 0a   pRecPID);...}..
27b0: 09 2f 2f 20 d2 e5 ef e5 f0 fc 20 e1 f3 e4 e5 ec  .// ...... .....
27c0: 20 f0 e0 e7 e2 ee f0 e0 f7 e8 e2 e0 f2 fc 20 e3   ............. .
27d0: f0 f3 ef ef fb 0d 0a 09 43 53 74 6f 72 65 4f 62  ........CStoreOb
27e0: 6a 20 73 74 6f 72 65 28 70 54 61 62 6c 65 2c 20  j store(pTable, 
27f0: 70 49 64 78 43 6f 64 65 29 3b 0d 0a 09 0d 0a 09  pIdxCode);......
2800: 66 6f 72 28 50 4f 53 49 54 49 4f 4e 20 70 6f 73  for(POSITION pos
2810: 20 3d 20 67 72 6f 75 70 73 2e 47 65 74 53 74 61   = groups.GetSta
2820: 72 74 50 6f 73 69 74 69 6f 6e 28 29 3b 20 70 6f  rtPosition(); po
2830: 73 3b 29 0d 0a 09 7b 0d 0a 09 09 76 6f 69 64 2a  s;)...{....void*
2840: 20 70 76 3b 0d 0a 09 09 67 72 6f 75 70 73 2e 47   pv;....groups.G
2850: 65 74 4e 65 78 74 41 73 73 6f 63 28 70 6f 73 2c  etNextAssoc(pos,
2860: 20 6b 65 79 43 6f 64 65 2e 63 6f 64 65 2c 20 70   keyCode.code, p
2870: 76 29 3b 0d 0a 09 09 69 66 28 21 70 72 6f 63 65  v);....if(!proce
2880: 73 73 65 64 47 72 6f 75 70 73 2e 4c 6f 6f 6b 75  ssedGroups.Looku
2890: 70 28 6b 65 79 43 6f 64 65 2e 63 6f 64 65 2c 20  p(keyCode.code, 
28a0: 70 76 29 29 0d 0a 09 09 7b 0d 0a 09 09 09 70 72  pv))....{.....pr
28b0: 6f 63 65 73 73 65 64 47 72 6f 75 70 73 5b 6b 65  ocessedGroups[ke
28c0: 79 43 6f 64 65 2e 63 6f 64 65 5d 20 3d 20 30 3b  yCode.code] = 0;
28d0: 0d 0a 09 09 09 69 66 28 73 74 6f 72 65 2e 47 6f  .....if(store.Go
28e0: 74 6f 28 26 6b 65 79 43 6f 64 65 2c 20 63 63 47  to(&keyCode, ccG
28f0: 2c 20 30 29 29 0d 0a 09 09 09 7b 0d 0a 09 09 09  , 0)).....{.....
2900: 09 44 57 4f 52 44 20 6c 65 6e 4f 66 43 6f 64 65  .DWORD lenOfCode
2910: 20 3d 20 6b 65 79 43 6f 64 65 2e 63 6f 64 65 2e   = keyCode.code.
2920: 47 65 74 4c 65 6e 67 74 68 28 29 3b 0d 0a 09 09  GetLength();....
2930: 09 09 66 6f 72 28 3b 3b 29 0d 0a 09 09 09 09 7b  ..for(;;)......{
2940: 0d 0a 09 09 09 09 09 69 66 28 2a 28 44 57 4f 52  .......if(*(DWOR
2950: 44 2a 29 70 52 65 63 50 49 44 20 21 3d 20 6b 65  D*)pRecPID != ke
2960: 79 43 6f 64 65 2e 70 6c 61 6e 29 0d 0a 09 09 09  yCode.plan).....
2970: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 09 09  ...break;.......
2980: 69 66 28 30 20 21 3d 20 75 38 74 65 78 74 3a 3a  if(0 != u8text::
2990: 63 6f 6d 70 61 72 65 4c 65 6e 28 70 52 65 63 43  compareLen(pRecC
29a0: 6f 64 65 2c 20 6b 65 79 43 6f 64 65 2e 63 6f 64  ode, keyCode.cod
29b0: 65 2c 20 6c 65 6e 4f 66 43 6f 64 65 29 29 0d 0a  e, lenOfCode))..
29c0: 09 09 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09  ......break;....
29d0: 09 09 09 69 66 28 28 44 57 4f 52 44 29 28 42 59  ...if((DWORD)(BY
29e0: 54 45 29 2a 70 52 65 63 49 73 46 6f 6c 64 65 72  TE)*pRecIsFolder
29f0: 20 3d 3d 20 27 30 27 29 09 2f 2f 20 f1 f7 e5 f2   == '0').// ....
2a00: 0d 0a 09 09 09 09 09 09 65 6c 65 6d 65 6e 74 73  ........elements
2a10: 2e 69 6e 73 65 72 74 28 69 64 39 74 6f 38 28 70  .insert(id9to8(p
2a20: 52 65 63 49 44 29 29 3b 0d 0a 09 09 09 09 09 65  RecID));.......e
2a30: 6c 73 65 20 2f 2f 20 c3 f0 f3 ef ef e0 0d 0a 09  lse // .........
2a40: 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 43 53 74  ....{........CSt
2a50: 72 69 6e 67 20 63 6f 64 65 28 70 52 65 63 43 6f  ring code(pRecCo
2a60: 64 65 2c 20 63 6f 64 65 4c 65 6e 29 3b 0d 0a 09  de, codeLen);...
2a70: 09 09 09 09 09 63 6f 64 65 2e 54 72 69 6d 52 69  .....code.TrimRi
2a80: 67 68 74 28 29 3b 0d 0a 09 09 09 09 09 09 70 72  ght();........pr
2a90: 6f 63 65 73 73 65 64 47 72 6f 75 70 73 5b 63 6f  ocessedGroups[co
2aa0: 64 65 5d 20 3d 20 30 3b 0d 0a 09 09 09 09 09 7d  de] = 0;.......}
2ab0: 0d 0a 09 09 09 09 09 69 66 28 21 73 74 6f 72 65  .......if(!store
2ac0: 2e 47 6f 74 6f 28 6e 61 76 4e 65 78 74 2c 20 30  .Goto(navNext, 0
2ad0: 29 29 0d 0a 09 09 09 09 09 09 62 72 65 61 6b 3b  ))........break;
2ae0: 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09  ......}.....}...
2af0: 09 7d 0d 0a 09 7d 0d 0a 09 2f 2f 20 c8 20 f2 e5  .}...}...// . ..
2b00: ef e5 f0 fc 20 e7 e0 ef e8 f5 e0 e5 ec 20 e2 f1  .... ........ ..
2b10: e5 20 e2 20 f2 e0 e1 eb e8 f6 f3 0d 0a 09 65 6c  . . ..........el
2b20: 65 6d 65 6e 74 73 2e 64 6f 49 6e 73 65 72 74 28  ements.doInsert(
2b30: 70 49 6e 73 65 72 74 29 3b 0d 0a 7d 0d 0a 20 0d  pInsert);..}.. .
2b40: 0a 0d 0a 0d 0a 2f 2a 0d 0a d3 f1 f2 e0 ed ee e2  ...../*.........
2b50: ea e0 20 ef e0 f0 e0 ec e5 f2 f0 e0 2e 0d 0a 2a  .. ............*
2b60: 2f 0d 0a 0d 0a 69 6e 74 20 53 51 4c 69 74 65 42  /....int SQLiteB
2b70: 61 73 65 3a 3a 78 43 72 65 61 74 65 28 73 71 6c  ase::xCreate(sql
2b80: 69 74 65 33 2a 20 70 42 61 73 65 2c 20 76 6f 69  ite3* pBase, voi
2b90: 64 2a 2c 20 69 6e 74 20 61 72 67 63 2c 20 63 6f  d*, int argc, co
2ba0: 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 2a  nst char *const*
2bb0: 61 72 67 76 2c 20 73 71 6c 69 74 65 33 5f 76 74  argv, sqlite3_vt
2bc0: 61 62 20 2a 2a 70 70 56 54 61 62 2c 20 63 68 61  ab **ppVTab, cha
2bd0: 72 2a 2a 20 70 45 72 72 29 0d 0a 7b 0d 0a 09 69  r** pErr)..{...i
2be0: 66 28 61 72 67 63 3c 34 29 0d 0a 09 09 72 65 74  f(argc<4)....ret
2bf0: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
2c00: 3b 0d 0a 09 43 56 74 61 62 49 6e 66 6f 2a 20 70  ;...CVtabInfo* p
2c10: 56 74 61 62 49 6e 66 6f 20 3d 20 43 56 74 61 62  VtabInfo = CVtab
2c20: 49 6e 66 6f 3a 3a 74 61 62 49 6e 66 6f 46 6f 72  Info::tabInfoFor
2c30: 4e 61 6d 65 28 75 38 74 65 78 74 3a 3a 66 72 6f  Name(u8text::fro
2c40: 6d 55 74 66 38 28 61 72 67 76 5b 33 5d 29 29 3b  mUtf8(argv[3]));
2c50: 0d 0a 09 69 66 28 21 70 56 74 61 62 49 6e 66 6f  ...if(!pVtabInfo
2c60: 29 0d 0a 09 09 72 65 74 75 72 6e 20 53 51 4c 49  )....return SQLI
2c70: 54 45 5f 45 52 52 4f 52 3b 0d 0a 09 0d 0a 09 73  TE_ERROR;......s
2c80: 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
2c90: 74 61 62 28 70 42 61 73 65 2c 20 70 56 74 61 62  tab(pBase, pVtab
2ca0: 49 6e 66 6f 2d 3e 74 65 78 74 53 71 6c 43 72 65  Info->textSqlCre
2cb0: 61 74 65 28 29 29 3b 0d 0a 09 2a 70 70 56 54 61  ate());...*ppVTa
2cc0: 62 20 3d 20 70 56 74 61 62 49 6e 66 6f 3b 0d 0a  b = pVtabInfo;..
2cd0: 09 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f  .return SQLITE_O
2ce0: 4b 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 53 51 4c  K;..}....int SQL
2cf0: 69 74 65 42 61 73 65 3a 3a 78 44 65 73 74 72 6f  iteBase::xDestro
2d00: 79 28 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a  y(sqlite3_vtab *
2d10: 70 56 54 61 62 29 0d 0a 7b 0d 0a 09 72 65 74 75  pVTab)..{...retu
2d20: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0d 0a 7d  rn SQLITE_OK;..}
2d30: 0d 0a 0d 0a 69 6e 74 20 53 51 4c 69 74 65 42 61  ....int SQLiteBa
2d40: 73 65 3a 3a 78 42 65 73 74 49 6e 64 65 78 28 73  se::xBestIndex(s
2d50: 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 54  qlite3_vtab *pVT
2d60: 61 62 2c 20 73 71 6c 69 74 65 33 5f 69 6e 64 65  ab, sqlite3_inde
2d70: 78 5f 69 6e 66 6f 2a 20 70 49 64 78 29 0d 0a 7b  x_info* pIdx)..{
2d80: 0d 0a 09 72 65 74 75 72 6e 20 73 74 61 74 69 63  ...return static
2d90: 5f 63 61 73 74 3c 43 56 74 61 62 49 6e 66 6f 2a  _cast<CVtabInfo*
2da0: 3e 28 70 56 54 61 62 29 2d 3e 62 65 73 74 49 6e  >(pVTab)->bestIn
2db0: 64 65 78 28 70 49 64 78 29 3b 0d 0a 7d 0d 0a 0d  dex(pIdx);..}...
2dc0: 0a 69 6e 74 20 53 51 4c 69 74 65 42 61 73 65 3a  .int SQLiteBase:
2dd0: 3a 78 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f 76  :xOpen(sqlite3_v
2de0: 74 61 62 20 2a 70 56 54 61 62 2c 20 73 71 6c 69  tab *pVTab, sqli
2df0: 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20  te3_vtab_cursor 
2e00: 2a 2a 70 70 43 75 72 73 6f 72 29 0d 0a 7b 0d 0a  **ppCursor)..{..
2e10: 09 72 65 74 75 72 6e 20 73 74 61 74 69 63 5f 63  .return static_c
2e20: 61 73 74 3c 43 56 74 61 62 49 6e 66 6f 2a 3e 28  ast<CVtabInfo*>(
2e30: 70 56 54 61 62 29 2d 3e 6f 70 65 6e 43 75 72 73  pVTab)->openCurs
2e40: 6f 72 28 70 70 43 75 72 73 6f 72 29 3b 0d 0a 7d  or(ppCursor);..}
2e50: 0d 0a 0d 0a 69 6e 74 20 53 51 4c 69 74 65 42 61  ....int SQLiteBa
2e60: 73 65 3a 3a 78 43 6c 6f 73 65 28 73 71 6c 69 74  se::xClose(sqlit
2e70: 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 20  e3_vtab_cursor* 
2e80: 70 43 29 0d 0a 7b 0d 0a 09 73 74 61 74 69 63 5f  pC)..{...static_
2e90: 63 61 73 74 3c 43 75 72 73 6f 72 49 6d 70 6c 2a  cast<CursorImpl*
2ea0: 3e 28 70 43 29 2d 3e 43 6c 6f 73 65 28 29 3b 0d  >(pC)->Close();.
2eb0: 0a 09 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ..return SQLITE_
2ec0: 4f 4b 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 53 51  OK;..}....int SQ
2ed0: 4c 69 74 65 42 61 73 65 3a 3a 78 46 69 6c 74 65  LiteBase::xFilte
2ee0: 72 28 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63  r(sqlite3_vtab_c
2ef0: 75 72 73 6f 72 2a 20 70 43 2c 20 69 6e 74 20 69  ursor* pC, int i
2f00: 64 78 4e 75 6d 2c 20 63 6f 6e 73 74 20 63 68 61  dxNum, const cha
2f10: 72 20 2a 69 64 78 53 74 72 2c 20 69 6e 74 20 61  r *idxStr, int a
2f20: 72 67 63 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  rgc, sqlite3_val
2f30: 75 65 20 2a 2a 61 72 67 76 29 0d 0a 7b 0d 0a 09  ue **argv)..{...
2f40: 72 65 74 75 72 6e 20 73 74 61 74 69 63 5f 63 61  return static_ca
2f50: 73 74 3c 43 75 72 73 6f 72 49 6d 70 6c 2a 3e 28  st<CursorImpl*>(
2f60: 70 43 29 2d 3e 46 69 6c 74 65 72 28 69 64 78 4e  pC)->Filter(idxN
2f70: 75 6d 2c 20 69 64 78 53 74 72 2c 20 61 72 67 63  um, idxStr, argc
2f80: 2c 20 61 72 67 76 29 3b 0d 0a 7d 0d 0a 0d 0a 69  , argv);..}....i
2f90: 6e 74 20 53 51 4c 69 74 65 42 61 73 65 3a 3a 78  nt SQLiteBase::x
2fa0: 4e 65 78 74 28 73 71 6c 69 74 65 33 5f 76 74 61  Next(sqlite3_vta
2fb0: 62 5f 63 75 72 73 6f 72 2a 20 70 43 29 0d 0a 7b  b_cursor* pC)..{
2fc0: 0d 0a 09 72 65 74 75 72 6e 20 73 74 61 74 69 63  ...return static
2fd0: 5f 63 61 73 74 3c 43 75 72 73 6f 72 49 6d 70 6c  _cast<CursorImpl
2fe0: 2a 3e 28 70 43 29 2d 3e 4e 65 78 74 28 29 3b 0d  *>(pC)->Next();.
2ff0: 0a 7d 0d 0a 0d 0a 69 6e 74 20 53 51 4c 69 74 65  .}....int SQLite
3000: 42 61 73 65 3a 3a 78 45 6f 66 28 73 71 6c 69 74  Base::xEof(sqlit
3010: 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 20  e3_vtab_cursor* 
3020: 70 43 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20  pC)..{...return 
3030: 73 74 61 74 69 63 5f 63 61 73 74 3c 43 75 72 73  static_cast<Curs
3040: 6f 72 49 6d 70 6c 2a 3e 28 70 43 29 2d 3e 49 73  orImpl*>(pC)->Is
3050: 45 6f 66 28 29 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 74  Eof();..}....int
3060: 20 53 51 4c 69 74 65 42 61 73 65 3a 3a 78 43 6f   SQLiteBase::xCo
3070: 6c 75 6d 6e 28 73 71 6c 69 74 65 33 5f 76 74 61  lumn(sqlite3_vta
3080: 62 5f 63 75 72 73 6f 72 2a 20 70 43 2c 20 73 71  b_cursor* pC, sq
3090: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 20 70  lite3_context* p
30a0: 43 74 78 2c 20 69 6e 74 20 6e 43 6f 6c 29 0d 0a  Ctx, int nCol)..
30b0: 7b 0d 0a 09 72 65 74 75 72 6e 20 73 74 61 74 69  {...return stati
30c0: 63 5f 63 61 73 74 3c 43 75 72 73 6f 72 49 6d 70  c_cast<CursorImp
30d0: 6c 2a 3e 28 70 43 29 2d 3e 43 6f 6c 75 6d 6e 28  l*>(pC)->Column(
30e0: 70 43 74 78 2c 20 6e 43 6f 6c 29 3b 0d 0a 7d 0d  pCtx, nCol);..}.
30f0: 0a 0d 0a 69 6e 74 20 53 51 4c 69 74 65 42 61 73  ...int SQLiteBas
3100: 65 3a 3a 78 52 6f 77 69 64 28 73 71 6c 69 74 65  e::xRowid(sqlite
3110: 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 2a 20 70  3_vtab_cursor* p
3120: 43 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  C, sqlite3_int64
3130: 20 2a 70 52 6f 77 69 64 29 0d 0a 7b 0d 0a 09 72   *pRowid)..{...r
3140: 65 74 75 72 6e 20 73 74 61 74 69 63 5f 63 61 73  eturn static_cas
3150: 74 3c 43 75 72 73 6f 72 49 6d 70 6c 2a 3e 28 70  t<CursorImpl*>(p
3160: 43 29 2d 3e 52 6f 77 49 44 28 70 52 6f 77 69 64  C)->RowID(pRowid
3170: 29 3b 0d 0a 7d 0d 0a 0d 0a 73 74 72 75 63 74 20  );..}....struct 
3180: 66 69 6e 64 65 72 0d 0a 7b 0d 0a 09 43 4e 6f 43  finder..{...CNoC
3190: 61 73 65 4d 61 70 3c 69 6e 74 3e 20 6e 61 6d 65  aseMap<int> name
31a0: 73 3b 0d 0a 09 66 69 6e 64 65 72 28 29 0d 0a 09  s;...finder()...
31b0: 7b 0d 0a 09 09 73 74 61 74 69 63 20 73 74 72 75  {....static stru
31c0: 63 74 7b 4c 50 43 53 54 52 20 6e 31 2c 20 6e 32  ct{LPCSTR n1, n2
31d0: 3b 20 69 6e 74 20 73 3b 7d 20 64 61 74 61 5b 5d  ; int s;} data[]
31e0: 20 3d 20 0d 0a 09 09 7b 0d 0a 09 09 09 7b 22 d1   = ....{.....{".
31f0: f2 f0 ee ea e0 22 2c 20 22 53 74 72 69 6e 67 22  .....", "String"
3200: 2c 20 74 74 53 74 72 69 6e 67 7d 2c 0d 0a 09 09  , ttString},....
3210: 09 7b 22 c4 e0 f2 e0 22 2c 20 22 44 61 74 65 22  .{"....", "Date"
3220: 2c 20 74 74 44 61 74 65 7d 2c 0d 0a 09 09 09 7b  , ttDate},.....{
3230: 22 d7 e8 f1 eb ee 22 2c 20 22 4e 75 6d 62 65 72  ".....", "Number
3240: 22 2c 20 74 74 4e 75 6d 62 65 72 7d 2c 0d 0a 09  ", ttNumber},...
3250: 09 09 7b 22 d1 ef f0 e0 e2 ee f7 ed e8 ea 22 2c  ..{"..........",
3260: 20 22 52 65 66 65 72 65 6e 63 65 22 2c 20 74 74   "Reference", tt
3270: 52 65 66 65 72 65 6e 63 65 7d 2c 0d 0a 09 09 09  Reference},.....
3280: 7b 22 c4 ee ea f3 ec e5 ed f2 22 2c 20 22 44 6f  {"........", "Do
3290: 63 75 6d 65 6e 74 22 2c 20 74 74 44 6f 63 75 6d  cument", ttDocum
32a0: 65 6e 74 7d 2c 0d 0a 09 09 09 7b 22 c2 e8 e4 c4  ent},.....{"....
32b0: ee ea f3 ec e5 ed f2 e0 22 2c 20 22 44 6f 63 75  ........", "Docu
32c0: 6d 65 6e 74 4b 69 6e 64 22 2c 20 74 74 44 6f 63  mentKind", ttDoc
32d0: 4b 69 6e 64 7d 2c 0d 0a 09 09 09 7b 22 c2 e8 e4  Kind},.....{"...
32e0: c4 ee ea f3 ec e5 ed f2 e0 cf f0 e5 e4 f1 f2 e0  ................
32f0: e2 eb e5 ed e8 e5 22 2c 20 22 44 6f 63 75 6d 65  ......", "Docume
3300: 6e 74 4b 69 6e 64 50 72 65 73 65 6e 74 22 2c 20  ntKindPresent", 
3310: 74 74 44 6f 63 50 72 65 73 65 6e 74 7d 2c 0d 0a  ttDocPresent},..
3320: 09 09 09 7b 22 cf e5 f0 e5 f7 e8 f1 eb e5 ed e8  ...{"...........
3330: e5 22 2c 20 22 45 6e 75 6d 22 2c 20 74 74 45 6e  .", "Enum", ttEn
3340: 75 6d 7d 2c 0d 0a 09 09 09 7b 22 d1 f7 e5 f2 22  um},.....{"...."
3350: 2c 20 22 41 63 63 6f 75 6e 74 22 2c 20 74 74 41  , "Account", ttA
3360: 63 63 6f 75 6e 74 7d 2c 0d 0a 09 09 09 7b 22 cd  ccount},.....{".
3370: e5 ee ef f0 e5 e4 e5 eb e5 ed ed fb e9 22 2c 20  .............", 
3380: 22 55 6e 64 65 66 69 6e 65 22 2c 20 74 74 55 6e  "Undefine", ttUn
3390: 64 65 66 69 6e 65 7d 2c 0d 0a 09 09 09 7b 22 c2  define},.....{".
33a0: e8 e4 d0 e0 f1 f7 e5 f2 e0 22 2c 20 22 43 61 6c  .........", "Cal
33b0: 63 75 6c 61 74 69 6f 6e 4b 69 6e 64 22 2c 20 74  culationKind", t
33c0: 74 43 61 6c 63 4b 69 6e 64 7d 2c 0d 0a 09 09 09  tCalcKind},.....
33d0: 7b 22 ca e0 eb e5 ed e4 e0 f0 fc 22 2c 20 22 43  {".........", "C
33e0: 61 6c 65 6e 64 61 72 22 2c 20 74 74 43 61 6c 65  alendar", ttCale
33f0: 6e 64 61 72 7d 2c 0d 0a 09 09 09 7b 22 d1 f3 e1  ndar},.....{"...
3400: ea ee ed f2 ee 22 2c 20 22 53 75 62 63 6f 6e 74  .....", "Subcont
3410: 6f 22 2c 20 74 74 53 75 62 63 6f 6e 74 6f 7d 2c  o", ttSubconto},
3420: 0d 0a 09 09 09 7b 22 c2 f0 e5 ec ff 22 2c 20 22  .....{".....", "
3430: 54 69 6d 65 22 2c 20 74 74 54 69 6d 65 7d 2c 0d  Time", ttTime},.
3440: 0a 09 09 09 7b 22 c8 ec ff c2 e8 e4 e0 22 2c 20  ....{".......", 
3450: 22 4b 69 6e 64 4e 61 6d 65 22 2c 20 74 74 4b 69  "KindName", ttKi
3460: 6e 64 4e 61 6d 65 7d 2c 0d 0a 09 09 09 7b 22 cf  ndName},.....{".
3470: f0 e5 e4 f1 f2 e0 e2 eb e5 ed e8 e5 c2 e8 e4 e0  ................
3480: 22 2c 20 22 4b 69 6e 64 50 72 65 73 65 6e 74 22  ", "KindPresent"
3490: 2c 20 74 74 4b 69 6e 64 50 72 65 73 65 6e 74 7d  , ttKindPresent}
34a0: 2c 0d 0a 09 09 09 7b 22 c2 e8 e4 d1 f3 e1 ea ee  ,.....{"........
34b0: ed f2 ee 22 2c 20 22 53 75 62 63 6f 6e 74 6f 4b  ...", "SubcontoK
34c0: 69 6e 64 22 2c 20 74 74 53 75 62 63 4b 69 6e 64  ind", ttSubcKind
34d0: 7d 2c 0d 0a 09 09 09 7b 22 c2 e8 e4 d1 f3 e1 ea  },.....{".......
34e0: ee ed f2 ee cf f0 e5 e4 f1 f2 e0 e2 eb e5 ed e8  ................
34f0: e5 22 2c 20 22 53 75 62 63 6f 6e 74 6f 4b 69 6e  .", "SubcontoKin
3500: 64 50 72 65 73 65 6e 74 22 2c 20 74 74 53 75 62  dPresent", ttSub
3510: 63 50 72 65 73 65 6e 74 7d 2c 0d 0a 09 09 7d 3b  cPresent},....};
3520: 0d 0a 09 09 66 6f 72 28 44 57 4f 52 44 20 69 20  ....for(DWORD i 
3530: 3d 20 30 3b 20 69 20 3c 20 73 69 7a 65 6f 66 28  = 0; i < sizeof(
3540: 64 61 74 61 29 20 2f 20 73 69 7a 65 6f 66 28 64  data) / sizeof(d
3550: 61 74 61 5b 30 5d 29 20 3b 20 69 2b 2b 29 0d 0a  ata[0]) ; i++)..
3560: 09 09 7b 0d 0a 09 09 09 6e 61 6d 65 73 5b 64 61  ..{.....names[da
3570: 74 61 5b 69 5d 2e 6e 31 5d 20 3d 20 64 61 74 61  ta[i].n1] = data
3580: 5b 69 5d 2e 73 3b 0d 0a 09 09 09 6e 61 6d 65 73  [i].s;.....names
3590: 5b 64 61 74 61 5b 69 5d 2e 6e 32 5d 20 3d 20 64  [data[i].n2] = d
35a0: 61 74 61 5b 69 5d 2e 73 3b 0d 0a 09 09 7d 0d 0a  ata[i].s;....}..
35b0: 09 7d 0d 0a 09 69 6e 74 20 66 69 6e 64 28 63 6f  .}...int find(co
35c0: 6e 73 74 20 43 53 74 72 69 6e 67 26 20 73 74 72  nst CString& str
35d0: 29 0d 0a 09 7b 0d 0a 09 09 69 6e 74 20 72 65 73  )...{....int res
35e0: 20 3d 20 30 3b 0d 0a 09 09 6e 61 6d 65 73 2e 4c   = 0;....names.L
35f0: 6f 6f 6b 75 70 28 73 74 72 2c 20 72 65 73 29 3b  ookup(str, res);
3600: 0d 0a 09 09 72 65 74 75 72 6e 20 72 65 73 3b 0d  ....return res;.
3610: 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 53 51 4c 69 74  ..}..};....SQLit
3620: 65 51 75 65 72 79 3a 3a 63 6f 6c 75 6d 6e 5f 69  eQuery::column_i
3630: 6e 66 6f 3a 3a 63 6f 6c 75 6d 6e 5f 69 6e 66 6f  nfo::column_info
3640: 28 63 6f 6e 73 74 20 43 53 74 72 69 6e 67 26 20  (const CString& 
3650: 63 6f 6c 4e 61 6d 65 2c 20 44 57 4f 52 44 20 63  colName, DWORD c
3660: 6f 6c 2c 20 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 2a  ol, column_info*
3670: 26 20 70 4e 65 78 74 29 0d 0a 09 3a 6e 61 6d 65  & pNext)...:name
3680: 28 63 6f 6c 4e 61 6d 65 29 2c 20 63 6f 6c 75 6d  (colName), colum
3690: 6e 28 63 6f 6c 29 2c 20 74 79 70 65 46 6f 72 56  n(col), typeForV
36a0: 54 43 6f 6c 75 6d 6e 28 30 2c 20 30 29 2c 20 74  TColumn(0, 0), t
36b0: 79 70 65 28 74 74 45 72 72 6f 72 29 2c 20 6c 69  ype(ttError), li
36c0: 6e 6b 65 64 46 69 65 6c 64 28 4e 55 4c 4c 29 2c  nkedField(NULL),
36d0: 20 6e 65 78 74 28 70 4e 65 78 74 29 0d 0a 7b 0d   next(pNext)..{.
36e0: 0a 09 70 4e 65 78 74 20 3d 20 74 68 69 73 3b 0d  ..pNext = this;.
36f0: 0a 09 43 53 74 72 69 6e 67 20 74 79 70 65 4e 61  ..CString typeNa
3700: 6d 65 3b 0d 0a 09 53 51 4c 69 74 65 51 75 65 72  me;...SQLiteQuer
3710: 79 3a 3a 74 79 70 65 46 69 65 6c 64 28 6e 61 6d  y::typeField(nam
3720: 65 2c 20 26 74 79 70 65 4e 61 6d 65 29 3b 0d 0a  e, &typeName);..
3730: 09 0d 0a 09 69 66 28 21 74 79 70 65 4e 61 6d 65  ....if(!typeName
3740: 2e 49 73 45 6d 70 74 79 28 29 29 0d 0a 09 7b 0d  .IsEmpty())...{.
3750: 0a 09 09 43 53 74 72 69 6e 67 41 72 72 61 79 20  ...CStringArray 
3760: 73 74 72 54 79 70 65 73 3b 0d 0a 09 09 53 70 6c  strTypes;....Spl
3770: 69 74 53 74 72 32 41 72 72 61 79 28 74 79 70 65  itStr2Array(type
3780: 4e 61 6d 65 2c 20 73 74 72 54 79 70 65 73 2c 20  Name, strTypes, 
3790: 27 2e 27 29 3b 0d 0a 09 09 0d 0a 09 09 69 6e 74  '.');........int
37a0: 20 73 69 7a 65 20 3d 20 73 74 72 54 79 70 65 73   size = strTypes
37b0: 2e 47 65 74 53 69 7a 65 28 29 3b 0d 0a 09 09 69  .GetSize();....i
37c0: 66 28 73 69 7a 65 20 3e 20 30 29 0d 0a 09 09 7b  f(size > 0)....{
37d0: 0d 0a 09 09 09 73 74 61 74 69 63 20 66 69 6e 64  .....static find
37e0: 65 72 20 66 6e 64 3b 0d 0a 09 09 09 73 77 69 74  er fnd;.....swit
37f0: 63 68 28 66 6e 64 2e 66 69 6e 64 28 73 74 72 54  ch(fnd.find(strT
3800: 79 70 65 73 5b 30 5d 29 29 0d 0a 09 09 09 7b 0d  ypes[0])).....{.
3810: 0a 09 09 09 63 61 73 65 20 74 74 53 74 72 69 6e  ....case ttStrin
3820: 67 3a 0d 0a 09 09 09 09 69 66 28 73 69 7a 65 20  g:......if(size 
3830: 3c 20 33 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09  < 3)......{.....
3840: 09 09 74 79 70 65 20 3d 20 74 74 53 74 72 69 6e  ..type = ttStrin
3850: 67 3b 0d 0a 09 09 09 09 09 74 79 70 65 46 6f 72  g;.......typeFor
3860: 56 54 43 6f 6c 75 6d 6e 2e 74 79 70 65 20 3d 20  VTColumn.type = 
3870: 74 79 70 65 53 74 72 69 6e 67 3b 0d 0a 09 09 09  typeString;.....
3880: 09 09 69 66 28 32 20 3d 3d 20 73 69 7a 65 29 0d  ..if(2 == size).
3890: 0a 09 09 09 09 09 09 74 79 70 65 46 6f 72 56 54  .......typeForVT
38a0: 43 6f 6c 75 6d 6e 2e 6d 5f 6c 65 6e 67 74 68 20  Column.m_length 
38b0: 3d 20 61 74 6f 6c 28 73 74 72 54 79 70 65 73 5b  = atol(strTypes[
38c0: 31 5d 29 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09  1]);......}.....
38d0: 09 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 65  .break;.....case
38e0: 20 74 74 44 61 74 65 3a 0d 0a 09 09 09 09 69 66   ttDate:......if
38f0: 28 31 20 3d 3d 20 73 69 7a 65 29 0d 0a 09 09 09  (1 == size).....
3900: 09 7b 0d 0a 09 09 09 09 09 74 79 70 65 20 3d 20  .{.......type = 
3910: 74 74 44 61 74 65 3b 0d 0a 09 09 09 09 09 74 79  ttDate;.......ty
3920: 70 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 74 79  peForVTColumn.ty
3930: 70 65 20 3d 20 74 79 70 65 44 61 74 65 3b 0d 0a  pe = typeDate;..
3940: 09 09 09 09 7d 0d 0a 09 09 09 09 62 72 65 61 6b  ....}......break
3950: 3b 0d 0a 09 09 09 63 61 73 65 20 74 74 4e 75 6d  ;.....case ttNum
3960: 62 65 72 3a 0d 0a 09 09 09 09 69 66 28 73 69 7a  ber:......if(siz
3970: 65 20 3c 20 34 29 0d 0a 09 09 09 09 7b 0d 0a 09  e < 4)......{...
3980: 09 09 09 09 74 79 70 65 20 3d 20 74 74 4e 75 6d  ....type = ttNum
3990: 62 65 72 3b 0d 0a 09 09 09 09 09 74 79 70 65 46  ber;.......typeF
39a0: 6f 72 56 54 43 6f 6c 75 6d 6e 2e 74 79 70 65 20  orVTColumn.type 
39b0: 3d 20 74 79 70 65 4e 75 6d 62 65 72 3b 0d 0a 09  = typeNumber;...
39c0: 09 09 09 09 69 66 28 73 69 7a 65 20 3e 20 31 29  ....if(size > 1)
39d0: 0d 0a 09 09 09 09 09 09 74 79 70 65 46 6f 72 56  ........typeForV
39e0: 54 43 6f 6c 75 6d 6e 2e 6d 5f 6c 65 6e 67 74 68  TColumn.m_length
39f0: 20 3d 20 61 74 6f 6c 28 73 74 72 54 79 70 65 73   = atol(strTypes
3a00: 5b 31 5d 29 3b 0d 0a 09 09 09 09 09 69 66 28 73  [1]);.......if(s
3a10: 69 7a 65 20 3e 20 32 29 0d 0a 09 09 09 09 09 09  ize > 2)........
3a20: 74 79 70 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e  typeForVTColumn.
3a30: 6d 5f 70 72 65 63 20 3d 20 61 74 6f 6c 28 73 74  m_prec = atol(st
3a40: 72 54 79 70 65 73 5b 32 5d 29 3b 0d 0a 09 09 09  rTypes[2]);.....
3a50: 09 7d 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a  .}......break;..
3a60: 09 09 09 63 61 73 65 20 74 74 52 65 66 65 72 65  ...case ttRefere
3a70: 6e 63 65 3a 0d 0a 09 09 09 09 69 66 28 31 20 3d  nce:......if(1 =
3a80: 3d 20 73 69 7a 65 29 0d 0a 09 09 09 09 7b 0d 0a  = size)......{..
3a90: 09 09 09 09 09 74 79 70 65 20 3d 20 74 74 52 65  .....type = ttRe
3aa0: 66 65 72 65 6e 63 65 3b 0d 0a 09 09 09 09 09 74  ference;.......t
3ab0: 79 70 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 74  ypeForVTColumn.t
3ac0: 79 70 65 20 3d 20 74 79 70 65 52 65 66 65 72 65  ype = typeRefere
3ad0: 6e 63 65 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09  nce;......}.....
3ae0: 09 65 6c 73 65 20 69 66 28 32 20 3d 3d 20 73 69  .else if(2 == si
3af0: 7a 65 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09  ze)......{......
3b00: 09 43 53 62 43 6e 74 54 79 70 65 44 65 66 2a 20  .CSbCntTypeDef* 
3b10: 70 44 65 66 20 3d 20 70 4d 65 74 61 44 61 74 61  pDef = pMetaData
3b20: 43 6f 6e 74 2d 3e 47 65 74 53 54 79 70 65 44 65  Cont->GetSTypeDe
3b30: 66 28 73 74 72 54 79 70 65 73 5b 31 5d 29 3b 0d  f(strTypes[1]);.
3b40: 0a 09 09 09 09 09 69 66 28 70 44 65 66 29 0d 0a  ......if(pDef)..
3b50: 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 74 79  .....{........ty
3b60: 70 65 20 3d 20 74 74 52 65 66 65 72 65 6e 63 65  pe = ttReference
3b70: 4f 6e 65 3b 0d 0a 09 09 09 09 09 09 74 79 70 65  One;........type
3b80: 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 74 79 70 65  ForVTColumn.type
3b90: 20 3d 20 74 79 70 65 52 65 66 65 72 65 6e 63 65   = typeReference
3ba0: 3b 0d 0a 09 09 09 09 09 09 74 79 70 65 46 6f 72  ;........typeFor
3bb0: 56 54 43 6f 6c 75 6d 6e 2e 6d 5f 6d 64 69 64 20  VTColumn.m_mdid 
3bc0: 3d 20 70 44 65 66 2d 3e 6d 5f 49 44 3b 0d 0a 09  = pDef->m_ID;...
3bd0: 09 09 09 09 7d 0d 0a 09 09 09 09 7d 0d 0a 09 09  ....}......}....
3be0: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73  ..break;.....cas
3bf0: 65 20 74 74 44 6f 63 75 6d 65 6e 74 3a 0d 0a 09  e ttDocument:...
3c00: 09 09 09 69 66 28 31 20 3d 3d 20 73 69 7a 65 29  ...if(1 == size)
3c10: 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 74 79  ......{.......ty
3c20: 70 65 20 3d 20 74 74 44 6f 63 75 6d 65 6e 74 3b  pe = ttDocument;
3c30: 0d 0a 09 09 09 09 09 74 79 70 65 46 6f 72 56 54  .......typeForVT
3c40: 43 6f 6c 75 6d 6e 2e 74 79 70 65 20 3d 20 74 79  Column.type = ty
3c50: 70 65 44 6f 63 75 6d 65 6e 74 3b 0d 0a 09 09 09  peDocument;.....
3c60: 09 7d 0d 0a 09 09 09 09 65 6c 73 65 20 69 66 28  .}......else if(
3c70: 32 20 3d 3d 20 73 69 7a 65 29 0d 0a 09 09 09 09  2 == size)......
3c80: 7b 0d 0a 09 09 09 09 09 43 44 6f 63 44 65 66 2a  {.......CDocDef*
3c90: 20 70 44 65 66 20 3d 20 70 4d 65 74 61 44 61 74   pDef = pMetaDat
3ca0: 61 43 6f 6e 74 2d 3e 47 65 74 44 6f 63 44 65 66  aCont->GetDocDef
3cb0: 28 73 74 72 54 79 70 65 73 5b 31 5d 29 3b 0d 0a  (strTypes[1]);..
3cc0: 09 09 09 09 09 69 66 28 70 44 65 66 29 0d 0a 09  .....if(pDef)...
3cd0: 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 74 79 70  ....{........typ
3ce0: 65 20 3d 20 74 74 44 6f 63 75 6d 65 6e 74 4f 6e  e = ttDocumentOn
3cf0: 65 3b 0d 0a 09 09 09 09 09 09 74 79 70 65 46 6f  e;........typeFo
3d00: 72 56 54 43 6f 6c 75 6d 6e 2e 74 79 70 65 20 3d  rVTColumn.type =
3d10: 20 74 79 70 65 44 6f 63 75 6d 65 6e 74 3b 0d 0a   typeDocument;..
3d20: 09 09 09 09 09 09 74 79 70 65 46 6f 72 56 54 43  ......typeForVTC
3d30: 6f 6c 75 6d 6e 2e 6d 5f 6d 64 69 64 20 3d 20 70  olumn.m_mdid = p
3d40: 44 65 66 2d 3e 6d 5f 49 44 3b 0d 0a 09 09 09 09  Def->m_ID;......
3d50: 09 7d 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 62  .}......}......b
3d60: 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 65 20 74  reak;.....case t
3d70: 74 44 6f 63 4b 69 6e 64 3a 0d 0a 09 09 09 09 69  tDocKind:......i
3d80: 66 28 31 20 3d 3d 20 73 69 7a 65 29 0d 0a 09 09  f(1 == size)....
3d90: 09 09 7b 0d 0a 09 09 09 09 09 74 79 70 65 20 3d  ..{.......type =
3da0: 20 74 74 44 6f 63 4b 69 6e 64 3b 0d 0a 09 09 09   ttDocKind;.....
3db0: 09 09 74 79 70 65 46 6f 72 56 54 43 6f 6c 75 6d  ..typeForVTColum
3dc0: 6e 2e 74 79 70 65 20 3d 20 74 79 70 65 53 74 72  n.type = typeStr
3dd0: 69 6e 67 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09  ing;......}.....
3de0: 09 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 65  .break;.....case
3df0: 20 74 74 44 6f 63 50 72 65 73 65 6e 74 3a 0d 0a   ttDocPresent:..
3e00: 09 09 09 09 69 66 28 31 20 3d 3d 20 73 69 7a 65  ....if(1 == size
3e10: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 74  )......{.......t
3e20: 79 70 65 20 3d 20 74 74 44 6f 63 50 72 65 73 65  ype = ttDocPrese
3e30: 6e 74 3b 0d 0a 09 09 09 09 09 74 79 70 65 46 6f  nt;.......typeFo
3e40: 72 56 54 43 6f 6c 75 6d 6e 2e 74 79 70 65 20 3d  rVTColumn.type =
3e50: 20 74 79 70 65 53 74 72 69 6e 67 3b 0d 0a 09 09   typeString;....
3e60: 09 09 7d 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d  ..}......break;.
3e70: 0a 09 09 09 63 61 73 65 20 74 74 45 6e 75 6d 3a  ....case ttEnum:
3e80: 0d 0a 09 09 09 09 69 66 28 31 20 3d 3d 20 73 69  ......if(1 == si
3e90: 7a 65 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09  ze)......{......
3ea0: 09 74 79 70 65 20 3d 20 74 74 45 6e 75 6d 3b 0d  .type = ttEnum;.
3eb0: 0a 09 09 09 09 09 74 79 70 65 46 6f 72 56 54 43  ......typeForVTC
3ec0: 6f 6c 75 6d 6e 2e 74 79 70 65 20 3d 20 74 79 70  olumn.type = typ
3ed0: 65 45 6e 75 6d 3b 0d 0a 09 09 09 09 7d 0d 0a 09  eEnum;......}...
3ee0: 09 09 09 65 6c 73 65 20 69 66 28 32 20 3d 3d 20  ...else if(2 == 
3ef0: 73 69 7a 65 29 0d 0a 09 09 09 09 7b 0d 0a 09 09  size)......{....
3f00: 09 09 09 43 45 6e 75 6d 44 65 66 2a 20 70 44 65  ...CEnumDef* pDe
3f10: 66 20 3d 20 70 4d 65 74 61 44 61 74 61 43 6f 6e  f = pMetaDataCon
3f20: 74 2d 3e 47 65 74 45 6e 75 6d 44 65 66 28 73 74  t->GetEnumDef(st
3f30: 72 54 79 70 65 73 5b 31 5d 29 3b 0d 0a 09 09 09  rTypes[1]);.....
3f40: 09 09 69 66 28 70 44 65 66 29 0d 0a 09 09 09 09  ..if(pDef)......
3f50: 09 7b 0d 0a 09 09 09 09 09 09 74 79 70 65 20 3d  .{........type =
3f60: 20 74 74 45 6e 75 6d 4f 6e 65 3b 0d 0a 09 09 09   ttEnumOne;.....
3f70: 09 09 09 74 79 70 65 46 6f 72 56 54 43 6f 6c 75  ...typeForVTColu
3f80: 6d 6e 2e 74 79 70 65 20 3d 20 74 79 70 65 45 6e  mn.type = typeEn
3f90: 75 6d 3b 0d 0a 09 09 09 09 09 09 74 79 70 65 46  um;........typeF
3fa0: 6f 72 56 54 43 6f 6c 75 6d 6e 2e 6d 5f 6d 64 69  orVTColumn.m_mdi
3fb0: 64 20 3d 20 70 44 65 66 2d 3e 6d 5f 49 44 3b 0d  d = pDef->m_ID;.
3fc0: 0a 09 09 09 09 09 7d 0d 0a 09 09 09 09 7d 0d 0a  ......}......}..
3fd0: 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 63  ....break;.....c
3fe0: 61 73 65 20 74 74 41 63 63 6f 75 6e 74 3a 0d 0a  ase ttAccount:..
3ff0: 09 09 09 09 69 66 28 31 20 3d 3d 20 73 69 7a 65  ....if(1 == size
4000: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 74  )......{.......t
4010: 79 70 65 20 3d 20 74 74 41 63 63 6f 75 6e 74 3b  ype = ttAccount;
4020: 0d 0a 09 09 09 09 09 74 79 70 65 46 6f 72 56 54  .......typeForVT
4030: 43 6f 6c 75 6d 6e 2e 74 79 70 65 20 3d 20 74 79  Column.type = ty
4040: 70 65 41 63 63 6f 75 6e 74 3b 0d 0a 09 09 09 09  peAccount;......
4050: 7d 0d 0a 09 09 09 09 65 6c 73 65 20 69 66 28 32  }......else if(2
4060: 20 3d 3d 20 73 69 7a 65 29 0d 0a 09 09 09 09 7b   == size)......{
4070: 0d 0a 09 09 09 09 09 43 42 75 68 44 65 66 2a 20  .......CBuhDef* 
4080: 70 44 65 66 20 3d 20 70 4d 65 74 61 44 61 74 61  pDef = pMetaData
4090: 43 6f 6e 74 2d 3e 47 65 74 42 75 68 44 65 66 28  Cont->GetBuhDef(
40a0: 29 3b 0d 0a 09 09 09 09 09 69 66 28 70 44 65 66  );.......if(pDef
40b0: 29 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09 09  ).......{.......
40c0: 09 43 50 6c 61 6e 44 65 66 2a 20 70 50 6c 61 6e  .CPlanDef* pPlan
40d0: 20 3d 20 70 44 65 66 2d 3e 47 65 74 50 6c 61 6e   = pDef->GetPlan
40e0: 44 65 66 28 73 74 72 54 79 70 65 73 5b 31 5d 29  Def(strTypes[1])
40f0: 3b 0d 0a 09 09 09 09 09 09 69 66 28 70 50 6c 61  ;........if(pPla
4100: 6e 29 0d 0a 09 09 09 09 09 09 7b 0d 0a 09 09 09  n)........{.....
4110: 09 09 09 09 74 79 70 65 20 3d 20 74 74 41 63 63  ....type = ttAcc
4120: 6f 75 6e 74 4f 6e 65 3b 0d 0a 09 09 09 09 09 09  ountOne;........
4130: 09 74 79 70 65 46 6f 72 56 54 43 6f 6c 75 6d 6e  .typeForVTColumn
4140: 2e 74 79 70 65 20 3d 20 74 79 70 65 41 63 63 6f  .type = typeAcco
4150: 75 6e 74 3b 0d 0a 09 09 09 09 09 09 09 74 79 70  unt;.........typ
4160: 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 6d 5f 6d  eForVTColumn.m_m
4170: 64 69 64 20 3d 20 70 50 6c 61 6e 2d 3e 6d 5f 49  did = pPlan->m_I
4180: 44 3b 0d 0a 09 09 09 09 09 09 7d 0d 0a 09 09 09  D;........}.....
4190: 09 09 7d 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09  ..}......}......
41a0: 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 65 20  break;.....case 
41b0: 74 74 55 6e 64 65 66 69 6e 65 3a 0d 0a 09 09 09  ttUndefine:.....
41c0: 09 69 66 28 31 20 3d 3d 20 73 69 7a 65 29 0d 0a  .if(1 == size)..
41d0: 09 09 09 09 09 74 79 70 65 20 3d 20 74 74 55 6e  .....type = ttUn
41e0: 64 65 66 69 6e 65 3b 0d 0a 09 09 09 09 62 72 65  define;......bre
41f0: 61 6b 3b 0d 0a 09 09 09 63 61 73 65 20 74 74 43  ak;.....case ttC
4200: 61 6c 63 4b 69 6e 64 3a 0d 0a 09 09 09 09 69 66  alcKind:......if
4210: 28 31 20 3d 3d 20 73 69 7a 65 29 0d 0a 09 09 09  (1 == size).....
4220: 09 7b 0d 0a 09 09 09 09 09 74 79 70 65 20 3d 20  .{.......type = 
4230: 74 74 43 61 6c 63 4b 69 6e 64 3b 0d 0a 09 09 09  ttCalcKind;.....
4240: 09 09 74 79 70 65 46 6f 72 56 54 43 6f 6c 75 6d  ..typeForVTColum
4250: 6e 2e 74 79 70 65 20 3d 20 74 79 70 65 43 61 6c  n.type = typeCal
4260: 63 4b 69 6e 64 3b 0d 0a 09 09 09 09 7d 0d 0a 09  cKind;......}...
4270: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61  ...break;.....ca
4280: 73 65 20 74 74 43 61 6c 65 6e 64 61 72 3a 0d 0a  se ttCalendar:..
4290: 09 09 09 09 69 66 28 31 20 3d 3d 20 73 69 7a 65  ....if(1 == size
42a0: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 74  )......{.......t
42b0: 79 70 65 20 3d 20 74 74 43 61 6c 65 6e 64 61 72  ype = ttCalendar
42c0: 3b 0d 0a 09 09 09 09 09 74 79 70 65 46 6f 72 56  ;.......typeForV
42d0: 54 43 6f 6c 75 6d 6e 2e 74 79 70 65 20 3d 20 74  TColumn.type = t
42e0: 79 70 65 43 61 6c 65 6e 64 61 72 3b 0d 0a 09 09  ypeCalendar;....
42f0: 09 09 7d 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d  ..}......break;.
4300: 0a 09 09 09 63 61 73 65 20 74 74 53 75 62 63 6f  ....case ttSubco
4310: 6e 74 6f 3a 0d 0a 09 09 09 09 69 66 28 31 20 3d  nto:......if(1 =
4320: 3d 20 73 69 7a 65 29 0d 0a 09 09 09 09 7b 0d 0a  = size)......{..
4330: 09 09 09 09 09 74 79 70 65 20 3d 20 74 74 53 75  .....type = ttSu
4340: 62 63 6f 6e 74 6f 3b 0d 0a 09 09 09 09 09 74 79  bconto;.......ty
4350: 70 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 74 79  peForVTColumn.ty
4360: 70 65 20 3d 20 74 79 70 65 55 6e 64 65 66 69 6e  pe = typeUndefin
4370: 65 64 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09  ed;......}......
4380: 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 65 20  break;.....case 
4390: 74 74 54 69 6d 65 3a 0d 0a 09 09 09 09 69 66 28  ttTime:......if(
43a0: 31 20 3d 3d 20 73 69 7a 65 29 0d 0a 09 09 09 09  1 == size)......
43b0: 7b 0d 0a 09 09 09 09 09 74 79 70 65 20 3d 20 74  {.......type = t
43c0: 74 54 69 6d 65 3b 0d 0a 09 09 09 09 09 74 79 70  tTime;.......typ
43d0: 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 74 79 70  eForVTColumn.typ
43e0: 65 20 3d 20 32 3b 0d 0a 09 09 09 09 09 74 79 70  e = 2;.......typ
43f0: 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 6d 5f 6c  eForVTColumn.m_l
4400: 65 6e 67 74 68 20 3d 20 38 3b 0d 0a 09 09 09 09  ength = 8;......
4410: 7d 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09  }......break;...
4420: 09 09 63 61 73 65 20 74 74 4b 69 6e 64 4e 61 6d  ..case ttKindNam
4430: 65 3a 0d 0a 09 09 09 09 69 66 28 31 20 3d 3d 20  e:......if(1 == 
4440: 73 69 7a 65 29 0d 0a 09 09 09 09 7b 0d 0a 09 09  size)......{....
4450: 09 09 09 74 79 70 65 20 3d 20 74 74 4b 69 6e 64  ...type = ttKind
4460: 4e 61 6d 65 3b 0d 0a 09 09 09 09 09 74 79 70 65  Name;.......type
4470: 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 74 79 70 65  ForVTColumn.type
4480: 20 3d 20 74 79 70 65 53 74 72 69 6e 67 3b 0d 0a   = typeString;..
4490: 09 09 09 09 7d 0d 0a 09 09 09 09 62 72 65 61 6b  ....}......break
44a0: 3b 0d 0a 09 09 09 63 61 73 65 20 74 74 4b 69 6e  ;.....case ttKin
44b0: 64 50 72 65 73 65 6e 74 3a 0d 0a 09 09 09 09 69  dPresent:......i
44c0: 66 28 31 20 3d 3d 20 73 69 7a 65 29 0d 0a 09 09  f(1 == size)....
44d0: 09 09 7b 0d 0a 09 09 09 09 09 74 79 70 65 20 3d  ..{.......type =
44e0: 20 74 74 4b 69 6e 64 50 72 65 73 65 6e 74 3b 0d   ttKindPresent;.
44f0: 0a 09 09 09 09 09 74 79 70 65 46 6f 72 56 54 43  ......typeForVTC
4500: 6f 6c 75 6d 6e 2e 74 79 70 65 20 3d 20 74 79 70  olumn.type = typ
4510: 65 53 74 72 69 6e 67 3b 0d 0a 09 09 09 09 7d 0d  eString;......}.
4520: 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09  .....break;.....
4530: 63 61 73 65 20 74 74 53 75 62 63 4b 69 6e 64 3a  case ttSubcKind:
4540: 0d 0a 09 09 09 09 69 66 28 31 20 3d 3d 20 73 69  ......if(1 == si
4550: 7a 65 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09  ze)......{......
4560: 09 74 79 70 65 20 3d 20 74 74 53 75 62 63 4b 69  .type = ttSubcKi
4570: 6e 64 3b 0d 0a 09 09 09 09 09 74 79 70 65 46 6f  nd;.......typeFo
4580: 72 56 54 43 6f 6c 75 6d 6e 2e 74 79 70 65 20 3d  rVTColumn.type =
4590: 20 74 79 70 65 53 74 72 69 6e 67 3b 0d 0a 09 09   typeString;....
45a0: 09 09 7d 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d  ..}......break;.
45b0: 0a 09 09 09 63 61 73 65 20 74 74 53 75 62 63 50  ....case ttSubcP
45c0: 72 65 73 65 6e 74 3a 0d 0a 09 09 09 09 69 66 28  resent:......if(
45d0: 31 20 3d 3d 20 73 69 7a 65 29 0d 0a 09 09 09 09  1 == size)......
45e0: 7b 0d 0a 09 09 09 09 09 74 79 70 65 20 3d 20 74  {.......type = t
45f0: 74 53 75 62 63 50 72 65 73 65 6e 74 3b 0d 0a 09  tSubcPresent;...
4600: 09 09 09 09 74 79 70 65 46 6f 72 56 54 43 6f 6c  ....typeForVTCol
4610: 75 6d 6e 2e 74 79 70 65 20 3d 20 74 79 70 65 53  umn.type = typeS
4620: 74 72 69 6e 67 3b 0d 0a 09 09 09 09 7d 0d 0a 09  tring;......}...
4630: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 7d 0d  ...break;.....}.
4640: 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d  ...}...}...else.
4650: 0a 09 09 74 79 70 65 20 3d 20 74 74 41 73 49 73  ...type = ttAsIs
4660: 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 76 6f 69 64 20 53  ;..}......void S
4670: 51 4c 69 74 65 51 75 65 72 79 3a 3a 63 6f 6c 75  QLiteQuery::colu
4680: 6d 6e 5f 69 6e 66 6f 3a 3a 74 6f 56 61 6c 75 65  mn_info::toValue
4690: 28 73 71 6c 69 74 65 33 5f 73 74 6d 74 2a 20 70  (sqlite3_stmt* p
46a0: 53 74 6d 74 2c 20 43 56 61 6c 75 65 2a 20 70 56  Stmt, CValue* pV
46b0: 61 6c 75 65 29 0d 0a 7b 0d 0a 09 70 56 61 6c 75  alue)..{...pValu
46c0: 65 2d 3e 52 65 73 65 74 28 29 3b 0d 0a 09 69 6e  e->Reset();...in
46d0: 74 20 74 79 70 65 4f 66 44 61 74 61 20 3d 20 73  t typeOfData = s
46e0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 79  qlite3_column_ty
46f0: 70 65 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e  pe(pStmt, column
4700: 29 3b 0d 0a 09 69 66 28 53 51 4c 49 54 45 5f 4e  );...if(SQLITE_N
4710: 55 4c 4c 20 3d 3d 20 74 79 70 65 4f 66 44 61 74  ULL == typeOfDat
4720: 61 29 0d 0a 09 7b 0d 0a 09 09 73 77 69 74 63 68  a)...{....switch
4730: 28 74 79 70 65 29 0d 0a 09 09 7b 0d 0a 09 09 63  (type)....{....c
4740: 61 73 65 20 74 74 4e 75 6d 62 65 72 3a 0d 0a 09  ase ttNumber:...
4750: 09 09 2a 70 56 61 6c 75 65 20 3d 20 30 4c 3b 0d  ..*pValue = 0L;.
4760: 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61  ....break;....ca
4770: 73 65 20 74 74 53 74 72 69 6e 67 3a 0d 0a 09 09  se ttString:....
4780: 63 61 73 65 20 74 74 44 6f 63 4b 69 6e 64 3a 0d  case ttDocKind:.
4790: 0a 09 09 63 61 73 65 20 74 74 44 6f 63 50 72 65  ...case ttDocPre
47a0: 73 65 6e 74 3a 0d 0a 09 09 63 61 73 65 20 74 74  sent:....case tt
47b0: 54 69 6d 65 3a 0d 0a 09 09 63 61 73 65 20 74 74  Time:....case tt
47c0: 4b 69 6e 64 4e 61 6d 65 3a 0d 0a 09 09 63 61 73  KindName:....cas
47d0: 65 20 74 74 4b 69 6e 64 50 72 65 73 65 6e 74 3a  e ttKindPresent:
47e0: 0d 0a 09 09 63 61 73 65 20 74 74 53 75 62 63 4b  ....case ttSubcK
47f0: 69 6e 64 3a 0d 0a 09 09 63 61 73 65 20 74 74 53  ind:....case ttS
4800: 75 62 63 50 72 65 73 65 6e 74 3a 0d 0a 09 09 09  ubcPresent:.....
4810: 2a 70 56 61 6c 75 65 20 3d 20 22 22 3b 0d 0a 09  *pValue = "";...
4820: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65  ..break;....case
4830: 20 74 74 44 61 74 65 3a 0d 0a 09 09 09 2a 70 56   ttDate:.....*pV
4840: 61 6c 75 65 20 3d 20 43 44 61 74 65 28 30 2c 20  alue = CDate(0, 
4850: 30 2c 20 30 29 3b 0d 0a 09 09 09 62 72 65 61 6b  0, 0);.....break
4860: 3b 0d 0a 09 09 63 61 73 65 20 74 74 52 65 66 65  ;....case ttRefe
4870: 72 65 6e 63 65 3a 0d 0a 09 09 09 70 56 61 6c 75  rence:.....pValu
4880: 65 2d 3e 74 79 70 65 20 3d 20 74 79 70 65 52 65  e->type = typeRe
4890: 66 65 72 65 6e 63 65 3b 0d 0a 09 09 09 62 72 65  ference;.....bre
48a0: 61 6b 3b 0d 0a 09 09 63 61 73 65 20 74 74 52 65  ak;....case ttRe
48b0: 66 65 72 65 6e 63 65 4f 6e 65 3a 0d 0a 09 09 09  ferenceOne:.....
48c0: 70 56 61 6c 75 65 2d 3e 74 79 70 65 20 3d 20 74  pValue->type = t
48d0: 79 70 65 52 65 66 65 72 65 6e 63 65 3b 0d 0a 09  ypeReference;...
48e0: 09 09 70 56 61 6c 75 65 2d 3e 6d 5f 6d 64 69 64  ..pValue->m_mdid
48f0: 20 3d 20 74 79 70 65 46 6f 72 56 54 43 6f 6c 75   = typeForVTColu
4900: 6d 6e 2e 6d 5f 6d 64 69 64 3b 0d 0a 09 09 09 62  mn.m_mdid;.....b
4910: 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 74 74  reak;....case tt
4920: 44 6f 63 75 6d 65 6e 74 3a 0d 0a 09 09 63 61 73  Document:....cas
4930: 65 20 74 74 44 6f 63 75 6d 65 6e 74 57 69 74 68  e ttDocumentWith
4940: 4c 69 6e 6b 3a 0d 0a 09 09 09 70 56 61 6c 75 65  Link:.....pValue
4950: 2d 3e 74 79 70 65 20 3d 20 74 79 70 65 44 6f 63  ->type = typeDoc
4960: 75 6d 65 6e 74 3b 0d 0a 09 09 09 62 72 65 61 6b  ument;.....break
4970: 3b 0d 0a 09 09 63 61 73 65 20 74 74 44 6f 63 75  ;....case ttDocu
4980: 6d 65 6e 74 4f 6e 65 3a 0d 0a 09 09 09 70 56 61  mentOne:.....pVa
4990: 6c 75 65 2d 3e 74 79 70 65 20 3d 20 74 79 70 65  lue->type = type
49a0: 44 6f 63 75 6d 65 6e 74 3b 0d 0a 09 09 09 70 56  Document;.....pV
49b0: 61 6c 75 65 2d 3e 6d 5f 6d 64 69 64 20 3d 20 74  alue->m_mdid = t
49c0: 79 70 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 6d  ypeForVTColumn.m
49d0: 5f 6d 64 69 64 3b 0d 0a 09 09 09 62 72 65 61 6b  _mdid;.....break
49e0: 3b 0d 0a 09 09 63 61 73 65 20 74 74 45 6e 75 6d  ;....case ttEnum
49f0: 3a 0d 0a 09 09 09 70 56 61 6c 75 65 2d 3e 74 79  :.....pValue->ty
4a00: 70 65 20 3d 20 74 79 70 65 45 6e 75 6d 3b 0d 0a  pe = typeEnum;..
4a10: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73  ...break;....cas
4a20: 65 20 74 74 45 6e 75 6d 4f 6e 65 3a 0d 0a 09 09  e ttEnumOne:....
4a30: 09 70 56 61 6c 75 65 2d 3e 74 79 70 65 20 3d 20  .pValue->type = 
4a40: 74 79 70 65 45 6e 75 6d 3b 0d 0a 09 09 09 70 56  typeEnum;.....pV
4a50: 61 6c 75 65 2d 3e 6d 5f 6d 64 69 64 20 3d 20 74  alue->m_mdid = t
4a60: 79 70 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 6d  ypeForVTColumn.m
4a70: 5f 6d 64 69 64 3b 0d 0a 09 09 09 62 72 65 61 6b  _mdid;.....break
4a80: 3b 0d 0a 09 09 63 61 73 65 20 74 74 41 63 63 6f  ;....case ttAcco
4a90: 75 6e 74 3a 0d 0a 09 09 09 70 56 61 6c 75 65 2d  unt:.....pValue-
4aa0: 3e 74 79 70 65 20 3d 20 74 79 70 65 41 63 63 6f  >type = typeAcco
4ab0: 75 6e 74 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d  unt;.....break;.
4ac0: 0a 09 09 63 61 73 65 20 74 74 41 63 63 6f 75 6e  ...case ttAccoun
4ad0: 74 4f 6e 65 3a 0d 0a 09 09 09 70 56 61 6c 75 65  tOne:.....pValue
4ae0: 2d 3e 74 79 70 65 20 3d 20 74 79 70 65 41 63 63  ->type = typeAcc
4af0: 6f 75 6e 74 3b 0d 0a 09 09 09 70 56 61 6c 75 65  ount;.....pValue
4b00: 2d 3e 6d 5f 6d 64 69 64 20 3d 20 74 79 70 65 46  ->m_mdid = typeF
4b10: 6f 72 56 54 43 6f 6c 75 6d 6e 2e 6d 5f 6d 64 69  orVTColumn.m_mdi
4b20: 64 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09  d;.....break;...
4b30: 09 63 61 73 65 20 74 74 43 61 6c 63 4b 69 6e 64  .case ttCalcKind
4b40: 3a 0d 0a 09 09 09 70 56 61 6c 75 65 2d 3e 74 79  :.....pValue->ty
4b50: 70 65 20 3d 20 74 79 70 65 43 61 6c 63 4b 69 6e  pe = typeCalcKin
4b60: 64 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09  d;.....break;...
4b70: 09 63 61 73 65 20 74 74 43 61 6c 65 6e 64 61 72  .case ttCalendar
4b80: 3a 0d 0a 09 09 09 70 56 61 6c 75 65 2d 3e 74 79  :.....pValue->ty
4b90: 70 65 20 3d 20 74 79 70 65 43 61 6c 65 6e 64 61  pe = typeCalenda
4ba0: 72 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09  r;.....break;...
4bb0: 09 7d 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09  .}....return;...
4bc0: 7d 0d 0a 09 0d 0a 09 73 74 61 74 69 63 20 43 53  }......static CS
4bd0: 74 72 69 6e 67 20 63 6f 6c 54 65 78 74 3b 0d 0a  tring colText;..
4be0: 0d 0a 09 73 77 69 74 63 68 28 74 79 70 65 29 0d  ...switch(type).
4bf0: 0a 09 7b 0d 0a 09 63 61 73 65 20 74 74 41 73 49  ..{...case ttAsI
4c00: 73 3a 0d 0a 09 09 73 77 69 74 63 68 28 74 79 70  s:....switch(typ
4c10: 65 4f 66 44 61 74 61 29 0d 0a 09 09 7b 0d 0a 09  eOfData)....{...
4c20: 09 63 61 73 65 20 53 51 4c 49 54 45 5f 49 4e 54  .case SQLITE_INT
4c30: 45 47 45 52 3a 0d 0a 09 09 09 2a 70 56 61 6c 75  EGER:.....*pValu
4c40: 65 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  e = sqlite3_colu
4c50: 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20 63 6f  mn_int(pStmt, co
4c60: 6c 75 6d 6e 29 3b 0d 0a 09 09 09 62 72 65 61 6b  lumn);.....break
4c70: 3b 0d 0a 09 09 63 61 73 65 20 53 51 4c 49 54 45  ;....case SQLITE
4c80: 5f 46 4c 4f 41 54 3a 0d 0a 09 09 09 2a 70 56 61  _FLOAT:.....*pVa
4c90: 6c 75 65 20 3d 20 43 4e 75 6d 65 72 69 63 28 73  lue = CNumeric(s
4ca0: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 6f  qlite3_column_do
4cb0: 75 62 6c 65 28 70 53 74 6d 74 2c 20 63 6f 6c 75  uble(pStmt, colu
4cc0: 6d 6e 29 29 3b 0d 0a 09 09 09 62 72 65 61 6b 3b  mn));.....break;
4cd0: 0d 0a 09 09 63 61 73 65 20 53 51 4c 49 54 45 5f  ....case SQLITE_
4ce0: 42 4c 4f 42 3a 0d 0a 09 09 63 61 73 65 20 53 51  BLOB:....case SQ
4cf0: 4c 49 54 45 5f 54 45 58 54 3a 0d 0a 09 09 09 2a  LITE_TEXT:.....*
4d00: 70 56 61 6c 75 65 20 3d 20 75 38 74 65 78 74 3a  pValue = u8text:
4d10: 3a 66 72 6f 6d 55 74 66 38 28 28 4c 50 43 53 54  :fromUtf8((LPCST
4d20: 52 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  R)sqlite3_column
4d30: 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 63 6f 6c  _text(pStmt, col
4d40: 75 6d 6e 29 29 3b 0d 0a 09 09 09 62 72 65 61 6b  umn));.....break
4d50: 3b 0d 0a 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b  ;....}....break;
4d60: 0d 0a 09 63 61 73 65 20 74 74 4e 75 6d 62 65 72  ...case ttNumber
4d70: 3a 0d 0a 09 09 70 56 61 6c 75 65 2d 3e 74 79 70  :....pValue->typ
4d80: 65 20 3d 20 74 79 70 65 4e 75 6d 62 65 72 3b 0d  e = typeNumber;.
4d90: 0a 09 09 70 56 61 6c 75 65 2d 3e 6d 5f 6c 65 6e  ...pValue->m_len
4da0: 67 74 68 20 3d 20 74 79 70 65 46 6f 72 56 54 43  gth = typeForVTC
4db0: 6f 6c 75 6d 6e 2e 6d 5f 6c 65 6e 67 74 68 3b 0d  olumn.m_length;.
4dc0: 0a 09 09 70 56 61 6c 75 65 2d 3e 6d 5f 70 72 65  ...pValue->m_pre
4dd0: 63 20 3d 20 74 79 70 65 46 6f 72 56 54 43 6f 6c  c = typeForVTCol
4de0: 75 6d 6e 2e 6d 5f 70 72 65 63 3b 0d 0a 0d 0a 09  umn.m_prec;.....
4df0: 09 73 77 69 74 63 68 28 74 79 70 65 4f 66 44 61  .switch(typeOfDa
4e00: 74 61 29 0d 0a 09 09 7b 0d 0a 09 09 63 61 73 65  ta)....{....case
4e10: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 3a   SQLITE_INTEGER:
4e20: 0d 0a 09 09 09 70 56 61 6c 75 65 2d 3e 6d 5f 4e  .....pValue->m_N
4e30: 75 6d 62 65 72 20 3d 20 73 71 6c 69 74 65 33 5f  umber = sqlite3_
4e40: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74  column_int(pStmt
4e50: 2c 20 63 6f 6c 75 6d 6e 29 3b 0d 0a 09 09 09 62  , column);.....b
4e60: 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 53 51  reak;....case SQ
4e70: 4c 49 54 45 5f 46 4c 4f 41 54 3a 0d 0a 09 09 09  LITE_FLOAT:.....
4e80: 70 56 61 6c 75 65 2d 3e 6d 5f 4e 75 6d 62 65 72  pValue->m_Number
4e90: 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d   = sqlite3_colum
4ea0: 6e 5f 64 6f 75 62 6c 65 28 70 53 74 6d 74 2c 20  n_double(pStmt, 
4eb0: 63 6f 6c 75 6d 6e 29 3b 0d 0a 09 09 09 62 72 65  column);.....bre
4ec0: 61 6b 3b 0d 0a 09 09 64 65 66 61 75 6c 74 3a 0d  ak;....default:.
4ed0: 0a 09 09 09 70 56 61 6c 75 65 2d 3e 6d 5f 4e 75  ....pValue->m_Nu
4ee0: 6d 62 65 72 2e 46 72 6f 6d 53 74 72 69 6e 67 28  mber.FromString(
4ef0: 28 4c 50 43 53 54 52 29 73 71 6c 69 74 65 33 5f  (LPCSTR)sqlite3_
4f00: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
4f10: 74 2c 20 63 6f 6c 75 6d 6e 29 2c 20 4e 55 4c 4c  t, column), NULL
4f20: 29 3b 0d 0a 09 09 7d 0d 0a 09 09 69 66 28 70 56  );....}....if(pV
4f30: 61 6c 75 65 2d 3e 6d 5f 6c 65 6e 67 74 68 20 26  alue->m_length &
4f40: 26 20 74 79 70 65 4f 66 44 61 74 61 20 21 3d 20  & typeOfData != 
4f50: 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 29 0d  SQLITE_INTEGER).
4f60: 0a 09 09 09 70 56 61 6c 75 65 2d 3e 6d 5f 4e 75  ....pValue->m_Nu
4f70: 6d 62 65 72 2e 46 72 6f 6d 53 74 72 69 6e 67 28  mber.FromString(
4f80: 70 56 61 6c 75 65 2d 3e 46 6f 72 6d 61 74 28 29  pValue->Format()
4f90: 2c 20 4e 55 4c 4c 29 3b 0d 0a 09 09 62 72 65 61  , NULL);....brea
4fa0: 6b 3b 0d 0a 09 63 61 73 65 20 74 74 53 74 72 69  k;...case ttStri
4fb0: 6e 67 3a 0d 0a 09 09 2a 70 56 61 6c 75 65 20 3d  ng:....*pValue =
4fc0: 20 75 38 74 65 78 74 3a 3a 66 72 6f 6d 55 74 66   u8text::fromUtf
4fd0: 38 28 28 4c 50 43 53 54 52 29 73 71 6c 69 74 65  8((LPCSTR)sqlite
4fe0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53  3_column_text(pS
4ff0: 74 6d 74 2c 20 63 6f 6c 75 6d 6e 29 29 3b 0d 0a  tmt, column));..
5000: 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20  ..break;...case 
5010: 74 74 44 61 74 65 3a 09 2f 2f 20 e8 e7 20 75 74  ttDate:.// .. ut
5020: 66 2d 38 20 ed e5 20 ef f0 e5 ee e1 f0 e0 e7 f3  f-8 .. .........
5030: e5 ec 2c 20 f2 ea 20 f2 e0 ec 20 e4 ee eb e6 ed  .., .. ... .....
5040: fb 20 e1 fb f2 fc 20 f2 ee ea e0 20 f6 e8 f4 f0  . .... .... ....
5050: fb 0d 0a 09 09 69 66 28 53 51 4c 49 54 45 5f 54  .....if(SQLITE_T
5060: 45 58 54 20 3d 3d 20 74 79 70 65 4f 66 44 61 74  EXT == typeOfDat
5070: 61 29 0d 0a 09 09 7b 0d 0a 09 09 09 63 6f 6c 54  a)....{.....colT
5080: 65 78 74 20 3d 20 28 4c 50 43 53 54 52 29 73 71  ext = (LPCSTR)sq
5090: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
50a0: 74 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e 29  t(pStmt, column)
50b0: 3b 0d 0a 09 09 09 69 66 28 63 6f 6c 54 65 78 74  ;.....if(colText
50c0: 2e 47 65 74 4c 65 6e 67 74 68 28 29 20 3d 3d 20  .GetLength() == 
50d0: 38 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 63 6f  8).....{......co
50e0: 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
50f0: 72 2a 20 70 74 72 20 3d 20 28 63 6f 6e 73 74 20  r* ptr = (const 
5100: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 28  unsigned char*)(
5110: 4c 50 43 53 54 52 29 63 6f 6c 54 65 78 74 3b 0d  LPCSTR)colText;.
5120: 0a 09 09 09 09 2a 70 56 61 6c 75 65 20 3d 20 43  .....*pValue = C
5130: 44 61 74 65 28 73 74 72 32 64 65 63 28 70 74 72  Date(str2dec(ptr
5140: 2c 20 34 29 2c 20 73 74 72 32 64 65 63 28 70 74  , 4), str2dec(pt
5150: 72 20 2b 20 34 2c 20 32 29 2c 20 73 74 72 32 64  r + 4, 2), str2d
5160: 65 63 28 70 74 72 20 2b 20 36 2c 20 32 29 29 3b  ec(ptr + 6, 2));
5170: 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 62  .....}....}....b
5180: 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 74 74 52  reak;...case ttR
5190: 65 66 65 72 65 6e 63 65 3a 0d 0a 09 09 69 66 28  eference:....if(
51a0: 53 51 4c 49 54 45 5f 54 45 58 54 20 3d 3d 20 74  SQLITE_TEXT == t
51b0: 79 70 65 4f 66 44 61 74 61 29 0d 0a 09 09 7b 0d  ypeOfData)....{.
51c0: 0a 09 09 09 75 38 74 65 78 74 3a 3a 66 72 6f 6d  ....u8text::from
51d0: 55 74 66 38 28 28 4c 50 43 53 54 52 29 73 71 6c  Utf8((LPCSTR)sql
51e0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
51f0: 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e 29 2c  (pStmt, column),
5200: 20 63 6f 6c 54 65 78 74 29 3b 0d 0a 09 09 09 69   colText);.....i
5210: 66 28 63 6f 6c 54 65 78 74 2e 47 65 74 4c 65 6e  f(colText.GetLen
5220: 67 74 68 28 29 20 3d 3d 20 31 33 29 0d 0a 09 09  gth() == 13)....
5230: 09 09 56 61 6c 75 65 53 74 72 57 6f 72 6b 3c 74  ..ValueStrWork<t
5240: 6f 73 31 33 3e 3a 3a 73 74 72 32 76 61 6c 28 70  os13>::str2val(p
5250: 56 61 6c 75 65 2c 20 63 6f 6c 54 65 78 74 2c 20  Value, colText, 
5260: 74 79 70 65 52 65 66 65 72 65 6e 63 65 29 3b 0d  typeReference);.
5270: 0a 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a  ...}....break;..
5280: 09 63 61 73 65 20 74 74 52 65 66 65 72 65 6e 63  .case ttReferenc
5290: 65 4f 6e 65 3a 0d 0a 09 09 69 66 28 53 51 4c 49  eOne:....if(SQLI
52a0: 54 45 5f 54 45 58 54 20 3d 3d 20 74 79 70 65 4f  TE_TEXT == typeO
52b0: 66 44 61 74 61 29 0d 0a 09 09 7b 0d 0a 09 09 09  fData)....{.....
52c0: 75 38 74 65 78 74 3a 3a 66 72 6f 6d 55 74 66 38  u8text::fromUtf8
52d0: 28 28 4c 50 43 53 54 52 29 73 71 6c 69 74 65 33  ((LPCSTR)sqlite3
52e0: 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74  _column_text(pSt
52f0: 6d 74 2c 20 63 6f 6c 75 6d 6e 29 2c 20 63 6f 6c  mt, column), col
5300: 54 65 78 74 29 3b 0d 0a 09 09 09 69 66 28 63 6f  Text);.....if(co
5310: 6c 54 65 78 74 2e 47 65 74 4c 65 6e 67 74 68 28  lText.GetLength(
5320: 29 20 3d 3d 20 39 29 0d 0a 09 09 09 09 56 61 6c  ) == 9)......Val
5330: 75 65 53 74 72 57 6f 72 6b 3c 74 6f 73 39 3e 3a  ueStrWork<tos9>:
5340: 3a 73 74 72 32 76 61 6c 28 70 56 61 6c 75 65 2c  :str2val(pValue,
5350: 20 63 6f 6c 54 65 78 74 2c 20 74 79 70 65 52 65   colText, typeRe
5360: 66 65 72 65 6e 63 65 2c 20 74 79 70 65 46 6f 72  ference, typeFor
5370: 56 54 43 6f 6c 75 6d 6e 2e 6d 5f 6d 64 69 64 29  VTColumn.m_mdid)
5380: 3b 0d 0a 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b  ;....}....break;
5390: 0d 0a 09 63 61 73 65 20 74 74 44 6f 63 75 6d 65  ...case ttDocume
53a0: 6e 74 3a 0d 0a 09 09 69 66 28 53 51 4c 49 54 45  nt:....if(SQLITE
53b0: 5f 54 45 58 54 20 3d 3d 20 74 79 70 65 4f 66 44  _TEXT == typeOfD
53c0: 61 74 61 29 0d 0a 09 09 7b 0d 0a 09 09 09 75 38  ata)....{.....u8
53d0: 74 65 78 74 3a 3a 66 72 6f 6d 55 74 66 38 28 28  text::fromUtf8((
53e0: 4c 50 43 53 54 52 29 73 71 6c 69 74 65 33 5f 63  LPCSTR)sqlite3_c
53f0: 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74  olumn_text(pStmt
5400: 2c 20 63 6f 6c 75 6d 6e 29 2c 20 63 6f 6c 54 65  , column), colTe
5410: 78 74 29 3b 0d 0a 09 09 09 69 66 28 63 6f 6c 54  xt);.....if(colT
5420: 65 78 74 2e 47 65 74 4c 65 6e 67 74 68 28 29 20  ext.GetLength() 
5430: 3d 3d 20 31 33 29 0d 0a 09 09 09 09 56 61 6c 75  == 13)......Valu
5440: 65 53 74 72 57 6f 72 6b 3c 74 6f 73 31 33 3e 3a  eStrWork<tos13>:
5450: 3a 73 74 72 32 76 61 6c 28 70 56 61 6c 75 65 2c  :str2val(pValue,
5460: 20 63 6f 6c 54 65 78 74 2c 20 74 79 70 65 44 6f   colText, typeDo
5470: 63 75 6d 65 6e 74 29 3b 0d 0a 09 09 7d 0d 0a 09  cument);....}...
5480: 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 74  .break;...case t
5490: 74 44 6f 63 75 6d 65 6e 74 57 69 74 68 4c 69 6e  tDocumentWithLin
54a0: 6b 3a 0d 0a 09 09 69 66 28 53 51 4c 49 54 45 5f  k:....if(SQLITE_
54b0: 54 45 58 54 20 3d 3d 20 74 79 70 65 4f 66 44 61  TEXT == typeOfDa
54c0: 74 61 29 0d 0a 09 09 7b 0d 0a 09 09 09 75 38 74  ta)....{.....u8t
54d0: 65 78 74 3a 3a 66 72 6f 6d 55 74 66 38 28 28 4c  ext::fromUtf8((L
54e0: 50 43 53 54 52 29 73 71 6c 69 74 65 33 5f 63 6f  PCSTR)sqlite3_co
54f0: 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
5500: 20 63 6f 6c 75 6d 6e 29 2c 20 63 6f 6c 54 65 78   column), colTex
5510: 74 29 3b 0d 0a 09 09 09 69 66 28 63 6f 6c 54 65  t);.....if(colTe
5520: 78 74 2e 47 65 74 4c 65 6e 67 74 68 28 29 20 3d  xt.GetLength() =
5530: 3d 20 39 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09  = 9).....{......
5540: 6c 6f 6e 67 20 6d 64 49 44 20 3d 20 30 3b 0d 0a  long mdID = 0;..
5550: 09 09 09 09 69 66 28 53 51 4c 49 54 45 5f 49 4e  ....if(SQLITE_IN
5560: 54 45 47 45 52 20 3d 3d 20 73 71 6c 69 74 65 33  TEGER == sqlite3
5570: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74  _column_type(pSt
5580: 6d 74 2c 20 6c 69 6e 6b 65 64 46 69 65 6c 64 2d  mt, linkedField-
5590: 3e 63 6f 6c 75 6d 6e 29 29 0d 0a 09 09 09 09 09  >column)).......
55a0: 6d 64 49 44 20 3d 20 73 71 6c 69 74 65 33 5f 63  mdID = sqlite3_c
55b0: 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c  olumn_int(pStmt,
55c0: 20 6c 69 6e 6b 65 64 46 69 65 6c 64 2d 3e 63 6f   linkedField->co
55d0: 6c 75 6d 6e 29 3b 0d 0a 09 09 09 09 65 6c 73 65  lumn);......else
55e0: 0d 0a 09 09 09 09 09 6d 64 49 44 20 3d 20 73 74  .......mdID = st
55f0: 72 32 69 64 28 73 71 6c 69 74 65 33 5f 63 6f 6c  r2id(sqlite3_col
5600: 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  umn_text(pStmt, 
5610: 6c 69 6e 6b 65 64 46 69 65 6c 64 2d 3e 63 6f 6c  linkedField->col
5620: 75 6d 6e 29 2c 20 34 29 3b 0d 0a 09 09 09 09 69  umn), 4);......i
5630: 66 28 6d 64 49 44 29 0d 0a 09 09 09 09 09 56 61  f(mdID).......Va
5640: 6c 75 65 53 74 72 57 6f 72 6b 3c 74 6f 73 39 3e  lueStrWork<tos9>
5650: 3a 3a 73 74 72 32 76 61 6c 28 70 56 61 6c 75 65  ::str2val(pValue
5660: 2c 20 63 6f 6c 54 65 78 74 2c 20 74 79 70 65 44  , colText, typeD
5670: 6f 63 75 6d 65 6e 74 2c 20 6d 64 49 44 29 3b 0d  ocument, mdID);.
5680: 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 62 72  ....}....}....br
5690: 65 61 6b 3b 0d 0a 09 63 61 73 65 20 74 74 44 6f  eak;...case ttDo
56a0: 63 75 6d 65 6e 74 4f 6e 65 3a 0d 0a 09 09 69 66  cumentOne:....if
56b0: 28 53 51 4c 49 54 45 5f 54 45 58 54 20 3d 3d 20  (SQLITE_TEXT == 
56c0: 74 79 70 65 4f 66 44 61 74 61 29 0d 0a 09 09 7b  typeOfData)....{
56d0: 0d 0a 09 09 09 75 38 74 65 78 74 3a 3a 66 72 6f  .....u8text::fro
56e0: 6d 55 74 66 38 28 28 4c 50 43 53 54 52 29 73 71  mUtf8((LPCSTR)sq
56f0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
5700: 74 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e 29  t(pStmt, column)
5710: 2c 20 63 6f 6c 54 65 78 74 29 3b 0d 0a 09 09 09  , colText);.....
5720: 69 66 28 63 6f 6c 54 65 78 74 2e 47 65 74 4c 65  if(colText.GetLe
5730: 6e 67 74 68 28 29 20 3d 3d 20 39 29 0d 0a 09 09  ngth() == 9)....
5740: 09 09 56 61 6c 75 65 53 74 72 57 6f 72 6b 3c 74  ..ValueStrWork<t
5750: 6f 73 39 3e 3a 3a 73 74 72 32 76 61 6c 28 70 56  os9>::str2val(pV
5760: 61 6c 75 65 2c 20 63 6f 6c 54 65 78 74 2c 20 74  alue, colText, t
5770: 79 70 65 44 6f 63 75 6d 65 6e 74 2c 20 74 79 70  ypeDocument, typ
5780: 65 46 6f 72 56 54 43 6f 6c 75 6d 6e 2e 6d 5f 6d  eForVTColumn.m_m
5790: 64 69 64 29 3b 0d 0a 09 09 7d 0d 0a 09 09 62 72  did);....}....br
57a0: 65 61 6b 3b 0d 0a 09 63 61 73 65 20 74 74 44 6f  eak;...case ttDo
57b0: 63 4b 69 6e 64 3a 0d 0a 09 09 7b 0d 0a 09 09 09  cKind:....{.....
57c0: 6c 6f 6e 67 20 69 64 20 3d 20 30 3b 0d 0a 09 09  long id = 0;....
57d0: 09 69 66 28 53 51 4c 49 54 45 5f 49 4e 54 45 47  .if(SQLITE_INTEG
57e0: 45 52 20 3d 3d 20 73 71 6c 69 74 65 33 5f 63 6f  ER == sqlite3_co
57f0: 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c  lumn_type(pStmt,
5800: 20 63 6f 6c 75 6d 6e 29 29 0d 0a 09 09 09 09 69   column))......i
5810: 64 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  d = sqlite3_colu
5820: 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20 63 6f  mn_int(pStmt, co
5830: 6c 75 6d 6e 29 3b 0d 0a 09 09 09 65 6c 73 65 0d  lumn);.....else.
5840: 0a 09 09 09 09 69 64 20 3d 20 73 74 72 32 69 64  .....id = str2id
5850: 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  (sqlite3_column_
5860: 74 65 78 74 28 70 53 74 6d 74 2c 20 63 6f 6c 75  text(pStmt, colu
5870: 6d 6e 29 2c 20 34 29 3b 0d 0a 09 09 09 69 66 28  mn), 4);.....if(
5880: 69 64 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69  id).....{......i
5890: 66 28 43 4d 65 74 61 44 61 74 61 4f 62 6a 41 72  f(CMetaDataObjAr
58a0: 72 61 79 2a 20 70 44 6f 63 73 20 3d 20 70 4d 65  ray* pDocs = pMe
58b0: 74 61 44 61 74 61 43 6f 6e 74 2d 3e 47 65 74 44  taDataCont->GetD
58c0: 6f 63 44 65 66 73 28 29 29 0d 0a 09 09 09 09 7b  ocDefs())......{
58d0: 0d 0a 09 09 09 09 09 69 66 28 43 4d 65 74 61 44  .......if(CMetaD
58e0: 61 74 61 4f 62 6a 2a 20 70 4f 62 6a 20 3d 20 70  ataObj* pObj = p
58f0: 44 6f 63 73 2d 3e 47 65 74 49 74 65 6d 28 69 64  Docs->GetItem(id
5900: 29 29 0d 0a 09 09 09 09 09 09 2a 70 56 61 6c 75  ))........*pValu
5910: 65 20 3d 20 70 4f 62 6a 2d 3e 6d 5f 43 6f 64 65  e = pObj->m_Code
5920: 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a  ;......}.....}..
5930: 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09  ..}....break;...
5940: 63 61 73 65 20 74 74 44 6f 63 50 72 65 73 65 6e  case ttDocPresen
5950: 74 3a 0d 0a 09 09 7b 0d 0a 09 09 09 6c 6f 6e 67  t:....{.....long
5960: 20 69 64 20 3d 20 30 3b 0d 0a 09 09 09 69 66 28   id = 0;.....if(
5970: 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 3d  SQLITE_INTEGER =
5980: 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  = sqlite3_column
5990: 5f 74 79 70 65 28 70 53 74 6d 74 2c 20 63 6f 6c  _type(pStmt, col
59a0: 75 6d 6e 29 29 0d 0a 09 09 09 09 69 64 20 3d 20  umn))......id = 
59b0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69  sqlite3_column_i
59c0: 6e 74 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e  nt(pStmt, column
59d0: 29 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09  );.....else.....
59e0: 09 69 64 20 3d 20 73 74 72 32 69 64 28 73 71 6c  .id = str2id(sql
59f0: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
5a00: 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e 29 2c  (pStmt, column),
5a10: 20 34 29 3b 0d 0a 09 09 09 69 66 28 69 64 29 0d   4);.....if(id).
5a20: 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 43 4d  ....{......if(CM
5a30: 65 74 61 44 61 74 61 4f 62 6a 41 72 72 61 79 2a  etaDataObjArray*
5a40: 20 70 44 6f 63 73 20 3d 20 70 4d 65 74 61 44 61   pDocs = pMetaDa
5a50: 74 61 43 6f 6e 74 2d 3e 47 65 74 44 6f 63 44 65  taCont->GetDocDe
5a60: 66 73 28 29 29 0d 0a 09 09 09 09 7b 0d 0a 09 09  fs())......{....
5a70: 09 09 09 69 66 28 43 4d 65 74 61 44 61 74 61 4f  ...if(CMetaDataO
5a80: 62 6a 2a 20 70 4f 62 6a 20 3d 20 70 44 6f 63 73  bj* pObj = pDocs
5a90: 2d 3e 47 65 74 49 74 65 6d 28 69 64 29 29 0d 0a  ->GetItem(id))..
5aa0: 09 09 09 09 09 09 2a 70 56 61 6c 75 65 20 3d 20  ......*pValue = 
5ab0: 70 4f 62 6a 2d 3e 47 65 74 52 65 61 6c 50 72 65  pObj->GetRealPre
5ac0: 73 65 6e 74 28 29 3b 0d 0a 09 09 09 09 7d 0d 0a  sent();......}..
5ad0: 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 62 72 65  ...}....}....bre
5ae0: 61 6b 3b 0d 0a 09 63 61 73 65 20 74 74 45 6e 75  ak;...case ttEnu
5af0: 6d 3a 0d 0a 09 09 69 66 28 53 51 4c 49 54 45 5f  m:....if(SQLITE_
5b00: 54 45 58 54 20 3d 3d 20 74 79 70 65 4f 66 44 61  TEXT == typeOfDa
5b10: 74 61 29 0d 0a 09 09 7b 0d 0a 09 09 09 75 38 74  ta)....{.....u8t
5b20: 65 78 74 3a 3a 66 72 6f 6d 55 74 66 38 28 28 4c  ext::fromUtf8((L
5b30: 50 43 53 54 52 29 73 71 6c 69 74 65 33 5f 63 6f  PCSTR)sqlite3_co
5b40: 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
5b50: 20 63 6f 6c 75 6d 6e 29 2c 20 63 6f 6c 54 65 78   column), colTex
5b60: 74 29 3b 0d 0a 09 09 09 69 66 28 63 6f 6c 54 65  t);.....if(colTe
5b70: 78 74 2e 47 65 74 4c 65 6e 67 74 68 28 29 20 3d  xt.GetLength() =
5b80: 3d 20 31 33 29 0d 0a 09 09 09 09 56 61 6c 75 65  = 13)......Value
5b90: 53 74 72 57 6f 72 6b 3c 74 6f 73 31 33 3e 3a 3a  StrWork<tos13>::
5ba0: 73 74 72 32 76 61 6c 28 70 56 61 6c 75 65 2c 20  str2val(pValue, 
5bb0: 63 6f 6c 54 65 78 74 2c 20 74 79 70 65 45 6e 75  colText, typeEnu
5bc0: 6d 29 3b 0d 0a 09 09 7d 0d 0a 09 09 62 72 65 61  m);....}....brea
5bd0: 6b 3b 0d 0a 09 63 61 73 65 20 74 74 45 6e 75 6d  k;...case ttEnum
5be0: 4f 6e 65 3a 0d 0a 09 09 69 66 28 53 51 4c 49 54  One:....if(SQLIT
5bf0: 45 5f 54 45 58 54 20 3d 3d 20 74 79 70 65 4f 66  E_TEXT == typeOf
5c00: 44 61 74 61 29 0d 0a 09 09 7b 0d 0a 09 09 09 75  Data)....{.....u
5c10: 38 74 65 78 74 3a 3a 66 72 6f 6d 55 74 66 38 28  8text::fromUtf8(
5c20: 28 4c 50 43 53 54 52 29 73 71 6c 69 74 65 33 5f  (LPCSTR)sqlite3_
5c30: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
5c40: 74 2c 20 63 6f 6c 75 6d 6e 29 2c 20 63 6f 6c 54  t, column), colT
5c50: 65 78 74 29 3b 0d 0a 09 09 09 69 66 28 63 6f 6c  ext);.....if(col
5c60: 54 65 78 74 2e 47 65 74 4c 65 6e 67 74 68 28 29  Text.GetLength()
5c70: 20 3d 3d 20 39 29 0d 0a 09 09 09 09 56 61 6c 75   == 9)......Valu
5c80: 65 53 74 72 57 6f 72 6b 3c 74 6f 73 39 3e 3a 3a  eStrWork<tos9>::
5c90: 73 74 72 32 76 61 6c 28 70 56 61 6c 75 65 2c 20  str2val(pValue, 
5ca0: 63 6f 6c 54 65 78 74 2c 20 74 79 70 65 45 6e 75  colText, typeEnu
5cb0: 6d 2c 20 74 79 70 65 46 6f 72 56 54 43 6f 6c 75  m, typeForVTColu
5cc0: 6d 6e 2e 6d 5f 6d 64 69 64 29 3b 0d 0a 09 09 7d  mn.m_mdid);....}
5cd0: 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73  ....break;...cas
5ce0: 65 20 74 74 41 63 63 6f 75 6e 74 3a 0d 0a 09 09  e ttAccount:....
5cf0: 69 66 28 53 51 4c 49 54 45 5f 54 45 58 54 20 3d  if(SQLITE_TEXT =
5d00: 3d 20 74 79 70 65 4f 66 44 61 74 61 29 0d 0a 09  = typeOfData)...
5d10: 09 7b 0d 0a 09 09 09 75 38 74 65 78 74 3a 3a 66  .{.....u8text::f
5d20: 72 6f 6d 55 74 66 38 28 28 4c 50 43 53 54 52 29  romUtf8((LPCSTR)
5d30: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
5d40: 65 78 74 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d  ext(pStmt, colum
5d50: 6e 29 2c 20 63 6f 6c 54 65 78 74 29 3b 0d 0a 09  n), colText);...
5d60: 09 09 69 66 28 63 6f 6c 54 65 78 74 2e 47 65 74  ..if(colText.Get
5d70: 4c 65 6e 67 74 68 28 29 20 3d 3d 20 31 33 29 0d  Length() == 13).
5d80: 0a 09 09 09 09 56 61 6c 75 65 53 74 72 57 6f 72  .....ValueStrWor
5d90: 6b 3c 74 6f 73 31 33 3e 3a 3a 73 74 72 32 76 61  k<tos13>::str2va
5da0: 6c 28 70 56 61 6c 75 65 2c 20 63 6f 6c 54 65 78  l(pValue, colTex
5db0: 74 2c 20 74 79 70 65 41 63 63 6f 75 6e 74 29 3b  t, typeAccount);
5dc0: 0d 0a 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b 0d  ....}....break;.
5dd0: 0a 09 63 61 73 65 20 74 74 41 63 63 6f 75 6e 74  ..case ttAccount
5de0: 4f 6e 65 3a 0d 0a 09 09 69 66 28 53 51 4c 49 54  One:....if(SQLIT
5df0: 45 5f 54 45 58 54 20 3d 3d 20 74 79 70 65 4f 66  E_TEXT == typeOf
5e00: 44 61 74 61 29 0d 0a 09 09 7b 0d 0a 09 09 09 75  Data)....{.....u
5e10: 38 74 65 78 74 3a 3a 66 72 6f 6d 55 74 66 38 28  8text::fromUtf8(
5e20: 28 4c 50 43 53 54 52 29 73 71 6c 69 74 65 33 5f  (LPCSTR)sqlite3_
5e30: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
5e40: 74 2c 20 63 6f 6c 75 6d 6e 29 2c 20 63 6f 6c 54  t, column), colT
5e50: 65 78 74 29 3b 0d 0a 09 09 09 69 66 28 63 6f 6c  ext);.....if(col
5e60: 54 65 78 74 2e 47 65 74 4c 65 6e 67 74 68 28 29  Text.GetLength()
5e70: 20 3d 3d 20 39 29 0d 0a 09 09 09 09 56 61 6c 75   == 9)......Valu
5e80: 65 53 74 72 57 6f 72 6b 3c 74 6f 73 39 3e 3a 3a  eStrWork<tos9>::
5e90: 73 74 72 32 76 61 6c 28 70 56 61 6c 75 65 2c 20  str2val(pValue, 
5ea0: 63 6f 6c 54 65 78 74 2c 20 74 79 70 65 41 63 63  colText, typeAcc
5eb0: 6f 75 6e 74 2c 20 74 79 70 65 46 6f 72 56 54 43  ount, typeForVTC
5ec0: 6f 6c 75 6d 6e 2e 6d 5f 6d 64 69 64 29 3b 0d 0a  olumn.m_mdid);..
5ed0: 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09  ..}....break;...
5ee0: 63 61 73 65 20 74 74 55 6e 64 65 66 69 6e 65 3a  case ttUndefine:
5ef0: 0d 0a 09 09 75 38 74 65 78 74 3a 3a 66 72 6f 6d  ....u8text::from
5f00: 55 74 66 38 28 28 4c 50 43 53 54 52 29 73 71 6c  Utf8((LPCSTR)sql
5f10: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
5f20: 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e 29 2c  (pStmt, column),
5f30: 20 63 6f 6c 54 65 78 74 29 3b 0d 0a 09 09 69 66   colText);....if
5f40: 28 63 6f 6c 54 65 78 74 2e 47 65 74 4c 65 6e 67  (colText.GetLeng
5f50: 74 68 28 29 20 3d 3d 20 32 33 29 0d 0a 09 09 09  th() == 23).....
5f60: 56 61 6c 75 65 53 74 72 57 6f 72 6b 3c 74 6f 73  ValueStrWork<tos
5f70: 32 33 3e 3a 3a 73 74 72 32 76 61 6c 28 70 56 61  23>::str2val(pVa
5f80: 6c 75 65 2c 20 63 6f 6c 54 65 78 74 29 3b 0d 0a  lue, colText);..
5f90: 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20  ..break;...case 
5fa0: 74 74 43 61 6c 63 4b 69 6e 64 3a 0d 0a 09 09 69  ttCalcKind:....i
5fb0: 66 28 53 51 4c 49 54 45 5f 54 45 58 54 20 3d 3d  f(SQLITE_TEXT ==
5fc0: 20 74 79 70 65 4f 66 44 61 74 61 29 0d 0a 09 09   typeOfData)....
5fd0: 7b 0d 0a 09 09 09 63 6f 6c 54 65 78 74 20 3d 20  {.....colText = 
5fe0: 28 4c 50 43 53 54 52 29 73 71 6c 69 74 65 33 5f  (LPCSTR)sqlite3_
5ff0: 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d  column_text(pStm
6000: 74 2c 20 63 6f 6c 75 6d 6e 29 3b 0d 0a 09 09 09  t, column);.....
6010: 69 6e 74 20 6c 65 6e 20 3d 20 63 6f 6c 54 65 78  int len = colTex
6020: 74 2e 47 65 74 4c 65 6e 67 74 68 28 29 3b 0d 0a  t.GetLength();..
6030: 09 09 09 69 66 28 34 20 3d 3d 20 6c 65 6e 29 0d  ...if(4 == len).
6040: 0a 09 09 09 7b 0d 0a 09 09 09 09 70 56 61 6c 75  ....{......pValu
6050: 65 2d 3e 74 79 70 65 20 3d 20 74 79 70 65 43 61  e->type = typeCa
6060: 6c 63 4b 69 6e 64 3b 0d 0a 09 09 09 09 70 56 61  lcKind;......pVa
6070: 6c 75 65 2d 3e 6d 5f 4f 62 6a 49 44 2e 4f 62 6a  lue->m_ObjID.Obj
6080: 49 44 20 3d 20 73 74 72 32 69 64 28 28 63 6f 6e  ID = str2id((con
6090: 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
60a0: 2a 29 28 4c 50 43 53 54 52 29 63 6f 6c 54 65 78  *)(LPCSTR)colTex
60b0: 74 2c 20 34 29 3b 0d 0a 09 09 09 09 2a 28 44 57  t, 4);......*(DW
60c0: 4f 52 44 2a 29 70 56 61 6c 75 65 2d 3e 6d 5f 4f  ORD*)pValue->m_O
60d0: 62 6a 49 44 2e 44 42 53 69 67 6e 2e 53 69 67 6e  bjID.DBSign.Sign
60e0: 20 3d 20 30 78 30 30 32 30 32 30 32 30 3b 0d 0a   = 0x00202020;..
60f0: 09 09 09 7d 0d 0a 09 09 09 65 6c 73 65 20 69 66  ...}.....else if
6100: 28 31 33 20 3d 3d 20 6c 65 6e 29 0d 0a 09 09 09  (13 == len).....
6110: 09 56 61 6c 75 65 53 74 72 57 6f 72 6b 3c 74 6f  .ValueStrWork<to
6120: 73 31 33 3e 3a 3a 73 74 72 32 76 61 6c 28 70 56  s13>::str2val(pV
6130: 61 6c 75 65 2c 20 63 6f 6c 54 65 78 74 2c 20 74  alue, colText, t
6140: 79 70 65 43 61 6c 63 4b 69 6e 64 29 3b 0d 0a 09  ypeCalcKind);...
6150: 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28 53 51  .}....else if(SQ
6160: 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 3d 3d 20  LITE_INTEGER == 
6170: 74 79 70 65 4f 66 44 61 74 61 29 0d 0a 09 09 7b  typeOfData)....{
6180: 0d 0a 09 09 09 70 56 61 6c 75 65 2d 3e 74 79 70  .....pValue->typ
6190: 65 20 3d 20 74 79 70 65 43 61 6c 63 4b 69 6e 64  e = typeCalcKind
61a0: 3b 0d 0a 09 09 09 70 56 61 6c 75 65 2d 3e 6d 5f  ;.....pValue->m_
61b0: 4f 62 6a 49 44 2e 4f 62 6a 49 44 20 3d 20 73 71  ObjID.ObjID = sq
61c0: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
61d0: 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e 29 3b  (pStmt, column);
61e0: 0d 0a 09 09 09 2a 28 44 57 4f 52 44 2a 29 70 56  .....*(DWORD*)pV
61f0: 61 6c 75 65 2d 3e 6d 5f 4f 62 6a 49 44 2e 44 42  alue->m_ObjID.DB
6200: 53 69 67 6e 2e 53 69 67 6e 20 3d 20 30 78 30 30  Sign.Sign = 0x00
6210: 32 30 32 30 32 30 3b 0d 0a 09 09 7d 0d 0a 09 09  202020;....}....
6220: 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 74 74  break;...case tt
6230: 43 61 6c 65 6e 64 61 72 3a 0d 0a 09 09 69 66 28  Calendar:....if(
6240: 53 51 4c 49 54 45 5f 54 45 58 54 20 3d 3d 20 74  SQLITE_TEXT == t
6250: 79 70 65 4f 66 44 61 74 61 29 0d 0a 09 09 7b 0d  ypeOfData)....{.
6260: 0a 09 09 09 63 6f 6c 54 65 78 74 20 3d 20 28 4c  ....colText = (L
6270: 50 43 53 54 52 29 73 71 6c 69 74 65 33 5f 63 6f  PCSTR)sqlite3_co
6280: 6c 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c  lumn_text(pStmt,
6290: 20 63 6f 6c 75 6d 6e 29 3b 0d 0a 09 09 09 69 66   column);.....if
62a0: 28 31 33 20 3d 3d 20 63 6f 6c 54 65 78 74 2e 47  (13 == colText.G
62b0: 65 74 4c 65 6e 67 74 68 28 29 29 0d 0a 09 09 09  etLength()).....
62c0: 09 56 61 6c 75 65 53 74 72 57 6f 72 6b 3c 74 6f  .ValueStrWork<to
62d0: 73 31 33 3e 3a 3a 73 74 72 32 76 61 6c 28 70 56  s13>::str2val(pV
62e0: 61 6c 75 65 2c 20 63 6f 6c 54 65 78 74 2c 20 74  alue, colText, t
62f0: 79 70 65 43 61 6c 65 6e 64 61 72 29 3b 0d 0a 09  ypeCalendar);...
6300: 09 7d 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63  .}....break;...c
6310: 61 73 65 20 74 74 53 75 62 63 6f 6e 74 6f 3a 0d  ase ttSubconto:.
6320: 0a 09 09 69 66 28 53 51 4c 49 54 45 5f 54 45 58  ...if(SQLITE_TEX
6330: 54 20 3d 3d 20 74 79 70 65 4f 66 44 61 74 61 20  T == typeOfData 
6340: 26 26 20 6c 69 6e 6b 65 64 46 69 65 6c 64 29 0d  && linkedField).
6350: 0a 09 09 7b 0d 0a 09 09 09 75 38 74 65 78 74 3a  ...{.....u8text:
6360: 3a 66 72 6f 6d 55 74 66 38 28 28 4c 50 43 53 54  :fromUtf8((LPCST
6370: 52 29 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  R)sqlite3_column
6380: 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 63 6f 6c  _text(pStmt, col
6390: 75 6d 6e 29 2c 20 63 6f 6c 54 65 78 74 29 3b 0d  umn), colText);.
63a0: 0a 09 09 09 6c 6f 6e 67 20 73 62 4b 69 6e 64 49  ....long sbKindI
63b0: 44 20 3d 20 30 3b 0d 0a 09 09 09 69 66 28 53 51  D = 0;.....if(SQ
63c0: 4c 49 54 45 5f 49 4e 54 45 47 45 52 20 3d 3d 20  LITE_INTEGER == 
63d0: 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
63e0: 79 70 65 28 70 53 74 6d 74 2c 20 6c 69 6e 6b 65  ype(pStmt, linke
63f0: 64 46 69 65 6c 64 2d 3e 63 6f 6c 75 6d 6e 29 29  dField->column))
6400: 0d 0a 09 09 09 09 73 62 4b 69 6e 64 49 44 20 3d  ......sbKindID =
6410: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6420: 69 6e 74 28 70 53 74 6d 74 2c 20 6c 69 6e 6b 65  int(pStmt, linke
6430: 64 46 69 65 6c 64 2d 3e 63 6f 6c 75 6d 6e 29 3b  dField->column);
6440: 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 73  .....else......s
6450: 62 4b 69 6e 64 49 44 20 3d 20 73 74 72 32 69 64  bKindID = str2id
6460: 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  (sqlite3_column_
6470: 74 65 78 74 28 70 53 74 6d 74 2c 20 6c 69 6e 6b  text(pStmt, link
6480: 65 64 46 69 65 6c 64 2d 3e 63 6f 6c 75 6d 6e 29  edField->column)
6490: 2c 20 34 29 3b 0d 0a 09 09 09 69 66 28 73 62 4b  , 4);.....if(sbK
64a0: 69 6e 64 49 44 29 0d 0a 09 09 09 7b 0d 0a 09 09  indID).....{....
64b0: 09 09 43 42 75 68 44 65 66 2a 20 70 44 65 66 20  ..CBuhDef* pDef 
64c0: 3d 20 70 4d 65 74 61 44 61 74 61 43 6f 6e 74 2d  = pMetaDataCont-
64d0: 3e 47 65 74 42 75 68 44 65 66 28 29 3b 0d 0a 09  >GetBuhDef();...
64e0: 09 09 09 69 66 28 70 44 65 66 29 0d 0a 09 09 09  ...if(pDef).....
64f0: 09 7b 0d 0a 09 09 09 09 09 43 53 62 4b 69 6e 64  .{.......CSbKind
6500: 44 65 66 2a 20 70 53 62 4b 69 6e 64 44 65 66 20  Def* pSbKindDef 
6510: 3d 20 70 44 65 66 2d 3e 47 65 74 53 62 4b 69 6e  = pDef->GetSbKin
6520: 64 44 65 66 73 28 29 2d 3e 47 65 74 49 74 65 6d  dDefs()->GetItem
6530: 28 73 62 4b 69 6e 64 49 44 29 3b 0d 0a 09 09 09  (sbKindID);.....
6540: 09 09 69 66 28 70 53 62 4b 69 6e 64 44 65 66 20  ..if(pSbKindDef 
6550: 26 26 20 70 53 62 4b 69 6e 64 44 65 66 2d 3e 6d  && pSbKindDef->m
6560: 5f 54 79 70 65 43 6f 64 65 20 3e 3d 20 74 79 70  _TypeCode >= typ
6570: 65 45 6e 75 6d 29 0d 0a 09 09 09 09 09 7b 0d 0a  eEnum).......{..
6580: 09 09 09 09 09 09 69 66 28 30 20 3d 3d 20 70 53  ......if(0 == pS
6590: 62 4b 69 6e 64 44 65 66 2d 3e 6d 5f 4b 69 6e 64  bKindDef->m_Kind
65a0: 29 0d 0a 09 09 09 09 09 09 7b 0d 0a 09 09 09 09  )........{......
65b0: 09 09 09 69 66 28 63 6f 6c 54 65 78 74 2e 47 65  ...if(colText.Ge
65c0: 74 4c 65 6e 67 74 68 28 29 20 3e 3d 20 31 33 29  tLength() >= 13)
65d0: 0d 0a 09 09 09 09 09 09 09 09 56 61 6c 75 65 53  ..........ValueS
65e0: 74 72 57 6f 72 6b 3c 74 6f 73 31 33 3e 3a 3a 73  trWork<tos13>::s
65f0: 74 72 32 76 61 6c 28 70 56 61 6c 75 65 2c 20 63  tr2val(pValue, c
6600: 6f 6c 54 65 78 74 2c 20 28 54 79 70 65 73 31 43  olText, (Types1C
6610: 29 70 53 62 4b 69 6e 64 44 65 66 2d 3e 6d 5f 54  )pSbKindDef->m_T
6620: 79 70 65 43 6f 64 65 29 3b 0d 0a 09 09 09 09 09  ypeCode);.......
6630: 09 7d 0d 0a 09 09 09 09 09 09 65 6c 73 65 0d 0a  .}........else..
6640: 09 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 09  ......{.........
6650: 69 66 28 63 6f 6c 54 65 78 74 2e 47 65 74 4c 65  if(colText.GetLe
6660: 6e 67 74 68 28 29 20 3e 3d 20 39 29 0d 0a 09 09  ngth() >= 9)....
6670: 09 09 09 09 09 09 56 61 6c 75 65 53 74 72 57 6f  ......ValueStrWo
6680: 72 6b 3c 74 6f 73 39 3e 3a 3a 73 74 72 32 76 61  rk<tos9>::str2va
6690: 6c 28 70 56 61 6c 75 65 2c 20 63 6f 6c 54 65 78  l(pValue, colTex
66a0: 74 2c 20 28 54 79 70 65 73 31 43 29 70 53 62 4b  t, (Types1C)pSbK
66b0: 69 6e 64 44 65 66 2d 3e 6d 5f 54 79 70 65 43 6f  indDef->m_TypeCo
66c0: 64 65 2c 20 70 53 62 4b 69 6e 64 44 65 66 2d 3e  de, pSbKindDef->
66d0: 6d 5f 4b 69 6e 64 29 3b 0d 0a 09 09 09 09 09 09  m_Kind);........
66e0: 7d 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09 09 7d  }.......}......}
66f0: 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 62  .....}....}....b
6700: 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 74 74 54  reak;...case ttT
6710: 69 6d 65 3a 0d 0a 09 09 7b 0d 0a 09 09 09 44 57  ime:....{.....DW
6720: 4f 52 44 20 74 69 6d 65 3b 0d 0a 09 09 09 69 66  ORD time;.....if
6730: 28 53 51 4c 49 54 45 5f 54 45 58 54 20 3d 3d 20  (SQLITE_TEXT == 
6740: 74 79 70 65 4f 66 44 61 74 61 29 0d 0a 09 09 09  typeOfData).....
6750: 09 74 69 6d 65 20 3d 20 73 74 72 32 69 64 28 73  .time = str2id(s
6760: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65  qlite3_column_te
6770: 78 74 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e  xt(pStmt, column
6780: 29 2c 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ), sqlite3_colum
6790: 6e 5f 62 79 74 65 73 28 70 53 74 6d 74 2c 20 63  n_bytes(pStmt, c
67a0: 6f 6c 75 6d 6e 29 29 20 2f 20 31 30 30 30 30 3b  olumn)) / 10000;
67b0: 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 53 51 4c  .....else if(SQL
67c0: 49 54 45 5f 49 4e 54 45 47 45 52 20 3d 3d 20 74  ITE_INTEGER == t
67d0: 79 70 65 4f 66 44 61 74 61 29 0d 0a 09 09 09 09  ypeOfData)......
67e0: 74 69 6d 65 20 3d 20 73 71 6c 69 74 65 33 5f 63  time = sqlite3_c
67f0: 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c  olumn_int(pStmt,
6800: 20 63 6f 6c 75 6d 6e 29 20 2f 20 31 30 30 30 30   column) / 10000
6810: 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09  ;.....else......
6820: 74 69 6d 65 20 3d 20 30 3b 0d 0a 09 09 09 63 6f  time = 0;.....co
6830: 6c 54 65 78 74 2e 46 6f 72 6d 61 74 28 22 25 30  lText.Format("%0
6840: 32 69 3a 25 30 32 69 3a 25 30 32 69 22 2c 20 74  2i:%02i:%02i", t
6850: 69 6d 65 20 2f 20 33 36 30 30 2c 20 28 74 69 6d  ime / 3600, (tim
6860: 65 20 25 20 33 36 30 30 29 20 2f 20 36 30 2c 20  e % 3600) / 60, 
6870: 74 69 6d 65 20 25 20 36 30 29 3b 0d 0a 09 09 09  time % 60);.....
6880: 2a 70 56 61 6c 75 65 20 3d 20 63 6f 6c 54 65 78  *pValue = colTex
6890: 74 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 09 62 72 65  t;....}......bre
68a0: 61 6b 3b 0d 0a 09 63 61 73 65 20 74 74 4b 69 6e  ak;...case ttKin
68b0: 64 4e 61 6d 65 3a 0d 0a 09 09 7b 0d 0a 09 09 09  dName:....{.....
68c0: 6c 6f 6e 67 20 69 64 20 3d 20 30 3b 0d 0a 09 09  long id = 0;....
68d0: 09 69 66 28 53 51 4c 49 54 45 5f 49 4e 54 45 47  .if(SQLITE_INTEG
68e0: 45 52 20 3d 3d 20 73 71 6c 69 74 65 33 5f 63 6f  ER == sqlite3_co
68f0: 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c  lumn_type(pStmt,
6900: 20 63 6f 6c 75 6d 6e 29 29 0d 0a 09 09 09 09 69   column))......i
6910: 64 20 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75  d = sqlite3_colu
6920: 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c 20 63 6f  mn_int(pStmt, co
6930: 6c 75 6d 6e 29 3b 0d 0a 09 09 09 65 6c 73 65 0d  lumn);.....else.
6940: 0a 09 09 09 09 69 64 20 3d 20 73 74 72 32 69 64  .....id = str2id
6950: 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  (sqlite3_column_
6960: 74 65 78 74 28 70 53 74 6d 74 2c 20 63 6f 6c 75  text(pStmt, colu
6970: 6d 6e 29 2c 20 34 29 3b 0d 0a 09 09 09 69 66 28  mn), 4);.....if(
6980: 69 64 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 43  id).....{......C
6990: 4d 65 74 61 44 61 74 61 4f 62 6a 2a 20 70 4f 62  MetaDataObj* pOb
69a0: 6a 20 3d 20 70 4d 65 74 61 44 61 74 61 43 6f 6e  j = pMetaDataCon
69b0: 74 2d 3e 46 69 6e 64 4f 62 6a 65 63 74 28 69 64  t->FindObject(id
69c0: 29 3b 0d 0a 09 09 09 09 69 66 28 70 4f 62 6a 29  );......if(pObj)
69d0: 0d 0a 09 09 09 09 09 2a 70 56 61 6c 75 65 20 3d  .......*pValue =
69e0: 20 70 4f 62 6a 2d 3e 6d 5f 43 6f 64 65 3b 0d 0a   pObj->m_Code;..
69f0: 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 62 72 65  ...}....}....bre
6a00: 61 6b 3b 0d 0a 09 63 61 73 65 20 74 74 4b 69 6e  ak;...case ttKin
6a10: 64 50 72 65 73 65 6e 74 3a 0d 0a 09 09 7b 0d 0a  dPresent:....{..
6a20: 09 09 09 6c 6f 6e 67 20 69 64 20 3d 20 30 3b 0d  ...long id = 0;.
6a30: 0a 09 09 09 69 66 28 53 51 4c 49 54 45 5f 49 4e  ....if(SQLITE_IN
6a40: 54 45 47 45 52 20 3d 3d 20 73 71 6c 69 74 65 33  TEGER == sqlite3
6a50: 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53 74  _column_type(pSt
6a60: 6d 74 2c 20 63 6f 6c 75 6d 6e 29 29 0d 0a 09 09  mt, column))....
6a70: 09 09 69 64 20 3d 20 73 71 6c 69 74 65 33 5f 63  ..id = sqlite3_c
6a80: 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74 2c  olumn_int(pStmt,
6a90: 20 63 6f 6c 75 6d 6e 29 3b 0d 0a 09 09 09 65 6c   column);.....el
6aa0: 73 65 0d 0a 09 09 09 09 69 64 20 3d 20 73 74 72  se......id = str
6ab0: 32 69 64 28 73 71 6c 69 74 65 33 5f 63 6f 6c 75  2id(sqlite3_colu
6ac0: 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20 63  mn_text(pStmt, c
6ad0: 6f 6c 75 6d 6e 29 2c 20 34 29 3b 0d 0a 09 09 09  olumn), 4);.....
6ae0: 69 66 28 69 64 29 0d 0a 09 09 09 7b 0d 0a 09 09  if(id).....{....
6af0: 09 09 43 4d 65 74 61 44 61 74 61 4f 62 6a 2a 20  ..CMetaDataObj* 
6b00: 70 4f 62 6a 20 3d 20 70 4d 65 74 61 44 61 74 61  pObj = pMetaData
6b10: 43 6f 6e 74 2d 3e 46 69 6e 64 4f 62 6a 65 63 74  Cont->FindObject
6b20: 28 69 64 29 3b 0d 0a 09 09 09 09 69 66 28 70 4f  (id);......if(pO
6b30: 62 6a 29 0d 0a 09 09 09 09 09 2a 70 56 61 6c 75  bj).......*pValu
6b40: 65 20 3d 20 70 4f 62 6a 2d 3e 47 65 74 52 65 61  e = pObj->GetRea
6b50: 6c 50 72 65 73 65 6e 74 28 29 3b 0d 0a 09 09 09  lPresent();.....
6b60: 7d 0d 0a 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b  }....}....break;
6b70: 0d 0a 09 63 61 73 65 20 74 74 53 75 62 63 4b 69  ...case ttSubcKi
6b80: 6e 64 3a 0d 0a 09 09 7b 0d 0a 09 09 09 6c 6f 6e  nd:....{.....lon
6b90: 67 20 69 64 20 3d 20 30 3b 0d 0a 09 09 09 69 66  g id = 0;.....if
6ba0: 28 53 51 4c 49 54 45 5f 49 4e 54 45 47 45 52 20  (SQLITE_INTEGER 
6bb0: 3d 3d 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  == sqlite3_colum
6bc0: 6e 5f 74 79 70 65 28 70 53 74 6d 74 2c 20 63 6f  n_type(pStmt, co
6bd0: 6c 75 6d 6e 29 29 0d 0a 09 09 09 09 69 64 20 3d  lumn))......id =
6be0: 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f   sqlite3_column_
6bf0: 69 6e 74 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d  int(pStmt, colum
6c00: 6e 29 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09  n);.....else....
6c10: 09 09 69 64 20 3d 20 73 74 72 32 69 64 28 73 71  ..id = str2id(sq
6c20: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
6c30: 74 28 70 53 74 6d 74 2c 20 63 6f 6c 75 6d 6e 29  t(pStmt, column)
6c40: 2c 20 34 29 3b 0d 0a 09 09 09 69 66 28 69 64 29  , 4);.....if(id)
6c50: 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 43  .....{......if(C
6c60: 42 75 68 44 65 66 2a 20 70 44 65 66 20 3d 20 70  BuhDef* pDef = p
6c70: 4d 65 74 61 44 61 74 61 43 6f 6e 74 2d 3e 47 65  MetaDataCont->Ge
6c80: 74 42 75 68 44 65 66 28 29 29 0d 0a 09 09 09 09  tBuhDef())......
6c90: 7b 0d 0a 09 09 09 09 09 69 66 28 43 54 79 70 65  {.......if(CType
6ca0: 64 46 6c 64 44 65 66 73 41 72 72 61 79 3c 43 53  dFldDefsArray<CS
6cb0: 62 4b 69 6e 64 44 65 66 3e 2a 20 70 53 42 20 3d  bKindDef>* pSB =
6cc0: 20 70 44 65 66 2d 3e 47 65 74 53 62 4b 69 6e 64   pDef->GetSbKind
6cd0: 44 65 66 73 28 29 29 0d 0a 09 09 09 09 09 7b 0d  Defs()).......{.
6ce0: 0a 09 09 09 09 09 09 69 66 28 43 4d 65 74 61 44  .......if(CMetaD
6cf0: 61 74 61 4f 62 6a 2a 20 70 4f 62 6a 20 3d 20 70  ataObj* pObj = p
6d00: 53 42 2d 3e 47 65 74 49 74 65 6d 28 69 64 29 29  SB->GetItem(id))
6d10: 0d 0a 09 09 09 09 09 09 09 2a 70 56 61 6c 75 65  .........*pValue
6d20: 20 3d 20 70 4f 62 6a 2d 3e 6d 5f 43 6f 64 65 3b   = pObj->m_Code;
6d30: 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09 09 7d 0d  .......}......}.
6d40: 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 62 72  ....}....}....br
6d50: 65 61 6b 3b 0d 0a 09 63 61 73 65 20 74 74 53 75  eak;...case ttSu
6d60: 62 63 50 72 65 73 65 6e 74 3a 0d 0a 09 09 7b 0d  bcPresent:....{.
6d70: 0a 09 09 09 6c 6f 6e 67 20 69 64 20 3d 20 30 3b  ....long id = 0;
6d80: 0d 0a 09 09 09 69 66 28 53 51 4c 49 54 45 5f 49  .....if(SQLITE_I
6d90: 4e 54 45 47 45 52 20 3d 3d 20 73 71 6c 69 74 65  NTEGER == sqlite
6da0: 33 5f 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 70 53  3_column_type(pS
6db0: 74 6d 74 2c 20 63 6f 6c 75 6d 6e 29 29 0d 0a 09  tmt, column))...
6dc0: 09 09 09 69 64 20 3d 20 73 71 6c 69 74 65 33 5f  ...id = sqlite3_
6dd0: 63 6f 6c 75 6d 6e 5f 69 6e 74 28 70 53 74 6d 74  column_int(pStmt
6de0: 2c 20 63 6f 6c 75 6d 6e 29 3b 0d 0a 09 09 09 65  , column);.....e
6df0: 6c 73 65 0d 0a 09 09 09 09 69 64 20 3d 20 73 74  lse......id = st
6e00: 72 32 69 64 28 73 71 6c 69 74 65 33 5f 63 6f 6c  r2id(sqlite3_col
6e10: 75 6d 6e 5f 74 65 78 74 28 70 53 74 6d 74 2c 20  umn_text(pStmt, 
6e20: 63 6f 6c 75 6d 6e 29 2c 20 34 29 3b 0d 0a 09 09  column), 4);....
6e30: 09 69 66 28 69 64 29 0d 0a 09 09 09 7b 0d 0a 09  .if(id).....{...
6e40: 09 09 09 69 66 28 43 42 75 68 44 65 66 2a 20 70  ...if(CBuhDef* p
6e50: 44 65 66 20 3d 20 70 4d 65 74 61 44 61 74 61 43  Def = pMetaDataC
6e60: 6f 6e 74 2d 3e 47 65 74 42 75 68 44 65 66 28 29  ont->GetBuhDef()
6e70: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 69  )......{.......i
6e80: 66 28 43 54 79 70 65 64 46 6c 64 44 65 66 73 41  f(CTypedFldDefsA
6e90: 72 72 61 79 3c 43 53 62 4b 69 6e 64 44 65 66 3e  rray<CSbKindDef>
6ea0: 2a 20 70 53 42 20 3d 20 70 44 65 66 2d 3e 47 65  * pSB = pDef->Ge
6eb0: 74 53 62 4b 69 6e 64 44 65 66 73 28 29 29 0d 0a  tSbKindDefs())..
6ec0: 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 69 66  .....{........if
6ed0: 28 43 4d 65 74 61 44 61 74 61 4f 62 6a 2a 20 70  (CMetaDataObj* p
6ee0: 4f 62 6a 20 3d 20 70 53 42 2d 3e 47 65 74 49 74  Obj = pSB->GetIt
6ef0: 65 6d 28 69 64 29 29 0d 0a 09 09 09 09 09 09 09  em(id)).........
6f00: 2a 70 56 61 6c 75 65 20 3d 20 70 4f 62 6a 2d 3e  *pValue = pObj->
6f10: 47 65 74 52 65 61 6c 50 72 65 73 65 6e 74 28 29  GetRealPresent()
6f20: 3b 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09 09 7d  ;.......}......}
6f30: 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 62  .....}....}....b
6f40: 72 65 61 6b 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a  reak;...}..}....
6f50: 65 78 74 65 72 6e 20 22 43 22 20 69 6e 74 20 63  extern "C" int c
6f60: 6f 6e 6e 65 63 74 31 43 54 61 62 6c 65 28 73 71  onnect1CTable(sq
6f70: 6c 69 74 65 33 2a 20 64 62 2c 20 63 6f 6e 73 74  lite3* db, const
6f80: 20 63 68 61 72 2a 20 7a 4e 61 6d 65 29 0d 0a 7b   char* zName)..{
6f90: 0d 0a 09 69 66 28 21 70 44 61 74 61 44 69 63 74  ...if(!pDataDict
6fa0: 29 0d 0a 09 09 72 65 74 75 72 6e 20 30 3b 0d 0a  )....return 0;..
6fb0: 09 43 53 74 72 69 6e 67 20 73 74 72 4e 61 6d 65  .CString strName
6fc0: 20 3d 20 75 38 74 65 78 74 3a 3a 66 72 6f 6d 55   = u8text::fromU
6fd0: 74 66 38 28 7a 4e 61 6d 65 29 2c 20 73 74 72 4f  tf8(zName), strO
6fe0: 72 69 67 4e 61 6d 65 28 73 74 72 4e 61 6d 65 29  rigName(strName)
6ff0: 3b 0d 0a 09 43 56 74 61 62 49 6e 66 6f 2a 20 70  ;...CVtabInfo* p
7000: 49 6e 66 6f 20 3d 20 43 56 74 61 62 49 6e 66 6f  Info = CVtabInfo
7010: 3a 3a 74 61 62 49 6e 66 6f 46 6f 72 4e 61 6d 65  ::tabInfoForName
7020: 28 73 74 72 4e 61 6d 65 29 3b 0d 0a 09 0d 0a 09  (strName);......
7030: 69 66 28 21 70 49 6e 66 6f 20 26 26 20 73 74 72  if(!pInfo && str
7040: 4e 61 6d 65 2e 46 69 6e 64 28 27 5f 27 29 20 3e  Name.Find('_') >
7050: 3d 20 30 29 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52  = 0)...{....DWOR
7060: 44 20 6c 65 6e 20 3d 20 73 74 72 4e 61 6d 65 2e  D len = strName.
7070: 47 65 74 4c 65 6e 67 74 68 28 29 3b 0d 0a 09 09  GetLength();....
7080: 63 68 61 72 20 2a 62 75 66 20 3d 20 6e 65 77 20  char *buf = new 
7090: 63 68 61 72 5b 6c 65 6e 20 2b 20 31 5d 2c 20 2a  char[len + 1], *
70a0: 70 57 72 69 74 65 20 3d 20 62 75 66 20 2b 20 6c  pWrite = buf + l
70b0: 65 6e 3b 0d 0a 09 09 4c 50 43 53 54 52 20 70 53  en;....LPCSTR pS
70c0: 74 61 72 74 20 3d 20 73 74 72 4e 61 6d 65 2c 20  tart = strName, 
70d0: 70 52 65 61 64 20 3d 20 70 53 74 61 72 74 20 2b  pRead = pStart +
70e0: 20 6c 65 6e 20 2d 20 31 3b 0d 0a 09 09 2a 70 57   len - 1;....*pW
70f0: 72 69 74 65 20 3d 20 30 3b 0d 0a 09 09 77 68 69  rite = 0;....whi
7100: 6c 65 28 70 52 65 61 64 20 3e 3d 20 70 53 74 61  le(pRead >= pSta
7110: 72 74 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28  rt)....{.....if(
7120: 2a 70 52 65 61 64 20 3d 3d 20 27 5f 27 29 0d 0a  *pRead == '_')..
7130: 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 70 52 65  ...{......if(pRe
7140: 61 64 5b 2d 31 5d 20 3d 3d 20 27 5f 27 29 0d 0a  ad[-1] == '_')..
7150: 09 09 09 09 7b 0d 0a 09 09 09 09 09 2a 2d 2d 70  ....{.......*--p
7160: 57 72 69 74 65 20 3d 20 2a 70 52 65 61 64 2d 2d  Write = *pRead--
7170: 3b 0d 0a 09 09 09 09 09 70 52 65 61 64 2d 2d 3b  ;.......pRead--;
7180: 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 65 6c 73  ......}......els
7190: 65 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 2a  e......{.......*
71a0: 2d 2d 70 57 72 69 74 65 20 3d 20 27 2e 27 3b 0d  --pWrite = '.';.
71b0: 0a 09 09 09 09 09 70 52 65 61 64 2d 2d 3b 0d 0a  ......pRead--;..
71c0: 09 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 09  ....}.....}.....
71d0: 65 6c 73 65 0d 0a 09 09 09 09 2a 2d 2d 70 57 72  else......*--pWr
71e0: 69 74 65 20 3d 20 2a 70 52 65 61 64 2d 2d 3b 0d  ite = *pRead--;.
71f0: 0a 09 09 7d 0d 0a 09 09 73 74 72 4e 61 6d 65 20  ...}....strName 
7200: 3d 20 70 57 72 69 74 65 3b 0d 0a 09 09 64 65 6c  = pWrite;....del
7210: 65 74 65 20 5b 5d 20 62 75 66 3b 0d 0a 09 09 70  ete [] buf;....p
7220: 49 6e 66 6f 20 3d 20 43 56 74 61 62 49 6e 66 6f  Info = CVtabInfo
7230: 3a 3a 74 61 62 49 6e 66 6f 46 6f 72 4e 61 6d 65  ::tabInfoForName
7240: 28 73 74 72 4e 61 6d 65 29 3b 0d 0a 09 7d 0d 0a  (strName);...}..
7250: 09 69 66 28 70 49 6e 66 6f 29 0d 0a 09 7b 0d 0a  .if(pInfo)...{..
7260: 09 09 43 53 74 72 69 6e 67 20 73 74 72 53 71 6c  ..CString strSql
7270: 43 72 65 61 74 65 3b 0d 0a 09 09 73 74 72 53 71  Create;....strSq
7280: 6c 43 72 65 61 74 65 2e 46 6f 72 6d 61 74 28 22  lCreate.Format("
7290: 63 72 65 61 74 65 20 76 69 72 74 75 61 6c 20 74  create virtual t
72a0: 61 62 6c 65 20 5b 25 73 5d 20 75 73 69 6e 67 20  able [%s] using 
72b0: 64 62 65 6e 67 28 25 73 29 22 2c 20 73 74 72 4f  dbeng(%s)", strO
72c0: 72 69 67 4e 61 6d 65 2c 20 73 74 72 4e 61 6d 65  rigName, strName
72d0: 29 3b 0d 0a 09 09 75 38 74 65 78 74 3a 3a 74 6f  );....u8text::to
72e0: 55 74 66 38 28 73 74 72 53 71 6c 43 72 65 61 74  Utf8(strSqlCreat
72f0: 65 29 3b 0d 0a 09 09 72 65 74 75 72 6e 20 53 51  e);....return SQ
7300: 4c 49 54 45 5f 4f 4b 20 3d 3d 20 73 71 6c 69 74  LITE_OK == sqlit
7310: 65 33 5f 65 78 65 63 28 64 62 2c 20 73 74 72 53  e3_exec(db, strS
7320: 71 6c 43 72 65 61 74 65 2c 20 4e 55 4c 4c 2c 20  qlCreate, NULL, 
7330: 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0d 0a 09 7d  NULL, NULL);...}
7340: 0d 0a 09 72 65 74 75 72 6e 20 30 3b 0d 0a 7d 0d  ...return 0;..}.
7350: 0a 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c 69 74 65  .....void SQLite
7360: 42 61 73 65 3a 3a 6f 70 65 6e 28 63 6f 6e 73 74  Base::open(const
7370: 20 43 53 74 72 69 6e 67 26 20 66 69 6c 65 4e 61   CString& fileNa
7380: 6d 65 29 0d 0a 7b 0d 0a 09 63 6c 6f 73 65 28 29  me)..{...close()
7390: 3b 0d 0a 09 43 53 74 72 69 6e 67 20 75 38 46 69  ;...CString u8Fi
73a0: 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61 6d  leName = fileNam
73b0: 65 3b 0d 0a 09 75 38 74 65 78 74 3a 3a 74 6f 55  e;...u8text::toU
73c0: 74 66 38 28 75 38 46 69 6c 65 4e 61 6d 65 29 3b  tf8(u8FileName);
73d0: 0d 0a 0d 0a 09 69 66 28 53 51 4c 49 54 45 5f 4f  .....if(SQLITE_O
73e0: 4b 20 21 3d 20 73 71 6c 69 74 65 33 5f 6f 70 65  K != sqlite3_ope
73f0: 6e 28 75 38 46 69 6c 65 4e 61 6d 65 2c 20 26 6d  n(u8FileName, &m
7400: 5f 70 44 61 74 61 42 61 73 65 29 29 0d 0a 09 7b  _pDataBase))...{
7410: 0d 0a 09 09 43 53 74 72 69 6e 67 20 65 72 72 3b  ....CString err;
7420: 0d 0a 09 09 69 66 28 6d 5f 70 44 61 74 61 42 61  ....if(m_pDataBa
7430: 73 65 29 0d 0a 09 09 7b 0d 0a 09 09 09 75 38 74  se)....{.....u8t
7440: 65 78 74 3a 3a 66 72 6f 6d 55 74 66 38 28 73 71  ext::fromUtf8(sq
7450: 6c 69 74 65 33 5f 65 72 72 6d 73 67 28 6d 5f 70  lite3_errmsg(m_p
7460: 44 61 74 61 42 61 73 65 29 2c 20 65 72 72 29 3b  DataBase), err);
7470: 0d 0a 09 09 09 73 71 6c 69 74 65 33 5f 63 6c 6f  .....sqlite3_clo
7480: 73 65 28 6d 5f 70 44 61 74 61 42 61 73 65 29 3b  se(m_pDataBase);
7490: 0d 0a 09 09 09 6d 5f 70 44 61 74 61 42 61 73 65  .....m_pDataBase
74a0: 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 09 7d 0d 0a 09   = NULL;....}...
74b0: 09 65 6c 73 65 0d 0a 09 09 09 65 72 72 20 3d 20  .else.....err = 
74c0: 22 cd e5 e4 ee f1 f2 e0 f2 ee f7 ed ee 20 ef e0  "............ ..
74d0: ec ff f2 e8 22 3b 0d 0a 09 09 43 42 4c 4d 6f 64  ....";....CBLMod
74e0: 75 6c 65 3a 3a 52 61 69 73 65 45 78 74 52 75 6e  ule::RaiseExtRun
74f0: 74 69 6d 65 45 72 72 6f 72 28 65 72 72 2c 20 46  timeError(err, F
7500: 41 4c 53 45 29 3b 0d 0a 09 7d 0d 0a 09 69 66 28  ALSE);...}...if(
7510: 70 44 61 74 61 44 69 63 74 29 0d 0a 09 7b 0d 0a  pDataDict)...{..
7520: 09 09 73 74 61 74 69 63 20 73 71 6c 69 74 65 33  ..static sqlite3
7530: 5f 6d 6f 64 75 6c 65 20 6d 6f 64 20 3d 20 7b 0d  _module mod = {.
7540: 0a 09 09 09 31 2c 0d 0a 09 09 09 78 43 72 65 61  ....1,.....xCrea
7550: 74 65 2c 0d 0a 09 09 09 78 43 72 65 61 74 65 2c  te,.....xCreate,
7560: 0d 0a 09 09 09 78 42 65 73 74 49 6e 64 65 78 2c  .....xBestIndex,
7570: 0d 0a 09 09 09 78 44 65 73 74 72 6f 79 2c 0d 0a  .....xDestroy,..
7580: 09 09 09 78 44 65 73 74 72 6f 79 2c 0d 0a 09 09  ...xDestroy,....
7590: 09 78 4f 70 65 6e 2c 0d 0a 09 09 09 78 43 6c 6f  .xOpen,.....xClo
75a0: 73 65 2c 0d 0a 09 09 09 78 46 69 6c 74 65 72 2c  se,.....xFilter,
75b0: 0d 0a 09 09 09 78 4e 65 78 74 2c 0d 0a 09 09 09  .....xNext,.....
75c0: 78 45 6f 66 2c 0d 0a 09 09 09 78 43 6f 6c 75 6d  xEof,.....xColum
75d0: 6e 2c 0d 0a 09 09 09 78 52 6f 77 69 64 2c 0d 0a  n,.....xRowid,..
75e0: 09 09 09 4e 55 4c 4c 2c 2f 2f 20 20 20 69 6e 74  ...NULL,//   int
75f0: 20 28 2a 78 55 70 64 61 74 65 29 28 73 71 6c 69   (*xUpdate)(sqli
7600: 74 65 33 5f 76 74 61 62 20 2a 2c 20 69 6e 74 2c  te3_vtab *, int,
7610: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
7620: 2a 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  *, sqlite3_int64
7630: 20 2a 29 3b 0d 0a 09 09 09 2f 2f 20 20 20 69 6e   *);.....//   in
7640: 74 20 28 2a 78 42 65 67 69 6e 29 28 73 71 6c 69  t (*xBegin)(sqli
7650: 74 65 33 5f 76 74 61 62 20 2a 70 56 54 61 62 29  te3_vtab *pVTab)
7660: 3b 0d 0a 09 09 09 2f 2f 20 20 20 69 6e 74 20 28  ;.....//   int (
7670: 2a 78 53 79 6e 63 29 28 73 71 6c 69 74 65 33 5f  *xSync)(sqlite3_
7680: 76 74 61 62 20 2a 70 56 54 61 62 29 3b 0d 0a 09  vtab *pVTab);...
7690: 09 09 2f 2f 20 20 20 69 6e 74 20 28 2a 78 43 6f  ..//   int (*xCo
76a0: 6d 6d 69 74 29 28 73 71 6c 69 74 65 33 5f 76 74  mmit)(sqlite3_vt
76b0: 61 62 20 2a 70 56 54 61 62 29 3b 0d 0a 09 09 09  ab *pVTab);.....
76c0: 2f 2f 20 20 20 69 6e 74 20 28 2a 78 52 6f 6c 6c  //   int (*xRoll
76d0: 62 61 63 6b 29 28 73 71 6c 69 74 65 33 5f 76 74  back)(sqlite3_vt
76e0: 61 62 20 2a 70 56 54 61 62 29 3b 0d 0a 09 09 09  ab *pVTab);.....
76f0: 2f 2f 20 20 20 69 6e 74 20 28 2a 78 46 69 6e 64  //   int (*xFind
7700: 46 75 6e 63 74 69 6f 6e 29 28 73 71 6c 69 74 65  Function)(sqlite
7710: 33 5f 76 74 61 62 20 2a 70 56 74 61 62 2c 20 69  3_vtab *pVtab, i
7720: 6e 74 20 6e 41 72 67 2c 20 63 6f 6e 73 74 20 63  nt nArg, const c
7730: 68 61 72 20 2a 7a 4e 61 6d 65 2c 20 76 6f 69 64  har *zName, void
7740: 20 28 2a 2a 70 78 46 75 6e 63 29 28 73 71 6c 69   (**pxFunc)(sqli
7750: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
7760: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
7770: 29 2c 76 6f 69 64 20 2a 2a 70 70 41 72 67 29 3b  ),void **ppArg);
7780: 0d 0a 09 09 09 2f 2f 20 20 20 69 6e 74 20 28 2a  .....//   int (*
7790: 78 52 65 6e 61 6d 65 29 28 73 71 6c 69 74 65 33  xRename)(sqlite3
77a0: 5f 76 74 61 62 20 2a 70 56 74 61 62 2c 20 63 6f  _vtab *pVtab, co
77b0: 6e 73 74 20 63 68 61 72 20 2a 7a 4e 65 77 29 3b  nst char *zNew);
77c0: 0d 0a 09 09 7d 3b 0d 0a 09 09 73 71 6c 69 74 65  ....};....sqlite
77d0: 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28  3_create_module(
77e0: 6d 5f 70 44 61 74 61 42 61 73 65 2c 20 22 64 62  m_pDataBase, "db
77f0: 65 6e 67 22 2c 20 26 6d 6f 64 2c 20 4e 55 4c 4c  eng", &mod, NULL
7800: 29 3b 0d 0a 09 7d 0d 0a 09 73 71 6c 69 74 65 33  );...}...sqlite3
7810: 5f 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f  _create_collatio
7820: 6e 28 6d 5f 70 44 61 74 61 42 61 73 65 2c 20 22  n(m_pDataBase, "
7830: 5f 31 43 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  _1C", SQLITE_UTF
7840: 38 2c 20 4e 55 4c 4c 2c 20 26 75 38 74 65 78 74  8, NULL, &u8text
7850: 3a 3a 5f 31 43 63 6f 6c 6c 61 74 65 29 3b 0d 0a  ::_1Ccollate);..
7860: 09 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
7870: 66 75 6e 63 74 69 6f 6e 28 6d 5f 70 44 61 74 61  function(m_pData
7880: 42 61 73 65 2c 20 22 73 74 72 32 69 64 22 2c 20  Base, "str2id", 
7890: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
78a0: 4e 55 4c 4c 2c 20 62 61 73 65 53 74 72 32 49 64  NULL, baseStr2Id
78b0: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0d 0a  , NULL, NULL);..
78c0: 09 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
78d0: 66 75 6e 63 74 69 6f 6e 28 6d 5f 70 44 61 74 61  function(m_pData
78e0: 42 61 73 65 2c 20 22 69 64 32 73 74 72 22 2c 20  Base, "id2str", 
78f0: 32 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  2, SQLITE_UTF8, 
7900: 4e 55 4c 4c 2c 20 62 61 73 65 49 64 32 53 74 72  NULL, baseId2Str
7910: 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 29 3b 0d 0a  , NULL, NULL);..
7920: 09 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
7930: 66 75 6e 63 74 69 6f 6e 28 6d 5f 70 44 61 74 61  function(m_pData
7940: 42 61 73 65 2c 20 22 63 6f 61 6c 65 73 63 65 65  Base, "coalescee
7950: 78 22 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  x", -1, SQLITE_U
7960: 54 46 38 2c 20 4e 55 4c 4c 2c 20 63 6f 61 6c 65  TF8, NULL, coale
7970: 73 63 65 45 78 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  sceEx, NULL, NUL
7980: 4c 29 3b 0d 0a 09 2f 2f 73 71 6c 69 74 65 33 5f  L);...//sqlite3_
7990: 70 72 6f 67 72 65 73 73 5f 68 61 6e 64 6c 65 72  progress_handler
79a0: 28 6d 5f 70 44 61 74 61 42 61 73 65 2c 20 31 30  (m_pDataBase, 10
79b0: 30 30 2c 20 70 72 6f 67 72 65 73 73 5f 66 75 6e  00, progress_fun
79c0: 63 2c 20 30 29 3b 0d 0a 7d 0d 0a 0d 0a 0d 0a 76  c, 0);..}......v
79d0: 6f 69 64 20 53 51 4c 69 74 65 42 61 73 65 3a 3a  oid SQLiteBase::
79e0: 74 72 61 63 65 4f 6e 28 29 0d 0a 7b 0d 0a 09 62  traceOn()..{...b
79f0: 4e 65 65 64 50 72 6f 66 69 6c 65 20 3d 20 54 52  NeedProfile = TR
7a00: 55 45 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53  UE;..}....void S
7a10: 51 4c 69 74 65 42 61 73 65 3a 3a 70 75 74 56 54  QLiteBase::putVT
7a20: 28 43 56 61 6c 75 65 54 61 62 6c 65 2a 20 70 56  (CValueTable* pV
7a30: 54 2c 20 63 6f 6e 73 74 20 43 53 74 72 69 6e 67  T, const CString
7a40: 26 20 73 74 72 4e 61 6d 65 4f 66 54 61 62 6c 65  & strNameOfTable
7a50: 2c 20 42 4f 4f 4c 20 62 41 73 50 65 72 73 69 73  , BOOL bAsPersis
7a60: 74 65 6e 74 29 0d 0a 7b 0d 0a 09 69 66 28 21 6d  tent)..{...if(!m
7a70: 5f 70 44 61 74 61 42 61 73 65 29 0d 0a 09 09 43  _pDataBase)....C
7a80: 42 4c 4d 6f 64 75 6c 65 3a 3a 52 61 69 73 65 45  BLModule::RaiseE
7a90: 78 74 52 75 6e 74 69 6d 65 45 72 72 6f 72 28 22  xtRuntimeError("
7aa0: c1 e0 e7 e0 20 e4 e0 ed ed fb f5 20 ed e5 20 ee  .... ...... .. .
7ab0: f2 ea f0 fb f2 e0 22 2c 20 46 41 4c 53 45 29 3b  ......", FALSE);
7ac0: 0d 0a 09 0d 0a 09 69 66 28 73 74 72 4e 61 6d 65  ......if(strName
7ad0: 4f 66 54 61 62 6c 65 2e 49 73 45 6d 70 74 79 28  OfTable.IsEmpty(
7ae0: 29 29 0d 0a 09 09 43 42 4c 4d 6f 64 75 6c 65 3a  ))....CBLModule:
7af0: 3a 52 61 69 73 65 45 78 74 52 75 6e 74 69 6d 65  :RaiseExtRuntime
7b00: 45 72 72 6f 72 28 22 cd e5 20 e7 e0 e4 e0 ed ee  Error(".. ......
7b10: 20 e8 ec ff 20 f2 e0 e1 eb e8 f6 fb 22 2c 20 46   ... .......", F
7b20: 41 4c 53 45 29 3b 0d 0a 09 0d 0a 09 0d 0a 09 44  ALSE);.........D
7b30: 57 4f 52 44 20 63 6f 6c 73 20 3d 20 70 56 54 2d  WORD cols = pVT-
7b40: 3e 47 65 74 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  >GetColumnCount(
7b50: 29 3b 0d 0a 09 69 66 28 21 63 6f 6c 73 29 0d 0a  );...if(!cols)..
7b60: 09 09 43 42 4c 4d 6f 64 75 6c 65 3a 3a 52 61 69  ..CBLModule::Rai
7b70: 73 65 45 78 74 52 75 6e 74 69 6d 65 45 72 72 6f  seExtRuntimeErro
7b80: 72 28 22 c2 20 f2 e0 e1 eb e8 f6 e5 20 e7 ed e0  r(". ....... ...
7b90: f7 e5 ed e8 e9 20 ed e5 f2 20 ea ee eb ee ed ee  ..... ... ......
7ba0: ea 22 2c 20 46 41 4c 53 45 29 3b 0d 0a 0d 0a 09  .", FALSE);.....
7bb0: 43 53 74 72 69 6e 67 20 73 74 72 53 71 6c 43 72  CString strSqlCr
7bc0: 65 61 74 65 2c 20 73 74 72 53 71 6c 49 6e 73 65  eate, strSqlInse
7bd0: 72 74 3b 0d 0a 09 73 74 72 53 71 6c 43 72 65 61  rt;...strSqlCrea
7be0: 74 65 2e 46 6f 72 6d 61 74 28 22 64 72 6f 70 20  te.Format("drop 
7bf0: 74 61 62 6c 65 20 69 66 20 65 78 69 73 74 73 20  table if exists 
7c00: 25 73 3b 20 63 72 65 61 74 65 25 73 20 74 61 62  %s; create%s tab
7c10: 6c 65 20 25 73 20 28 22 2c 20 73 74 72 4e 61 6d  le %s (", strNam
7c20: 65 4f 66 54 61 62 6c 65 2c 20 62 41 73 50 65 72  eOfTable, bAsPer
7c30: 73 69 73 74 65 6e 74 3f 20 22 22 20 3a 20 22 20  sistent? "" : " 
7c40: 74 65 6d 70 22 2c 20 73 74 72 4e 61 6d 65 4f 66  temp", strNameOf
7c50: 54 61 62 6c 65 29 3b 0d 0a 09 73 74 72 53 71 6c  Table);...strSql
7c60: 49 6e 73 65 72 74 2e 46 6f 72 6d 61 74 28 22 69  Insert.Format("i
7c70: 6e 73 65 72 74 20 69 6e 74 6f 20 25 73 20 76 61  nsert into %s va
7c80: 6c 75 65 73 28 22 2c 20 73 74 72 4e 61 6d 65 4f  lues(", strNameO
7c90: 66 54 61 62 6c 65 29 3b 0d 0a 09 0d 0a 09 43 44  fTable);......CD
7ca0: 57 6f 72 64 41 72 72 61 79 20 6d 6f 64 69 66 69  WordArray modifi
7cb0: 63 61 74 6f 72 73 3b 0d 0a 09 0d 0a 09 66 6f 72  cators;......for
7cc0: 28 44 57 4f 52 44 20 69 64 78 20 3d 20 30 3b 20  (DWORD idx = 0; 
7cd0: 69 64 78 20 3c 20 63 6f 6c 73 20 3b 20 69 64 78  idx < cols ; idx
7ce0: 2b 2b 29 0d 0a 09 7b 0d 0a 09 09 43 56 54 43 6f  ++)...{....CVTCo
7cf0: 6c 75 6d 6e 2a 20 70 43 6f 6c 20 3d 20 70 56 54  lumn* pCol = pVT
7d00: 2d 3e 47 65 74 43 6f 6c 75 6d 6e 28 69 64 78 29  ->GetColumn(idx)
7d10: 3b 0d 0a 09 09 73 74 72 53 71 6c 43 72 65 61 74  ;....strSqlCreat
7d20: 65 20 2b 3d 20 70 43 6f 6c 2d 3e 47 65 74 43 6f  e += pCol->GetCo
7d30: 64 65 28 29 20 2b 20 22 20 6e 6f 74 20 6e 75 6c  de() + " not nul
7d40: 6c 2c 22 3b 0d 0a 09 09 73 74 72 53 71 6c 49 6e  l,";....strSqlIn
7d50: 73 65 72 74 20 2b 3d 20 22 3f 2c 22 3b 0d 0a 09  sert += "?,";...
7d60: 09 0d 0a 09 09 69 6e 74 20 6d 6f 64 20 3d 20 30  .....int mod = 0
7d70: 3b 0d 0a 09 09 4c 50 43 53 54 52 20 70 4d 6f 64  ;....LPCSTR pMod
7d80: 20 3d 20 73 74 72 73 74 72 28 70 43 6f 6c 2d 3e   = strstr(pCol->
7d90: 47 65 74 54 69 74 6c 65 28 29 2c 20 22 6d 6f 64  GetTitle(), "mod
7da0: 3d 22 29 3b 0d 0a 09 09 69 66 28 70 4d 6f 64 29  =");....if(pMod)
7db0: 0d 0a 09 09 09 6d 6f 64 20 3d 20 61 74 6f 6c 28  .....mod = atol(
7dc0: 70 4d 6f 64 20 2b 20 34 29 3b 0d 0a 09 09 65 6c  pMod + 4);....el
7dd0: 73 65 0d 0a 09 09 7b 0d 0a 09 09 09 63 6f 6e 73  se....{.....cons
7de0: 74 20 43 54 79 70 65 26 20 74 79 70 65 20 3d 20  t CType& type = 
7df0: 70 43 6f 6c 2d 3e 47 65 74 54 79 70 65 28 29 3b  pCol->GetType();
7e00: 0d 0a 09 09 09 69 66 28 74 79 70 65 2e 74 79 70  .....if(type.typ
7e10: 65 20 3e 3d 20 74 79 70 65 45 6e 75 6d 20 26 26  e >= typeEnum &&
7e20: 20 21 74 79 70 65 2e 6d 5f 6d 64 69 64 29 0d 0a   !type.m_mdid)..
7e30: 09 09 09 09 6d 6f 64 20 3d 20 31 3b 0d 0a 09 09  ....mod = 1;....
7e40: 09 65 6c 73 65 20 69 66 28 74 79 70 65 2e 74 79  .else if(type.ty
7e50: 70 65 20 3d 3d 20 74 79 70 65 55 6e 64 65 66 69  pe == typeUndefi
7e60: 6e 65 64 29 0d 0a 09 09 09 09 6d 6f 64 20 3d 20  ned)......mod = 
7e70: 2d 31 3b 0d 0a 09 09 7d 0d 0a 09 09 6d 6f 64 69  -1;....}....modi
7e80: 66 69 63 61 74 6f 72 73 2e 41 64 64 28 6d 6f 64  ficators.Add(mod
7e90: 29 3b 0d 0a 09 7d 0d 0a 09 73 74 72 53 71 6c 43  );...}...strSqlC
7ea0: 72 65 61 74 65 2e 53 65 74 41 74 28 73 74 72 53  reate.SetAt(strS
7eb0: 71 6c 43 72 65 61 74 65 2e 47 65 74 4c 65 6e 67  qlCreate.GetLeng
7ec0: 74 68 28 29 20 2d 20 31 2c 20 27 29 27 29 3b 0d  th() - 1, ')');.
7ed0: 0a 09 73 74 72 53 71 6c 49 6e 73 65 72 74 2e 53  ..strSqlInsert.S
7ee0: 65 74 41 74 28 73 74 72 53 71 6c 49 6e 73 65 72  etAt(strSqlInser
7ef0: 74 2e 47 65 74 4c 65 6e 67 74 68 28 29 20 2d 20  t.GetLength() - 
7f00: 31 2c 20 27 29 27 29 3b 0d 0a 0d 0a 09 75 38 74  1, ')');.....u8t
7f10: 65 78 74 3a 3a 74 6f 55 74 66 38 28 73 74 72 53  ext::toUtf8(strS
7f20: 71 6c 43 72 65 61 74 65 29 3b 0d 0a 09 75 38 74  qlCreate);...u8t
7f30: 65 78 74 3a 3a 74 6f 55 74 66 38 28 73 74 72 53  ext::toUtf8(strS
7f40: 71 6c 49 6e 73 65 72 74 29 3b 0d 0a 0d 0a 09 74  qlInsert);.....t
7f50: 72 61 6e 5f 67 75 61 72 64 20 74 67 28 6d 5f 70  ran_guard tg(m_p
7f60: 44 61 74 61 42 61 73 65 29 3b 0d 0a 0d 0a 09 69  DataBase);.....i
7f70: 66 28 53 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 73  f(SQLITE_OK != s
7f80: 71 6c 69 74 65 33 5f 65 78 65 63 28 6d 5f 70 44  qlite3_exec(m_pD
7f90: 61 74 61 42 61 73 65 2c 20 73 74 72 53 71 6c 43  ataBase, strSqlC
7fa0: 72 65 61 74 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c  reate, NULL, NUL
7fb0: 4c 2c 20 4e 55 4c 4c 29 29 0d 0a 09 09 72 61 69  L, NULL))....rai
7fc0: 73 65 44 42 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a  seDBError();....
7fd0: 09 44 57 4f 52 44 20 72 6f 77 73 20 3d 20 70 56  .DWORD rows = pV
7fe0: 54 2d 3e 47 65 74 52 6f 77 43 6f 75 6e 74 28 29  T->GetRowCount()
7ff0: 3b 0d 0a 09 69 66 28 21 72 6f 77 73 29 0d 0a 09  ;...if(!rows)...
8000: 7b 0d 0a 09 09 74 67 2e 65 72 72 20 3d 20 46 41  {....tg.err = FA
8010: 4c 53 45 3b 0d 0a 09 09 72 65 74 75 72 6e 3b 0d  LSE;....return;.
8020: 0a 09 7d 0d 0a 09 0d 0a 09 73 71 6c 69 74 65 33  ..}......sqlite3
8030: 5f 73 74 6d 74 2a 20 70 49 6e 73 65 72 74 20 3d  _stmt* pInsert =
8040: 20 4e 55 4c 4c 3b 0d 0a 09 63 6f 6e 73 74 20 63   NULL;...const c
8050: 68 61 72 2a 20 70 54 61 69 6c 3b 0d 0a 09 69 66  har* pTail;...if
8060: 28 53 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 73 71  (SQLITE_OK != sq
8070: 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32  lite3_prepare_v2
8080: 28 6d 5f 70 44 61 74 61 42 61 73 65 2c 20 73 74  (m_pDataBase, st
8090: 72 53 71 6c 49 6e 73 65 72 74 2c 20 73 74 72 53  rSqlInsert, strS
80a0: 71 6c 49 6e 73 65 72 74 2e 47 65 74 4c 65 6e 67  qlInsert.GetLeng
80b0: 74 68 28 29 2c 20 26 70 49 6e 73 65 72 74 2c 20  th(), &pInsert, 
80c0: 26 70 54 61 69 6c 29 29 0d 0a 09 09 72 61 69 73  &pTail))....rais
80d0: 65 44 42 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 09  eDBError();.....
80e0: 43 53 74 72 69 6e 67 20 74 65 78 74 3b 0d 0a 0d  CString text;...
80f0: 0a 09 66 6f 72 28 44 57 4f 52 44 20 72 20 3d 20  ..for(DWORD r = 
8100: 30 3b 20 72 20 3c 20 72 6f 77 73 3b 20 72 2b 2b  0; r < rows; r++
8110: 29 0d 0a 09 7b 20 0d 0a 09 09 66 6f 72 28 44 57  )...{ ....for(DW
8120: 4f 52 44 20 63 20 3d 20 30 3b 20 63 20 3c 20 63  ORD c = 0; c < c
8130: 6f 6c 73 3b 20 29 0d 0a 09 09 7b 0d 0a 09 09 09  ols; )....{.....
8140: 43 56 54 43 6f 6c 75 6d 6e 2a 20 70 43 6f 6c 20  CVTColumn* pCol 
8150: 3d 20 70 56 54 2d 3e 47 65 74 43 6f 6c 75 6d 6e  = pVT->GetColumn
8160: 28 63 29 3b 0d 0a 09 09 09 69 6e 74 20 6d 6f 64  (c);.....int mod
8170: 20 3d 20 6d 6f 64 69 66 69 63 61 74 6f 72 73 5b   = modificators[
8180: 63 2b 2b 5d 3b 0d 0a 09 09 09 62 69 6e 64 56 61  c++];.....bindVa
8190: 6c 75 65 28 62 69 6e 64 53 71 6c 50 61 72 61 6d  lue(bindSqlParam
81a0: 28 70 43 6f 6c 2d 3e 47 65 74 43 6f 64 65 28 29  (pCol->GetCode()
81b0: 2c 20 63 2c 20 6d 5f 70 44 61 74 61 42 61 73 65  , c, m_pDataBase
81c0: 2c 20 70 49 6e 73 65 72 74 29 2c 20 26 70 43 6f  , pInsert), &pCo
81d0: 6c 2d 3e 47 65 74 28 72 29 2c 20 6d 6f 64 29 3b  l->Get(r), mod);
81e0: 0d 0a 09 09 7d 0d 0a 09 09 73 71 6c 69 74 65 33  ....}....sqlite3
81f0: 5f 73 74 65 70 28 70 49 6e 73 65 72 74 29 3b 0d  _step(pInsert);.
8200: 0a 09 09 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ...sqlite3_reset
8210: 28 70 49 6e 73 65 72 74 29 3b 0d 0a 09 7d 0d 0a  (pInsert);...}..
8220: 09 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  .sqlite3_finaliz
8230: 65 28 70 49 6e 73 65 72 74 29 3b 0d 0a 09 74 67  e(pInsert);...tg
8240: 2e 65 72 72 20 3d 20 46 41 4c 53 45 3b 0d 0a 7d  .err = FALSE;..}
8250: 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c 69 74 65 42  ....void SQLiteB
8260: 61 73 65 3a 3a 70 75 74 4f 62 6a 65 63 74 73 28  ase::putObjects(
8270: 43 56 61 6c 75 65 2a 20 70 4f 62 6a 65 63 74 73  CValue* pObjects
8280: 2c 20 63 6f 6e 73 74 20 43 53 74 72 69 6e 67 26  , const CString&
8290: 20 73 74 72 4e 61 6d 65 4f 66 54 61 62 6c 65 2c   strNameOfTable,
82a0: 20 42 4f 4f 4c 20 62 41 73 50 65 72 73 69 73 74   BOOL bAsPersist
82b0: 65 6e 74 2c 20 63 6f 6e 73 74 20 43 53 74 72 69  ent, const CStri
82c0: 6e 67 26 20 6b 69 6e 64 4f 66 4f 62 6a 65 63 74  ng& kindOfObject
82d0: 73 29 0d 0a 7b 0d 0a 09 69 66 28 21 6d 5f 70 44  s)..{...if(!m_pD
82e0: 61 74 61 42 61 73 65 29 0d 0a 09 09 43 42 4c 4d  ataBase)....CBLM
82f0: 6f 64 75 6c 65 3a 3a 52 61 69 73 65 45 78 74 52  odule::RaiseExtR
8300: 75 6e 74 69 6d 65 45 72 72 6f 72 28 22 c1 e0 e7  untimeError("...
8310: e0 20 e4 e0 ed ed fb f5 20 ed e5 20 ee f2 ea f0  . ...... .. ....
8320: fb f2 e0 22 2c 20 46 41 4c 53 45 29 3b 0d 0a 09  ...", FALSE);...
8330: 43 50 74 72 41 72 72 61 79 2a 20 70 56 4c 20 3d  CPtrArray* pVL =
8340: 20 4e 55 4c 4c 3b 0d 0a 09 0d 0a 09 69 66 28 70   NULL;......if(p
8350: 4f 62 6a 65 63 74 73 2d 3e 74 79 70 65 20 3d 3d  Objects->type ==
8360: 20 31 30 30 20 26 26 20 70 4f 62 6a 65 63 74 73   100 && pObjects
8370: 2d 3e 6d 5f 43 6f 6e 74 65 78 74 20 26 26 20 21  ->m_Context && !
8380: 73 74 72 63 6d 70 28 70 4f 62 6a 65 63 74 73 2d  strcmp(pObjects-
8390: 3e 6d 5f 43 6f 6e 74 65 78 74 2d 3e 47 65 74 52  >m_Context->GetR
83a0: 75 6e 74 69 6d 65 43 6c 61 73 73 28 29 2d 3e 6d  untimeClass()->m
83b0: 5f 6c 70 73 7a 43 6c 61 73 73 4e 61 6d 65 2c 20  _lpszClassName, 
83c0: 22 43 56 61 6c 75 65 4c 69 73 74 43 6f 6e 74 65  "CValueListConte
83d0: 78 74 22 29 29 0d 0a 09 09 70 56 4c 3d 2a 28 43  xt"))....pVL=*(C
83e0: 50 74 72 41 72 72 61 79 2a 2a 29 28 28 28 63 68  PtrArray**)(((ch
83f0: 61 72 2a 29 70 4f 62 6a 65 63 74 73 2d 3e 6d 5f  ar*)pObjects->m_
8400: 43 6f 6e 74 65 78 74 29 20 2b 20 30 78 33 30 29  Context) + 0x30)
8410: 3b 0d 0a 09 65 6c 73 65 20 69 66 28 21 28 70 4f  ;...else if(!(pO
8420: 62 6a 65 63 74 73 2d 3e 74 79 70 65 20 3d 3d 20  bjects->type == 
8430: 74 79 70 65 52 65 66 65 72 65 6e 63 65 20 7c 7c  typeReference ||
8440: 20 70 4f 62 6a 65 63 74 73 2d 3e 74 79 70 65 20   pObjects->type 
8450: 3d 3d 20 74 79 70 65 41 63 63 6f 75 6e 74 29 29  == typeAccount))
8460: 0d 0a 09 09 43 42 4c 4d 6f 64 75 6c 65 3a 3a 52  ....CBLModule::R
8470: 61 69 73 65 45 78 74 52 75 6e 74 69 6d 65 45 72  aiseExtRuntimeEr
8480: 72 6f 72 28 22 cd e5 e4 ee ef f3 f1 f2 e8 ec fb  ror("...........
8490: e9 20 f2 e8 ef 20 ef e5 f0 e2 ee e3 ee 20 ef e0  . ... ....... ..
84a0: f0 e0 ec e5 f2 f0 e0 22 2c 20 46 41 4c 53 45 29  .......", FALSE)
84b0: 3b 0d 0a 09 0d 0a 09 69 66 28 73 74 72 4e 61 6d  ;......if(strNam
84c0: 65 4f 66 54 61 62 6c 65 2e 49 73 45 6d 70 74 79  eOfTable.IsEmpty
84d0: 28 29 29 0d 0a 09 09 43 42 4c 4d 6f 64 75 6c 65  ())....CBLModule
84e0: 3a 3a 52 61 69 73 65 45 78 74 52 75 6e 74 69 6d  ::RaiseExtRuntim
84f0: 65 45 72 72 6f 72 28 22 cd e5 20 e7 e0 e4 e0 ed  eError(".. .....
8500: ee 20 e8 ec ff 20 f2 e0 e1 eb e8 f6 fb 22 2c 20  . ... .......", 
8510: 46 41 4c 53 45 29 3b 0d 0a 09 0d 0a 09 0d 0a 09  FALSE);.........
8520: 43 53 62 43 6e 74 54 79 70 65 44 65 66 2a 20 70  CSbCntTypeDef* p
8530: 52 65 66 65 72 65 6e 63 65 20 3d 20 4e 55 4c 4c  Reference = NULL
8540: 3b 0d 0a 09 43 50 6c 61 6e 44 65 66 2a 20 70 43  ;...CPlanDef* pC
8550: 68 61 72 74 4f 66 41 63 63 6f 75 6e 74 20 3d 20  hartOfAccount = 
8560: 4e 55 4c 4c 3b 0d 0a 09 42 4f 4f 4c 20 62 52 65  NULL;...BOOL bRe
8570: 66 57 69 74 68 47 72 6f 75 70 73 20 3d 20 46 41  fWithGroups = FA
8580: 4c 53 45 3b 0d 0a 09 69 66 28 21 6b 69 6e 64 4f  LSE;...if(!kindO
8590: 66 4f 62 6a 65 63 74 73 2e 49 73 45 6d 70 74 79  fObjects.IsEmpty
85a0: 28 29 29 0d 0a 09 7b 0d 0a 09 09 4c 50 43 53 54  ())...{....LPCST
85b0: 52 20 70 4b 69 6e 64 4f 66 4f 62 6a 65 63 74 73  R pKindOfObjects
85c0: 20 3d 20 6b 69 6e 64 4f 66 4f 62 6a 65 63 74 73   = kindOfObjects
85d0: 3b 0d 0a 09 09 69 66 28 70 4b 69 6e 64 4f 66 4f  ;....if(pKindOfO
85e0: 62 6a 65 63 74 73 5b 30 5d 20 3d 3d 20 27 2b 27  bjects[0] == '+'
85f0: 29 0d 0a 09 09 7b 0d 0a 09 09 09 62 52 65 66 57  )....{.....bRefW
8600: 69 74 68 47 72 6f 75 70 73 20 3d 20 54 52 55 45  ithGroups = TRUE
8610: 3b 0d 0a 09 09 09 70 4b 69 6e 64 4f 66 4f 62 6a  ;.....pKindOfObj
8620: 65 63 74 73 2b 2b 3b 0d 0a 09 09 7d 0d 0a 09 09  ects++;....}....
8630: 70 52 65 66 65 72 65 6e 63 65 20 3d 20 70 4d 65  pReference = pMe
8640: 74 61 44 61 74 61 43 6f 6e 74 2d 3e 47 65 74 53  taDataCont->GetS
8650: 54 79 70 65 44 65 66 28 70 4b 69 6e 64 4f 66 4f  TypeDef(pKindOfO
8660: 62 6a 65 63 74 73 29 3b 0d 0a 09 09 69 66 28 21  bjects);....if(!
8670: 70 52 65 66 65 72 65 6e 63 65 29 0d 0a 09 09 7b  pReference)....{
8680: 0d 0a 09 09 09 43 42 75 68 44 65 66 2a 20 70 42  .....CBuhDef* pB
8690: 75 68 20 3d 20 70 4d 65 74 61 44 61 74 61 43 6f  uh = pMetaDataCo
86a0: 6e 74 2d 3e 47 65 74 42 75 68 44 65 66 28 29 3b  nt->GetBuhDef();
86b0: 0d 0a 09 09 09 69 66 28 70 42 75 68 29 0d 0a 09  .....if(pBuh)...
86c0: 09 09 09 70 43 68 61 72 74 4f 66 41 63 63 6f 75  ...pChartOfAccou
86d0: 6e 74 20 3d 20 70 42 75 68 2d 3e 47 65 74 50 6c  nt = pBuh->GetPl
86e0: 61 6e 44 65 66 28 6b 69 6e 64 4f 66 4f 62 6a 65  anDef(kindOfObje
86f0: 63 74 73 29 3b 0d 0a 09 09 09 69 66 28 21 70 43  cts);.....if(!pC
8700: 68 61 72 74 4f 66 41 63 63 6f 75 6e 74 29 0d 0a  hartOfAccount)..
8710: 09 09 09 09 43 42 4c 4d 6f 64 75 6c 65 3a 3a 52  ....CBLModule::R
8720: 61 69 73 65 45 78 74 52 75 6e 74 69 6d 65 45 72  aiseExtRuntimeEr
8730: 72 6f 72 28 22 cd e5 20 ed e0 e9 e4 e5 ed 20 f1  ror(".. ...... .
8740: ef f0 e0 e2 ee f7 ed e8 ea 20 e8 eb e8 20 ef eb  ......... ... ..
8750: e0 ed 20 f1 f7 e5 f2 ee e2 20 e7 e0 e4 e0 ed ed  .. ...... ......
8760: ee e3 ee 20 e2 e8 e4 e0 22 2c 20 46 41 4c 53 45  ... ....", FALSE
8770: 29 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 0d 0a  );....}...}.....
8780: 09 69 66 28 70 52 65 66 65 72 65 6e 63 65 20 26  .if(pReference &
8790: 26 20 70 52 65 66 65 72 65 6e 63 65 2d 3e 47 65  & pReference->Ge
87a0: 74 4c 65 76 65 6c 73 4c 69 6d 69 74 28 29 20 3c  tLevelsLimit() <
87b0: 3d 20 31 29 0d 0a 09 09 70 52 65 66 65 72 65 6e  = 1)....pReferen
87c0: 63 65 20 3d 20 4e 55 4c 4c 3b 20 2f 2f 20 f0 e0  ce = NULL; // ..
87d0: e7 e2 ee f0 e0 f7 e8 e2 e0 f2 fc 20 ef ee 20 ee  ........... .. .
87e0: e4 ed ee f3 f0 ee e2 ed e5 ec f3 20 f1 ef f0 e0  ........... ....
87f0: e2 ee f7 ed e8 ea f3 20 e3 eb f3 ef ee 2e 0d 0a  ....... ........
8800: 09 69 66 28 28 70 52 65 66 65 72 65 6e 63 65 20  .if((pReference 
8810: 7c 7c 20 70 43 68 61 72 74 4f 66 41 63 63 6f 75  || pChartOfAccou
8820: 6e 74 29 20 26 26 20 21 70 44 61 74 61 44 69 63  nt) && !pDataDic
8830: 74 29 0d 0a 09 09 43 42 4c 4d 6f 64 75 6c 65 3a  t)....CBLModule:
8840: 3a 52 61 69 73 65 45 78 74 52 75 6e 74 69 6d 65  :RaiseExtRuntime
8850: 45 72 72 6f 72 28 22 ce e1 f0 e0 e1 ee f2 ea e0  Error(".........
8860: 20 e8 e5 f0 e0 f0 f5 e8 e8 20 e2 ee e7 ec ee e6   ........ ......
8870: ed e0 20 f2 ee eb fc ea ee 20 e2 20 44 42 46 20  .. ...... . DBF 
8880: e1 e0 e7 e0 f5 22 2c 20 46 41 4c 53 45 29 3b 0d  .....", FALSE);.
8890: 0a 09 0d 0a 09 43 53 74 72 69 6e 67 20 73 74 72  .....CString str
88a0: 53 71 6c 43 72 65 61 74 65 2c 20 73 74 72 53 71  SqlCreate, strSq
88b0: 6c 49 6e 73 65 72 74 3b 0d 0a 09 73 74 72 53 71  lInsert;...strSq
88c0: 6c 43 72 65 61 74 65 2e 46 6f 72 6d 61 74 28 0d  lCreate.Format(.
88d0: 0a 09 09 22 64 72 6f 70 20 74 61 62 6c 65 20 69  ..."drop table i
88e0: 66 20 65 78 69 73 74 73 20 25 73 3b 20 63 72 65  f exists %s; cre
88f0: 61 74 65 25 73 20 74 61 62 6c 65 20 25 73 20 28  ate%s table %s (
8900: 76 61 6c 20 63 68 61 72 28 39 29 29 22 2c 0d 0a  val char(9))",..
8910: 09 09 73 74 72 4e 61 6d 65 4f 66 54 61 62 6c 65  ..strNameOfTable
8920: 2c 20 62 41 73 50 65 72 73 69 73 74 65 6e 74 3f  , bAsPersistent?
8930: 20 22 22 20 3a 20 22 20 74 65 6d 70 22 2c 20 73   "" : " temp", s
8940: 74 72 4e 61 6d 65 4f 66 54 61 62 6c 65 29 3b 0d  trNameOfTable);.
8950: 0a 09 73 74 72 53 71 6c 49 6e 73 65 72 74 2e 46  ..strSqlInsert.F
8960: 6f 72 6d 61 74 28 22 69 6e 73 65 72 74 20 69 6e  ormat("insert in
8970: 74 6f 20 25 73 20 76 61 6c 75 65 73 28 3f 29 22  to %s values(?)"
8980: 2c 20 73 74 72 4e 61 6d 65 4f 66 54 61 62 6c 65  , strNameOfTable
8990: 29 3b 0d 0a 09 0d 0a 09 75 38 74 65 78 74 3a 3a  );......u8text::
89a0: 74 6f 55 74 66 38 28 73 74 72 53 71 6c 43 72 65  toUtf8(strSqlCre
89b0: 61 74 65 29 3b 0d 0a 09 75 38 74 65 78 74 3a 3a  ate);...u8text::
89c0: 74 6f 55 74 66 38 28 73 74 72 53 71 6c 49 6e 73  toUtf8(strSqlIns
89d0: 65 72 74 29 3b 0d 0a 09 0d 0a 09 74 72 61 6e 5f  ert);......tran_
89e0: 67 75 61 72 64 20 74 67 28 6d 5f 70 44 61 74 61  guard tg(m_pData
89f0: 42 61 73 65 29 3b 0d 0a 09 0d 0a 09 69 66 28 53  Base);......if(S
8a00: 51 4c 49 54 45 5f 4f 4b 20 21 3d 20 73 71 6c 69  QLITE_OK != sqli
8a10: 74 65 33 5f 65 78 65 63 28 6d 5f 70 44 61 74 61  te3_exec(m_pData
8a20: 42 61 73 65 2c 20 73 74 72 53 71 6c 43 72 65 61  Base, strSqlCrea
8a30: 74 65 2c 20 4e 55 4c 4c 2c 20 4e 55 4c 4c 2c 20  te, NULL, NULL, 
8a40: 4e 55 4c 4c 29 29 0d 0a 09 09 72 61 69 73 65 44  NULL))....raiseD
8a50: 42 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 09 73 71  BError();.....sq
8a60: 6c 69 74 65 33 5f 73 74 6d 74 2a 20 70 49 6e 73  lite3_stmt* pIns
8a70: 65 72 74 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 63 6f  ert = NULL;...co
8a80: 6e 73 74 20 63 68 61 72 2a 20 70 54 61 69 6c 3b  nst char* pTail;
8a90: 0d 0a 09 69 66 28 53 51 4c 49 54 45 5f 4f 4b 20  ...if(SQLITE_OK 
8aa0: 21 3d 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  != sqlite3_prepa
8ab0: 72 65 5f 76 32 28 6d 5f 70 44 61 74 61 42 61 73  re_v2(m_pDataBas
8ac0: 65 2c 20 73 74 72 53 71 6c 49 6e 73 65 72 74 2c  e, strSqlInsert,
8ad0: 20 73 74 72 53 71 6c 49 6e 73 65 72 74 2e 47 65   strSqlInsert.Ge
8ae0: 74 4c 65 6e 67 74 68 28 29 2c 20 26 70 49 6e 73  tLength(), &pIns
8af0: 65 72 74 2c 20 26 70 54 61 69 6c 29 29 0d 0a 09  ert, &pTail))...
8b00: 09 72 61 69 73 65 44 42 45 72 72 6f 72 28 29 3b  .raiseDBError();
8b10: 0d 0a 0d 0a 09 43 53 74 72 69 6e 67 20 76 61 6c  .....CString val
8b20: 3b 0d 0a 09 69 66 28 70 52 65 66 65 72 65 6e 63  ;...if(pReferenc
8b30: 65 29 0d 0a 09 09 70 75 74 76 6c 52 65 66 65 72  e)....putvlRefer
8b40: 65 6e 63 65 28 70 52 65 66 65 72 65 6e 63 65 2c  ence(pReference,
8b50: 20 70 56 4c 2c 20 70 4f 62 6a 65 63 74 73 2c 20   pVL, pObjects, 
8b60: 70 49 6e 73 65 72 74 2c 20 62 52 65 66 57 69 74  pInsert, bRefWit
8b70: 68 47 72 6f 75 70 73 29 3b 0d 0a 09 65 6c 73 65  hGroups);...else
8b80: 20 69 66 28 70 43 68 61 72 74 4f 66 41 63 63 6f   if(pChartOfAcco
8b90: 75 6e 74 29 0d 0a 09 09 70 75 74 76 6c 41 63 63  unt)....putvlAcc
8ba0: 6f 75 6e 74 73 28 70 43 68 61 72 74 4f 66 41 63  ounts(pChartOfAc
8bb0: 63 6f 75 6e 74 2c 20 70 56 4c 2c 20 70 4f 62 6a  count, pVL, pObj
8bc0: 65 63 74 73 2c 20 70 49 6e 73 65 72 74 29 3b 0d  ects, pInsert);.
8bd0: 0a 09 65 6c 73 65 09 2f 2f 20 cd e5 20 ed e0 e4  ..else.// .. ...
8be0: ee 20 f0 e0 e7 e2 ee f0 e0 f7 e8 e2 e0 f2 fc 20  . ............. 
8bf0: ef ee 20 e3 f0 f3 ef ef e0 ec 0d 0a 09 7b 0d 0a  .. ..........{..
8c00: 09 09 69 66 28 70 56 4c 29 0d 0a 09 09 7b 0d 0a  ..if(pVL)....{..
8c10: 09 09 09 43 56 61 6c 75 65 2a 2a 20 70 70 56 61  ...CValue** ppVa
8c20: 6c 73 20 3d 20 28 43 56 61 6c 75 65 2a 2a 29 70  ls = (CValue**)p
8c30: 56 4c 2d 3e 47 65 74 44 61 74 61 28 29 3b 0d 0a  VL->GetData();..
8c40: 09 09 09 66 6f 72 28 69 6e 74 20 69 20 3d 20 70  ...for(int i = p
8c50: 56 4c 2d 3e 47 65 74 53 69 7a 65 28 29 3b 20 69  VL->GetSize(); i
8c60: 2d 2d 3b 20 70 70 56 61 6c 73 2b 2b 29 0d 0a 09  --; ppVals++)...
8c70: 09 09 7b 0d 0a 09 09 09 09 56 61 6c 75 65 53 74  ..{......ValueSt
8c80: 72 57 6f 72 6b 3c 74 6f 73 39 3e 3a 3a 76 61 6c  rWork<tos9>::val
8c90: 32 73 74 72 28 2a 2a 70 70 56 61 6c 73 2c 20 76  2str(**ppVals, v
8ca0: 61 6c 29 3b 0d 0a 09 09 09 09 75 38 74 65 78 74  al);......u8text
8cb0: 3a 3a 74 6f 55 74 66 38 28 76 61 6c 29 3b 0d 0a  ::toUtf8(val);..
8cc0: 09 09 09 09 73 71 6c 69 74 65 33 5f 62 69 6e 64  ....sqlite3_bind
8cd0: 5f 74 65 78 74 28 70 49 6e 73 65 72 74 2c 20 31  _text(pInsert, 1
8ce0: 2c 20 76 61 6c 2c 20 76 61 6c 2e 47 65 74 4c 65  , val, val.GetLe
8cf0: 6e 67 74 68 28 29 2c 20 53 51 4c 49 54 45 5f 54  ngth(), SQLITE_T
8d00: 52 41 4e 53 49 45 4e 54 29 3b 0d 0a 09 09 09 09  RANSIENT);......
8d10: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 70 49 6e  sqlite3_step(pIn
8d20: 73 65 72 74 29 3b 0d 0a 09 09 09 09 73 71 6c 69  sert);......sqli
8d30: 74 65 33 5f 72 65 73 65 74 28 70 49 6e 73 65 72  te3_reset(pInser
8d40: 74 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a  t);.....}....}..
8d50: 09 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 09  ..else....{.....
8d60: 56 61 6c 75 65 53 74 72 57 6f 72 6b 3c 74 6f 73  ValueStrWork<tos
8d70: 39 3e 3a 3a 76 61 6c 32 73 74 72 28 2a 70 4f 62  9>::val2str(*pOb
8d80: 6a 65 63 74 73 2c 20 76 61 6c 29 3b 0d 0a 09 09  jects, val);....
8d90: 09 75 38 74 65 78 74 3a 3a 74 6f 55 74 66 38 28  .u8text::toUtf8(
8da0: 76 61 6c 29 3b 0d 0a 09 09 09 73 71 6c 69 74 65  val);.....sqlite
8db0: 33 5f 62 69 6e 64 5f 74 65 78 74 28 70 49 6e 73  3_bind_text(pIns
8dc0: 65 72 74 2c 20 31 2c 20 76 61 6c 2c 20 76 61 6c  ert, 1, val, val
8dd0: 2e 47 65 74 4c 65 6e 67 74 68 28 29 2c 20 53 51  .GetLength(), SQ
8de0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
8df0: 0d 0a 09 09 09 73 71 6c 69 74 65 33 5f 73 74 65  .....sqlite3_ste
8e00: 70 28 70 49 6e 73 65 72 74 29 3b 0d 0a 09 09 09  p(pInsert);.....
8e10: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 70 49  sqlite3_reset(pI
8e20: 6e 73 65 72 74 29 3b 0d 0a 09 09 7d 0d 0a 09 7d  nsert);....}...}
8e30: 0d 0a 09 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ...sqlite3_final
8e40: 69 7a 65 28 70 49 6e 73 65 72 74 29 3b 0d 0a 09  ize(pInsert);...
8e50: 74 67 2e 65 72 72 20 3d 20 46 41 4c 53 45 3b 0d  tg.err = FALSE;.
8e60: 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c 69 74  .}....void SQLit
8e70: 65 51 75 65 72 79 3a 3a 70 72 65 70 61 72 65 28  eQuery::prepare(
8e80: 63 6f 6e 73 74 20 43 53 74 72 69 6e 67 26 20 71  const CString& q
8e90: 75 65 72 79 29 0d 0a 7b 0d 0a 09 63 6c 6f 73 65  uery)..{...close
8ea0: 28 29 3b 0d 0a 09 69 66 28 21 6d 5f 70 50 61 72  ();...if(!m_pPar
8eb0: 65 6e 74 2d 3e 62 61 73 65 28 29 29 0d 0a 09 09  ent->base())....
8ec0: 43 42 4c 4d 6f 64 75 6c 65 3a 3a 52 61 69 73 65  CBLModule::Raise
8ed0: 45 78 74 52 75 6e 74 69 6d 65 45 72 72 6f 72 28  ExtRuntimeError(
8ee0: 22 c1 e0 e7 e0 20 e4 e0 ed ed fb f5 20 ed e5 20  ".... ...... .. 
8ef0: ee f2 ea f0 fb f2 e0 22 2c 20 46 41 4c 53 45 29  .......", FALSE)
8f00: 3b 0d 0a 09 0d 0a 09 43 53 74 72 69 6e 67 20 75  ;......CString u
8f10: 38 73 74 72 51 75 65 72 79 28 71 75 65 72 79 29  8strQuery(query)
8f20: 3b 0d 0a 0d 0a 09 6d 5f 70 61 72 73 65 72 2e 70  ;.....m_parser.p
8f30: 72 6f 63 65 73 73 53 71 6c 28 75 38 73 74 72 51  rocessSql(u8strQ
8f40: 75 65 72 79 29 3b 0d 0a 09 6d 5f 70 61 72 73 65  uery);...m_parse
8f50: 72 2e 72 65 73 65 74 28 29 3b 0d 0a 0d 0a 09 69  r.reset();.....i
8f60: 66 28 6d 5f 62 49 73 44 65 62 75 67 29 0d 0a 09  f(m_bIsDebug)...
8f70: 7b 0d 0a 09 09 44 6f 4d 73 67 4c 69 6e 65 28 22  {....DoMsgLine("
8f80: 25 73 22 2c 20 6d 6d 4e 6f 6e 65 2c 20 75 38 73  %s", mmNone, u8s
8f90: 74 72 51 75 65 72 79 29 3b 0d 0a 09 09 62 44 6f  trQuery);....bDo
8fa0: 54 72 61 63 65 20 3d 20 54 52 55 45 3b 0d 0a 09  Trace = TRUE;...
8fb0: 7d 0d 0a 09 0d 0a 09 75 38 74 65 78 74 3a 3a 74  }......u8text::t
8fc0: 6f 55 74 66 38 28 75 38 73 74 72 51 75 65 72 79  oUtf8(u8strQuery
8fd0: 29 3b 0d 0a 0d 0a 09 63 6f 6e 73 74 20 63 68 61  );.....const cha
8fe0: 72 2a 20 70 54 61 69 6c 3b 0d 0a 09 43 53 74 72  r* pTail;...CStr
8ff0: 69 6e 67 20 70 72 65 70 5f 65 72 72 6f 72 3b 0d  ing prep_error;.
9000: 0a 09 69 6e 74 20 72 65 73 20 3d 20 73 71 6c 69  ..int res = sqli
9010: 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 6d  te3_prepare_v2(m
9020: 5f 70 50 61 72 65 6e 74 2d 3e 62 61 73 65 28 29  _pParent->base()
9030: 2c 20 75 38 73 74 72 51 75 65 72 79 2c 20 75 38  , u8strQuery, u8
9040: 73 74 72 51 75 65 72 79 2e 47 65 74 4c 65 6e 67  strQuery.GetLeng
9050: 74 68 28 29 2c 20 26 6d 5f 70 53 74 6d 74 2c 20  th(), &m_pStmt, 
9060: 26 70 54 61 69 6c 29 3b 0d 0a 0d 0a 09 6d 5f 62  &pTail);.....m_b
9070: 49 73 44 65 62 75 67 20 3d 20 62 44 6f 54 72 61  IsDebug = bDoTra
9080: 63 65 20 3d 20 46 41 4c 53 45 3b 0d 0a 0d 0a 09  ce = FALSE;.....
9090: 69 66 28 53 51 4c 49 54 45 5f 4f 4b 20 3d 3d 20  if(SQLITE_OK == 
90a0: 72 65 73 29 0d 0a 09 7b 0d 0a 09 09 69 6e 74 20  res)...{....int 
90b0: 63 6f 6c 73 20 3d 20 73 71 6c 69 74 65 33 5f 63  cols = sqlite3_c
90c0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 6d 5f 70 53  olumn_count(m_pS
90d0: 74 6d 74 29 3b 0d 0a 09 09 69 66 28 63 6f 6c 73  tmt);....if(cols
90e0: 29 0d 0a 09 09 7b 0d 0a 09 09 09 43 4e 6f 43 61  )....{.....CNoCa
90f0: 73 65 4d 61 70 3c 63 6f 6c 75 6d 6e 5f 69 6e 66  seMap<column_inf
9100: 6f 2a 3e 20 61 6c 6c 43 6f 6c 73 3b 0d 0a 09 09  o*> allCols;....
9110: 09 43 53 74 72 69 6e 67 20 63 6f 6c 4e 61 6d 65  .CString colName
9120: 3b 0d 0a 09 09 09 77 68 69 6c 65 28 63 6f 6c 73  ;.....while(cols
9130: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 75 38 74  ).....{......u8t
9140: 65 78 74 3a 3a 66 72 6f 6d 55 74 66 38 28 73 71  ext::fromUtf8(sq
9150: 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d  lite3_column_nam
9160: 65 28 6d 5f 70 53 74 6d 74 2c 20 2d 2d 63 6f 6c  e(m_pStmt, --col
9170: 73 29 2c 20 63 6f 6c 4e 61 6d 65 29 3b 0d 0a 09  s), colName);...
9180: 09 09 09 6e 65 77 20 63 6f 6c 75 6d 6e 5f 69 6e  ...new column_in
9190: 66 6f 28 63 6f 6c 4e 61 6d 65 2c 20 63 6f 6c 73  fo(colName, cols
91a0: 2c 20 6d 5f 63 6f 6c 75 6d 6e 73 29 3b 0d 0a 09  , m_columns);...
91b0: 09 09 09 69 66 28 6d 5f 63 6f 6c 75 6d 6e 73 2d  ...if(m_columns-
91c0: 3e 74 79 70 65 20 3d 3d 20 74 74 45 72 72 6f 72  >type == ttError
91d0: 29 0d 0a 09 09 09 09 09 70 72 65 70 5f 65 72 72  ).......prep_err
91e0: 6f 72 20 3d 20 70 72 65 70 5f 65 72 72 6f 72 20  or = prep_error 
91f0: 2b 20 22 cd e5 ef f0 e0 e2 e8 eb fc ed e0 ff 20  + "............ 
9200: f2 e8 ef e8 e7 e0 f6 e8 ff 20 e2 20 ea ee eb ee  ......... . ....
9210: ed ea e5 3a 20 22 20 2b 20 63 6f 6c 4e 61 6d 65  ...: " + colName
9220: 20 2b 20 22 5c 72 5c 6e 22 3b 0d 0a 09 09 09 09   + "\r\n";......
9230: 69 66 28 61 6c 6c 43 6f 6c 73 2e 49 6e 73 65 72  if(allCols.Inser
9240: 74 45 78 69 73 74 28 6d 5f 63 6f 6c 75 6d 6e 73  tExist(m_columns
9250: 2d 3e 6e 61 6d 65 2c 20 6d 5f 63 6f 6c 75 6d 6e  ->name, m_column
9260: 73 29 29 0d 0a 09 09 09 09 09 70 72 65 70 5f 65  s)).......prep_e
9270: 72 72 6f 72 20 3d 20 70 72 65 70 5f 65 72 72 6f  rror = prep_erro
9280: 72 20 2b 20 22 ca ee eb ee ed ea e0 20 f1 20 e8  r + "....... . .
9290: ec e5 ed e5 ec 20 22 20 2b 20 6d 5f 63 6f 6c 75  ..... " + m_colu
92a0: 6d 6e 73 2d 3e 6e 61 6d 65 20 2b 20 22 20 f3 e6  mns->name + " ..
92b0: e5 20 f1 f3 f9 e5 f1 f2 e2 f3 e5 f2 5c 72 5c 6e  . ..........\r\n
92c0: 22 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 69 66 28  ";.....}.....if(
92d0: 70 72 65 70 5f 65 72 72 6f 72 2e 49 73 45 6d 70  prep_error.IsEmp
92e0: 74 79 28 29 29 0d 0a 09 09 09 7b 0d 0a 09 09 09  ty()).....{.....
92f0: 09 66 6f 72 28 63 6f 6c 75 6d 6e 5f 69 6e 66 6f  .for(column_info
9300: 2a 20 70 74 72 31 20 3d 20 6d 5f 63 6f 6c 75 6d  * ptr1 = m_colum
9310: 6e 73 3b 20 70 74 72 31 3b 20 70 74 72 31 20 3d  ns; ptr1; ptr1 =
9320: 20 70 74 72 31 2d 3e 6e 65 78 74 29 0d 0a 09 09   ptr1->next)....
9330: 09 09 7b 0d 0a 09 09 09 09 09 69 66 28 70 74 72  ..{.......if(ptr
9340: 31 2d 3e 74 79 70 65 20 3d 3d 20 74 74 44 6f 63  1->type == ttDoc
9350: 75 6d 65 6e 74 20 7c 7c 20 70 74 72 31 2d 3e 74  ument || ptr1->t
9360: 79 70 65 20 3d 3d 20 74 74 53 75 62 63 6f 6e 74  ype == ttSubcont
9370: 6f 29 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09  o).......{......
9380: 09 09 69 66 28 21 61 6c 6c 43 6f 6c 73 2e 4c 6f  ..if(!allCols.Lo
9390: 6f 6b 75 70 28 70 74 72 31 2d 3e 6e 61 6d 65 20  okup(ptr1->name 
93a0: 2b 20 22 5f e2 e8 e4 22 2c 20 70 74 72 31 2d 3e  + "_...", ptr1->
93b0: 6c 69 6e 6b 65 64 46 69 65 6c 64 29 29 0d 0a 09  linkedField))...
93c0: 09 09 09 09 09 09 61 6c 6c 43 6f 6c 73 2e 4c 6f  ......allCols.Lo
93d0: 6f 6b 75 70 28 70 74 72 31 2d 3e 6e 61 6d 65 20  okup(ptr1->name 
93e0: 2b 20 22 5f 6b 69 6e 64 22 2c 20 70 74 72 31 2d  + "_kind", ptr1-
93f0: 3e 6c 69 6e 6b 65 64 46 69 65 6c 64 29 3b 0d 0a  >linkedField);..
9400: 09 09 09 09 09 09 69 66 28 21 70 74 72 31 2d 3e  ......if(!ptr1->
9410: 6c 69 6e 6b 65 64 46 69 65 6c 64 20 26 26 20 70  linkedField && p
9420: 74 72 31 2d 3e 74 79 70 65 20 3d 3d 20 74 74 53  tr1->type == ttS
9430: 75 62 63 6f 6e 74 6f 29 0d 0a 09 09 09 09 09 09  ubconto)........
9440: 09 70 72 65 70 5f 65 72 72 6f 72 20 3d 20 70 72  .prep_error = pr
9450: 65 70 5f 65 72 72 6f 72 20 2b 20 22 c4 eb ff 20  ep_error + "... 
9460: ea ee eb ee ed ea e8 20 22 20 2b 20 70 74 72 31  ....... " + ptr1
9470: 2d 3e 6e 61 6d 65 20 2b 20 22 20 ed e5 20 ed e0  ->name + " .. ..
9480: e9 e4 e5 ed e0 20 f2 e8 ef e8 e7 e8 f0 f3 fe f9  ..... ..........
9490: e0 ff 20 ea ee eb ee ed ea e0 2e 5c 72 5c 6e 22  .. ........\r\n"
94a0: 3b 0d 0a 09 09 09 09 09 09 69 66 28 70 74 72 31  ;........if(ptr1
94b0: 2d 3e 6c 69 6e 6b 65 64 46 69 65 6c 64 20 26 26  ->linkedField &&
94c0: 20 70 74 72 31 2d 3e 74 79 70 65 20 3d 3d 20 74   ptr1->type == t
94d0: 74 44 6f 63 75 6d 65 6e 74 29 0d 0a 09 09 09 09  tDocument)......
94e0: 09 09 09 70 74 72 31 2d 3e 74 79 70 65 20 3d 20  ...ptr1->type = 
94f0: 74 74 44 6f 63 75 6d 65 6e 74 57 69 74 68 4c 69  ttDocumentWithLi
9500: 6e 6b 3b 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09  nk;.......}.....
9510: 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09  .}.....}....}...
9520: 7d 0d 0a 09 65 6c 73 65 0d 0a 09 09 75 38 74 65  }...else....u8te
9530: 78 74 3a 3a 66 72 6f 6d 55 74 66 38 28 73 71 6c  xt::fromUtf8(sql
9540: 69 74 65 33 5f 65 72 72 6d 73 67 28 6d 5f 70 50  ite3_errmsg(m_pP
9550: 61 72 65 6e 74 2d 3e 62 61 73 65 28 29 29 2c 20  arent->base()), 
9560: 70 72 65 70 5f 65 72 72 6f 72 29 3b 0d 0a 0d 0a  prep_error);....
9570: 09 69 66 28 21 70 72 65 70 5f 65 72 72 6f 72 2e  .if(!prep_error.
9580: 49 73 45 6d 70 74 79 28 29 29 0d 0a 09 7b 0d 0a  IsEmpty())...{..
9590: 09 09 63 6c 6f 73 65 28 29 3b 0d 0a 09 09 43 42  ..close();....CB
95a0: 4c 4d 6f 64 75 6c 65 3a 3a 52 61 69 73 65 45 78  LModule::RaiseEx
95b0: 74 52 75 6e 74 69 6d 65 45 72 72 6f 72 28 70 72  tRuntimeError(pr
95c0: 65 70 5f 65 72 72 6f 72 2c 20 46 41 4c 53 45 29  ep_error, FALSE)
95d0: 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 73 74 72 75  ;...}..}....stru
95e0: 63 74 20 72 65 73 65 74 5f 73 74 6d 74 5f 67 75  ct reset_stmt_gu
95f0: 61 72 64 0d 0a 7b 0d 0a 09 72 65 73 65 74 5f 73  ard..{...reset_s
9600: 74 6d 74 5f 67 75 61 72 64 28 73 71 6c 69 74 65  tmt_guard(sqlite
9610: 33 5f 73 74 6d 74 2a 20 70 53 74 6d 74 2c 20 43  3_stmt* pStmt, C
9620: 53 74 72 69 6e 67 26 20 70 29 20 3a 0d 0a 09 09  String& p) :....
9630: 6d 5f 70 53 74 6d 74 28 70 53 74 6d 74 29 2c 20  m_pStmt(pStmt), 
9640: 6d 5f 70 72 6f 66 69 6c 65 44 65 73 74 28 70 29  m_profileDest(p)
9650: 7b 7d 0d 0a 09 7e 72 65 73 65 74 5f 73 74 6d 74  {}...~reset_stmt
9660: 5f 67 75 61 72 64 28 29 0d 0a 09 7b 0d 0a 09 09  _guard()...{....
9670: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 28 6d 5f  sqlite3_reset(m_
9680: 70 53 74 6d 74 29 3b 0d 0a 09 09 69 66 28 62 4e  pStmt);....if(bN
9690: 65 65 64 50 72 6f 66 69 6c 65 29 0d 0a 09 09 7b  eedProfile)....{
96a0: 0d 0a 09 09 09 73 74 72 50 72 6f 66 69 6c 65 2e  .....strProfile.
96b0: 52 65 70 6c 61 63 65 28 22 5c 6e 22 2c 20 22 5c  Replace("\n", "\
96c0: 72 5c 6e 22 29 3b 0d 0a 09 09 09 75 38 74 65 78  r\n");.....u8tex
96d0: 74 3a 3a 66 72 6f 6d 55 74 66 38 28 73 74 72 50  t::fromUtf8(strP
96e0: 72 6f 66 69 6c 65 2c 20 6d 5f 70 72 6f 66 69 6c  rofile, m_profil
96f0: 65 44 65 73 74 29 3b 0d 0a 09 09 09 73 74 72 50  eDest);.....strP
9700: 72 6f 66 69 6c 65 2e 45 6d 70 74 79 28 29 3b 0d  rofile.Empty();.
9710: 0a 09 09 09 62 4e 65 65 64 50 72 6f 66 69 6c 65  ....bNeedProfile
9720: 20 3d 20 46 41 4c 53 45 3b 0d 0a 09 09 7d 0d 0a   = FALSE;....}..
9730: 09 7d 0d 0a 70 72 69 76 61 74 65 3a 0d 0a 09 73  .}..private:...s
9740: 71 6c 69 74 65 33 5f 73 74 6d 74 2a 20 6d 5f 70  qlite3_stmt* m_p
9750: 53 74 6d 74 3b 0d 0a 09 43 53 74 72 69 6e 67 26  Stmt;...CString&
9760: 20 6d 5f 70 72 6f 66 69 6c 65 44 65 73 74 3b 0d   m_profileDest;.
9770: 0a 7d 3b 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c 69  .};....void SQLi
9780: 74 65 51 75 65 72 79 3a 3a 65 78 65 63 75 74 65  teQuery::execute
9790: 28 43 56 61 6c 75 65 2a 20 70 44 73 74 2c 20 43  (CValue* pDst, C
97a0: 56 61 6c 75 65 2a 20 70 44 73 74 50 61 72 61 6d  Value* pDstParam
97b0: 2c 20 43 56 61 6c 75 65 26 20 72 65 74 56 61 6c  , CValue& retVal
97c0: 29 0d 0a 7b 0d 0a 09 69 66 28 21 6d 5f 70 53 74  )..{...if(!m_pSt
97d0: 6d 74 29 0d 0a 09 09 43 42 4c 4d 6f 64 75 6c 65  mt)....CBLModule
97e0: 3a 3a 52 61 69 73 65 45 78 74 52 75 6e 74 69 6d  ::RaiseExtRuntim
97f0: 65 45 72 72 6f 72 28 22 c7 e0 ef f0 ee f1 20 ed  eError("...... .
9800: e5 20 ef ee e4 e3 ee f2 ee e2 eb e5 ed 22 2c 20  . ...........", 
9810: 46 41 4c 53 45 29 3b 0d 0a 0d 0a 09 72 65 61 64  FALSE);.....read
9820: 5f 74 72 61 6e 5f 67 75 61 72 64 20 71 67 28 6d  _tran_guard qg(m
9830: 5f 62 4e 65 65 64 54 72 61 6e 73 61 63 74 69 6f  _bNeedTransactio
9840: 6e 29 3b 0d 0a 09 72 65 73 65 74 5f 73 74 6d 74  n);...reset_stmt
9850: 5f 67 75 61 72 64 20 72 67 28 6d 5f 70 53 74 6d  _guard rg(m_pStm
9860: 74 2c 20 53 51 4c 69 74 65 42 61 73 65 3a 3a 6d  t, SQLiteBase::m
9870: 5f 74 72 61 63 65 29 3b 0d 0a 0d 0a 09 44 57 4f  _trace);.....DWO
9880: 52 44 20 63 6f 6c 73 20 3d 20 73 71 6c 69 74 65  RD cols = sqlite
9890: 33 5f 63 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 6d  3_column_count(m
98a0: 5f 70 53 74 6d 74 29 3b 0d 0a 09 69 66 28 63 6f  _pStmt);...if(co
98b0: 6c 73 29 0d 0a 09 7b 0d 0a 09 09 49 53 51 4c 69  ls)...{....ISQLi
98c0: 74 65 52 65 73 75 6c 74 4c 6f 61 64 65 72 2a 20  teResultLoader* 
98d0: 70 4c 6f 61 64 65 72 20 3d 20 4e 55 4c 4c 3b 0d  pLoader = NULL;.
98e0: 0a 09 09 0d 0a 09 09 49 56 54 52 65 73 75 6c 74  .......IVTResult
98f0: 4c 6f 61 64 65 72 20 76 74 4c 6f 61 64 65 72 3b  Loader vtLoader;
9900: 0d 0a 09 09 49 56 4c 52 65 73 75 6c 74 4c 6f 61  ....IVLResultLoa
9910: 64 65 72 20 76 6c 4c 6f 61 64 65 72 3b 0d 0a 09  der vlLoader;...
9920: 09 49 53 63 61 6c 61 72 52 65 73 75 6c 74 4c 6f  .IScalarResultLo
9930: 61 64 65 72 20 73 63 4c 6f 61 64 65 72 3b 0d 0a  ader scLoader;..
9940: 0d 0a 09 09 69 66 28 70 44 73 74 2d 3e 74 79 70  ....if(pDst->typ
9950: 65 20 3d 3d 20 74 79 70 65 4e 75 6d 62 65 72 29  e == typeNumber)
9960: 0d 0a 09 09 7b 0d 0a 09 09 09 44 57 4f 52 44 20  ....{.....DWORD 
9970: 63 6f 6c 49 6e 53 63 61 6c 61 72 20 3d 20 28 6c  colInScalar = (l
9980: 6f 6e 67 29 70 44 73 74 2d 3e 6d 5f 4e 75 6d 62  ong)pDst->m_Numb
9990: 65 72 3b 0d 0a 09 09 09 69 66 28 63 6f 6c 49 6e  er;.....if(colIn
99a0: 53 63 61 6c 61 72 20 3c 20 63 6f 6c 73 29 0d 0a  Scalar < cols)..
99b0: 09 09 09 7b 0d 0a 09 09 09 09 73 63 4c 6f 61 64  ...{......scLoad
99c0: 65 72 2e 73 65 74 43 6f 6c 28 63 6f 6c 49 6e 53  er.setCol(colInS
99d0: 63 61 6c 61 72 29 3b 0d 0a 09 09 09 09 70 4c 6f  calar);......pLo
99e0: 61 64 65 72 20 3d 20 26 73 63 4c 6f 61 64 65 72  ader = &scLoader
99f0: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 65  ;.....}.....else
9a00: 0d 0a 09 09 09 09 43 42 4c 4d 6f 64 75 6c 65 3a  ......CBLModule:
9a10: 3a 52 61 69 73 65 45 78 74 52 75 6e 74 69 6d 65  :RaiseExtRuntime
9a20: 45 72 72 6f 72 28 22 cd e5 e2 e5 f0 ed fb e9 20  Error("........ 
9a30: ed ee ec e5 f0 20 ea ee eb ee ed ea e8 20 f1 ea  ..... ....... ..
9a40: e0 eb ff f0 ed ee e3 ee 20 f0 e5 e7 f3 eb fc f2  ........ .......
9a50: e0 f2 e0 22 2c 20 46 41 4c 53 45 29 3b 0d 0a 09  ...", FALSE);...
9a60: 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28 70 44  .}....else if(pD
9a70: 73 74 2d 3e 74 79 70 65 20 3d 3d 20 31 30 30 29  st->type == 100)
9a80: 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 43 42 4c  ....{.....if(CBL
9a90: 43 6f 6e 74 65 78 74 2a 20 70 43 6f 6e 74 20 3d  Context* pCont =
9aa0: 20 70 44 73 74 2d 3e 6d 5f 43 6f 6e 74 65 78 74   pDst->m_Context
9ab0: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28  ).....{......if(
9ac0: 30 20 3d 3d 20 73 74 72 63 6d 70 28 70 43 6f 6e  0 == strcmp(pCon
9ad0: 74 2d 3e 47 65 74 52 75 6e 74 69 6d 65 43 6c 61  t->GetRuntimeCla
9ae0: 73 73 28 29 2d 3e 6d 5f 6c 70 73 7a 43 6c 61 73  ss()->m_lpszClas
9af0: 73 4e 61 6d 65 2c 20 22 43 56 61 6c 75 65 54 61  sName, "CValueTa
9b00: 62 6c 65 43 6f 6e 74 65 78 74 22 29 29 0d 0a 09  bleContext"))...
9b10: 09 09 09 7b 0d 0a 09 09 09 09 09 76 74 4c 6f 61  ...{.......vtLoa
9b20: 64 65 72 2e 73 65 74 43 6f 6e 74 65 78 74 28 70  der.setContext(p
9b30: 43 6f 6e 74 29 3b 0d 0a 09 09 09 09 09 70 4c 6f  Cont);.......pLo
9b40: 61 64 65 72 20 3d 20 26 76 74 4c 6f 61 64 65 72  ader = &vtLoader
9b50: 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 65 6c  ;......}......el
9b60: 73 65 20 69 66 28 30 20 3d 3d 20 73 74 72 63 6d  se if(0 == strcm
9b70: 70 28 70 43 6f 6e 74 2d 3e 47 65 74 52 75 6e 74  p(pCont->GetRunt
9b80: 69 6d 65 43 6c 61 73 73 28 29 2d 3e 6d 5f 6c 70  imeClass()->m_lp
9b90: 73 7a 43 6c 61 73 73 4e 61 6d 65 2c 20 22 43 56  szClassName, "CV
9ba0: 61 6c 75 65 4c 69 73 74 43 6f 6e 74 65 78 74 22  alueListContext"
9bb0: 29 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09  ))......{.......
9bc0: 76 6c 4c 6f 61 64 65 72 2e 73 65 74 43 6f 6e 74  vlLoader.setCont
9bd0: 65 78 74 28 70 43 6f 6e 74 29 3b 0d 0a 09 09 09  ext(pCont);.....
9be0: 09 09 70 4c 6f 61 64 65 72 20 3d 20 26 76 6c 4c  ..pLoader = &vlL
9bf0: 6f 61 64 65 72 3b 0d 0a 09 09 09 09 7d 0d 0a 09  oader;......}...
9c00: 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 43 61  ...else.......Ca
9c10: 73 74 43 6f 6e 74 65 78 74 3a 3a 44 79 6e 61 6d  stContext::Dynam
9c20: 69 63 28 70 43 6f 6e 74 2c 20 70 4c 6f 61 64 65  ic(pCont, pLoade
9c30: 72 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a  r);.....}....}..
9c40: 09 09 65 6c 73 65 20 69 66 28 70 44 73 74 2d 3e  ..else if(pDst->
9c50: 49 73 45 6d 70 74 79 28 29 29 0d 0a 09 09 7b 0d  IsEmpty())....{.
9c60: 0a 09 09 09 43 56 61 6c 75 65 20 76 61 6c 3b 0d  ....CValue val;.
9c70: 0a 09 09 09 4c 6f 61 64 56 61 6c 75 65 46 72 6f  ....LoadValueFro
9c80: 6d 53 74 72 69 6e 67 28 26 76 61 6c 2c 20 22 7b  mString(&val, "{
9c90: 5c 22 56 54 5c 22 2c 5c 22 31 5c 22 2c 7b 5c 22  \"VT\",\"1\",{\"
9ca0: 30 5c 22 2c 7b 7b 5c 22 5c 22 2c 5c 22 30 5c 22  0\",{{\"\",\"0\"
9cb0: 2c 5c 22 30 5c 22 2c 5c 22 30 5c 22 2c 5c 22 5c  ,\"0\",\"0\",\"\
9cc0: 22 2c 5c 22 32 5c 22 7d 7d 7d 7d 22 29 3b 0d 0a  ",\"2\"}}}}");..
9cd0: 09 09 09 76 74 4c 6f 61 64 65 72 2e 73 65 74 43  ...vtLoader.setC
9ce0: 6f 6e 74 65 78 74 28 76 61 6c 2e 6d 5f 43 6f 6e  ontext(val.m_Con
9cf0: 74 65 78 74 29 3b 0d 0a 09 09 09 70 4c 6f 61 64  text);.....pLoad
9d00: 65 72 20 3d 20 26 76 74 4c 6f 61 64 65 72 3b 0d  er = &vtLoader;.
9d10: 0a 09 09 7d 0d 0a 09 09 69 66 28 21 70 4c 6f 61  ...}....if(!pLoa
9d20: 64 65 72 29 0d 0a 09 09 09 43 42 4c 4d 6f 64 75  der).....CBLModu
9d30: 6c 65 3a 3a 52 61 69 73 65 45 78 74 52 75 6e 74  le::RaiseExtRunt
9d40: 69 6d 65 45 72 72 6f 72 28 22 cd e5 20 f3 e4 e0  imeError(".. ...
9d50: eb ee f1 fc 20 f1 ee e7 e4 e0 f2 fc 20 ee e1 fa  .... ....... ...
9d60: e5 ea f2 2d ef f0 e8 e5 ec ed e8 ea 22 2c 20 46  ...-........", F
9d70: 41 4c 53 45 29 3b 0d 0a 09 09 0d 0a 09 09 63 6f  ALSE);........co
9d80: 6c 73 20 3d 20 70 4c 6f 61 64 65 72 2d 3e 69 6e  ls = pLoader->in
9d90: 69 74 28 63 6f 6c 73 2c 20 6d 5f 70 50 61 72 65  it(cols, m_pPare
9da0: 6e 74 2d 3e 62 61 73 65 28 29 2c 20 70 44 73 74  nt->base(), pDst
9db0: 50 61 72 61 6d 29 3b 0d 0a 09 09 0d 0a 09 09 73  Param);........s
9dc0: 74 72 75 63 74 20 76 61 6c 5f 61 72 72 61 79 0d  truct val_array.
9dd0: 0a 09 09 7b 0d 0a 09 09 09 43 56 61 6c 75 65 20  ...{.....CValue 
9de0: 2a 70 56 61 6c 73 2c 20 2a 2a 70 70 56 61 6c 73  *pVals, **ppVals
9df0: 3b 0d 0a 09 09 09 76 61 6c 5f 61 72 72 61 79 28  ;.....val_array(
9e00: 44 57 4f 52 44 20 63 6f 6c 73 29 0d 0a 09 09 09  DWORD cols).....
9e10: 7b 0d 0a 09 09 09 09 70 56 61 6c 73 20 3d 20 6e  {......pVals = n
9e20: 65 77 20 43 56 61 6c 75 65 5b 63 6f 6c 73 5d 3b  ew CValue[cols];
9e30: 0d 0a 09 09 09 09 70 70 56 61 6c 73 20 3d 20 6e  ......ppVals = n
9e40: 65 77 20 43 56 61 6c 75 65 2a 5b 63 6f 6c 73 5d  ew CValue*[cols]
9e50: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 7e 76 61 6c  ;.....}.....~val
9e60: 5f 61 72 72 61 79 28 29 0d 0a 09 09 09 7b 0d 0a  _array().....{..
9e70: 09 09 09 09 64 65 6c 65 74 65 20 5b 5d 20 70 70  ....delete [] pp
9e80: 56 61 6c 73 3b 0d 0a 09 09 09 09 64 65 6c 65 74  Vals;......delet
9e90: 65 20 5b 5d 20 70 56 61 6c 73 3b 0d 0a 09 09 09  e [] pVals;.....
9ea0: 7d 0d 0a 09 09 7d 3b 0d 0a 0d 0a 09 09 76 61 6c  }....};......val
9eb0: 5f 61 72 72 61 79 20 76 61 28 63 6f 6c 73 29 3b  _array va(cols);
9ec0: 0d 0a 09 09 43 56 61 6c 75 65 2a 20 70 56 61 6c  ....CValue* pVal
9ed0: 73 20 3d 20 76 61 2e 70 56 61 6c 73 3b 0d 0a 09  s = va.pVals;...
9ee0: 09 43 56 61 6c 75 65 2a 2a 20 70 70 56 61 6c 73  .CValue** ppVals
9ef0: 20 3d 20 76 61 2e 70 70 56 61 6c 73 3b 0d 0a 0d   = va.ppVals;...
9f00: 0a 09 09 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 2a 20  ...column_info* 
9f10: 70 43 6f 6c 49 6e 66 6f 20 3d 20 6d 5f 63 6f 6c  pColInfo = m_col
9f20: 75 6d 6e 73 3b 0d 0a 09 09 0d 0a 09 09 66 6f 72  umns;........for
9f30: 28 44 57 4f 52 44 20 69 20 3d 20 30 3b 20 69 20  (DWORD i = 0; i 
9f40: 3c 20 63 6f 6c 73 3b 20 69 2b 2b 29 0d 0a 09 09  < cols; i++)....
9f50: 7b 0d 0a 09 09 09 70 4c 6f 61 64 65 72 2d 3e 73  {.....pLoader->s
9f60: 65 74 43 6f 6c 75 6d 6e 28 69 2c 20 70 43 6f 6c  etColumn(i, pCol
9f70: 49 6e 66 6f 2d 3e 6e 61 6d 65 2c 20 70 43 6f 6c  Info->name, pCol
9f80: 49 6e 66 6f 2d 3e 74 79 70 65 46 6f 72 56 54 43  Info->typeForVTC
9f90: 6f 6c 75 6d 6e 29 3b 0d 0a 09 09 09 70 70 56 61  olumn);.....ppVa
9fa0: 6c 73 5b 69 5d 20 3d 20 70 56 61 6c 73 20 2b 20  ls[i] = pVals + 
9fb0: 69 3b 0d 0a 09 09 09 70 43 6f 6c 49 6e 66 6f 20  i;.....pColInfo 
9fc0: 3d 20 70 43 6f 6c 49 6e 66 6f 2d 3e 6e 65 78 74  = pColInfo->next
9fd0: 3b 0d 0a 09 09 7d 0d 0a 09 09 66 6f 72 28 3b 3b  ;....}....for(;;
9fe0: 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 6e 74 20 72  )....{.....int r
9ff0: 65 74 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 65  et = sqlite3_ste
a000: 70 28 6d 5f 70 53 74 6d 74 29 3b 0d 0a 09 09 09  p(m_pStmt);.....
a010: 69 66 28 72 65 74 20 3d 3d 20 53 51 4c 49 54 45  if(ret == SQLITE
a020: 5f 52 4f 57 29 0d 0a 09 09 09 7b 0d 0a 09 09 09  _ROW).....{.....
a030: 09 70 43 6f 6c 49 6e 66 6f 20 3d 20 6d 5f 63 6f  .pColInfo = m_co
a040: 6c 75 6d 6e 73 3b 0d 0a 09 09 09 09 66 6f 72 28  lumns;......for(
a050: 69 6e 74 20 69 20 3d 20 30 3b 20 69 3c 63 6f 6c  int i = 0; i<col
a060: 73 20 3b 20 69 2b 2b 29 0d 0a 09 09 09 09 7b 0d  s ; i++)......{.
a070: 0a 09 09 09 09 09 70 43 6f 6c 49 6e 66 6f 2d 3e  ......pColInfo->
a080: 74 6f 56 61 6c 75 65 28 6d 5f 70 53 74 6d 74 2c  toValue(m_pStmt,
a090: 20 70 56 61 6c 73 20 2b 20 69 29 3b 0d 0a 09 09   pVals + i);....
a0a0: 09 09 09 70 43 6f 6c 49 6e 66 6f 20 3d 20 70 43  ...pColInfo = pC
a0b0: 6f 6c 49 6e 66 6f 2d 3e 6e 65 78 74 3b 0d 0a 09  olInfo->next;...
a0c0: 09 09 09 7d 0d 0a 09 09 09 09 70 4c 6f 61 64 65  ...}......pLoade
a0d0: 72 2d 3e 61 64 64 56 61 6c 75 65 73 28 70 70 56  r->addValues(ppV
a0e0: 61 6c 73 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09  als);.....}.....
a0f0: 65 6c 73 65 20 69 66 28 53 51 4c 49 54 45 5f 44  else if(SQLITE_D
a100: 4f 4e 45 20 3d 3d 20 72 65 74 29 0d 0a 09 09 09  ONE == ret).....
a110: 09 62 72 65 61 6b 3b 0d 0a 09 09 09 65 6c 73 65  .break;.....else
a120: 0d 0a 09 09 09 09 6d 5f 70 50 61 72 65 6e 74 2d  ......m_pParent-
a130: 3e 72 61 69 73 65 44 42 45 72 72 6f 72 28 29 3b  >raiseDBError();
a140: 0d 0a 09 09 7d 0d 0a 09 09 70 4c 6f 61 64 65 72  ....}....pLoader
a150: 2d 3e 61 73 73 69 67 6e 52 65 74 56 61 6c 75 65  ->assignRetValue
a160: 28 72 65 74 56 61 6c 29 3b 0d 0a 09 7d 0d 0a 09  (retVal);...}...
a170: 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09 69 6e 74 20  else...{....int 
a180: 72 65 73 20 3d 20 73 71 6c 69 74 65 33 5f 73 74  res = sqlite3_st
a190: 65 70 28 6d 5f 70 53 74 6d 74 29 3b 0d 0a 09 09  ep(m_pStmt);....
a1a0: 69 66 28 72 65 73 20 3d 3d 20 53 51 4c 49 54 45  if(res == SQLITE
a1b0: 5f 44 4f 4e 45 29 0d 0a 09 09 09 72 65 74 56 61  _DONE).....retVa
a1c0: 6c 20 3d 20 73 71 6c 69 74 65 33 5f 63 68 61 6e  l = sqlite3_chan
a1d0: 67 65 73 28 6d 5f 70 50 61 72 65 6e 74 2d 3e 62  ges(m_pParent->b
a1e0: 61 73 65 28 29 29 3b 0d 0a 09 09 65 6c 73 65 0d  ase());....else.
a1f0: 0a 09 09 09 6d 5f 70 50 61 72 65 6e 74 2d 3e 72  ....m_pParent->r
a200: 61 69 73 65 44 42 45 72 72 6f 72 28 29 3b 0d 0a  aiseDBError();..
a210: 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 51  .}..}....void SQ
a220: 4c 69 74 65 51 75 65 72 79 3a 3a 73 65 74 53 71  LiteQuery::setSq
a230: 6c 50 61 72 61 6d 28 63 6f 6e 73 74 20 43 56 61  lParam(const CVa
a240: 6c 75 65 26 20 70 61 72 61 6d 2c 20 63 6f 6e 73  lue& param, cons
a250: 74 20 43 56 61 6c 75 65 26 20 76 61 6c 75 65 2c  t CValue& value,
a260: 20 69 6e 74 20 6d 6f 64 2c 20 42 4f 4f 4c 20 62   int mod, BOOL b
a270: 54 68 72 6f 77 20 2f 2a 3d 20 54 52 55 45 2a 2f  Throw /*= TRUE*/
a280: 29 0d 0a 7b 0d 0a 09 69 66 28 21 6d 5f 70 53 74  )..{...if(!m_pSt
a290: 6d 74 29 0d 0a 09 09 43 42 4c 4d 6f 64 75 6c 65  mt)....CBLModule
a2a0: 3a 3a 52 61 69 73 65 45 78 74 52 75 6e 74 69 6d  ::RaiseExtRuntim
a2b0: 65 45 72 72 6f 72 28 22 c7 e0 ef f0 ee f1 20 ed  eError("...... .
a2c0: e5 20 ef ee e4 e3 ee f2 ee e2 eb e5 ed 22 2c 20  . ...........", 
a2d0: 46 41 4c 53 45 29 3b 0d 0a 0d 0a 09 43 53 74 72  FALSE);.....CStr
a2e0: 69 6e 67 20 70 61 72 61 6d 4e 61 6d 65 3b 0d 0a  ing paramName;..
a2f0: 09 69 6e 74 20 69 64 78 3b 0d 0a 09 69 66 28 70  .int idx;...if(p
a300: 61 72 61 6d 2e 74 79 70 65 20 3d 3d 20 32 29 09  aram.type == 2).
a310: 2f 2f 20 d1 f2 f0 ee ea e0 0d 0a 09 7b 0d 0a 09  // .........{...
a320: 09 70 61 72 61 6d 4e 61 6d 65 20 3d 20 70 61 72  .paramName = par
a330: 61 6d 2e 6d 5f 53 74 72 69 6e 67 3b 0d 0a 09 09  am.m_String;....
a340: 43 53 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20 70  CString name = p
a350: 61 72 61 6d 4e 61 6d 65 3b 0d 0a 09 09 75 38 74  aramName;....u8t
a360: 65 78 74 3a 3a 74 6f 55 74 66 38 28 6e 61 6d 65  ext::toUtf8(name
a370: 29 3b 0d 0a 09 09 69 64 78 20 3d 20 73 71 6c 69  );....idx = sqli
a380: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
a390: 65 72 5f 69 6e 64 65 78 28 6d 5f 70 53 74 6d 74  er_index(m_pStmt
a3a0: 2c 20 6e 61 6d 65 29 3b 0d 0a 09 7d 0d 0a 09 65  , name);...}...e
a3b0: 6c 73 65 0d 0a 09 7b 0d 0a 09 09 69 64 78 20 3d  lse...{....idx =
a3c0: 20 28 6c 6f 6e 67 29 70 61 72 61 6d 2e 47 65 74   (long)param.Get
a3d0: 4e 75 6d 65 72 69 63 28 29 3b 0d 0a 09 09 70 61  Numeric();....pa
a3e0: 72 61 6d 4e 61 6d 65 2e 46 6f 72 6d 61 74 28 22  ramName.Format("
a3f0: 25 69 22 2c 20 69 64 78 29 3b 0d 0a 09 7d 0d 0a  %i", idx);...}..
a400: 0d 0a 09 69 66 28 30 20 3d 3d 20 69 64 78 20 7c  ...if(0 == idx |
a410: 7c 20 69 64 78 20 3e 20 73 71 6c 69 74 65 33 5f  | idx > sqlite3_
a420: 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 63  bind_parameter_c
a430: 6f 75 6e 74 28 6d 5f 70 53 74 6d 74 29 29 0d 0a  ount(m_pStmt))..
a440: 09 7b 0d 0a 09 09 69 66 28 62 54 68 72 6f 77 29  .{....if(bThrow)
a450: 0d 0a 09 09 09 43 42 4c 4d 6f 64 75 6c 65 3a 3a  .....CBLModule::
a460: 52 61 69 73 65 45 78 74 52 75 6e 74 69 6d 65 45  RaiseExtRuntimeE
a470: 72 72 6f 72 28 22 cd e5 e2 e5 f0 ed fb e9 20 ed  rror("........ .
a480: ee ec e5 f0 20 ef e0 f0 e0 ec e5 f2 f0 e0 22 2c  .... .........",
a490: 20 46 41 4c 53 45 29 3b 0d 0a 09 09 72 65 74 75   FALSE);....retu
a4a0: 72 6e 3b 0d 0a 09 7d 0d 0a 09 62 69 6e 64 56 61  rn;...}...bindVa
a4b0: 6c 75 65 28 62 69 6e 64 53 71 6c 50 61 72 61 6d  lue(bindSqlParam
a4c0: 28 70 61 72 61 6d 4e 61 6d 65 2c 20 69 64 78 2c  (paramName, idx,
a4d0: 20 6d 5f 70 50 61 72 65 6e 74 2d 3e 62 61 73 65   m_pParent->base
a4e0: 28 29 2c 20 6d 5f 70 53 74 6d 74 29 2c 20 26 76  (), m_pStmt), &v
a4f0: 61 6c 75 65 2c 20 6d 6f 64 29 3b 0d 0a 7d 0d 0a  alue, mod);..}..
a500: 0d 0a 76 6f 69 64 20 53 51 4c 69 74 65 51 75 65  ..void SQLiteQue
a510: 72 79 3a 3a 63 6c 6f 73 65 28 29 0d 0a 7b 0d 0a  ry::close()..{..
a520: 09 69 66 28 6d 5f 70 53 74 6d 74 29 0d 0a 09 7b  .if(m_pStmt)...{
a530: 0d 0a 09 09 73 71 6c 69 74 65 33 5f 66 69 6e 61  ....sqlite3_fina
a540: 6c 69 7a 65 28 6d 5f 70 53 74 6d 74 29 3b 0d 0a  lize(m_pStmt);..
a550: 09 09 6d 5f 70 53 74 6d 74 20 3d 20 4e 55 4c 4c  ..m_pStmt = NULL
a560: 3b 0d 0a 09 7d 0d 0a 09 69 66 28 6d 5f 63 6f 6c  ;...}...if(m_col
a570: 75 6d 6e 73 29 0d 0a 09 7b 0d 0a 09 09 63 6f 6c  umns)...{....col
a580: 75 6d 6e 5f 69 6e 66 6f 2a 20 70 49 6e 66 6f 20  umn_info* pInfo 
a590: 3d 20 6d 5f 63 6f 6c 75 6d 6e 73 3b 0d 0a 09 09  = m_columns;....
a5a0: 77 68 69 6c 65 28 70 49 6e 66 6f 29 0d 0a 09 09  while(pInfo)....
a5b0: 7b 0d 0a 09 09 09 63 6f 6c 75 6d 6e 5f 69 6e 66  {.....column_inf
a5c0: 6f 2a 20 70 44 65 6c 20 3d 20 70 49 6e 66 6f 3b  o* pDel = pInfo;
a5d0: 0d 0a 09 09 09 70 49 6e 66 6f 20 3d 20 70 49 6e  .....pInfo = pIn
a5e0: 66 6f 2d 3e 6e 65 78 74 3b 0d 0a 09 09 09 64 65  fo->next;.....de
a5f0: 6c 65 74 65 20 70 44 65 6c 3b 0d 0a 09 09 7d 0d  lete pDel;....}.
a600: 0a 09 09 6d 5f 63 6f 6c 75 6d 6e 73 20 3d 20 4e  ...m_columns = N
a610: 55 4c 4c 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76  ULL;...}..}....v
a620: 6f 69 64 20 53 51 4c 69 74 65 51 75 65 72 79 3a  oid SQLiteQuery:
a630: 3a 67 65 74 46 69 65 6c 64 73 28 43 53 74 72 69  :getFields(CStri
a640: 6e 67 41 72 72 61 79 26 20 66 69 65 6c 64 73 2c  ngArray& fields,
a650: 20 54 46 41 72 72 61 79 26 20 74 79 70 65 73 29   TFArray& types)
a660: 0d 0a 7b 0d 0a 09 69 66 28 21 6d 5f 63 6f 6c 75  ..{...if(!m_colu
a670: 6d 6e 73 29 0d 0a 09 09 43 42 4c 4d 6f 64 75 6c  mns)....CBLModul
a680: 65 3a 3a 52 61 69 73 65 45 78 74 52 75 6e 74 69  e::RaiseExtRunti
a690: 6d 65 45 72 72 6f 72 28 22 c7 e0 ef f0 ee f1 20  meError("...... 
a6a0: ed e5 20 ef ee e4 e3 ee f2 ee e2 eb e5 ed 22 2c  .. ...........",
a6b0: 20 46 41 4c 53 45 29 3b 0d 0a 09 63 6f 6c 75 6d   FALSE);...colum
a6c0: 6e 5f 69 6e 66 6f 2a 20 70 49 6e 66 6f 20 3d 20  n_info* pInfo = 
a6d0: 6d 5f 63 6f 6c 75 6d 6e 73 3b 0d 0a 09 44 57 4f  m_columns;...DWO
a6e0: 52 44 20 73 20 3d 20 73 71 6c 69 74 65 33 5f 63  RD s = sqlite3_c
a6f0: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 6d 5f 70 53  olumn_count(m_pS
a700: 74 6d 74 29 3b 0d 0a 09 66 69 65 6c 64 73 2e 53  tmt);...fields.S
a710: 65 74 53 69 7a 65 28 73 29 3b 0d 0a 09 74 79 70  etSize(s);...typ
a720: 65 73 2e 53 65 74 53 69 7a 65 28 73 29 3b 0d 0a  es.SetSize(s);..
a730: 09 74 79 70 65 73 4f 66 46 69 65 6c 64 73 2a 20  .typesOfFields* 
a740: 70 54 79 70 65 73 20 3d 20 74 79 70 65 73 2e 47  pTypes = types.G
a750: 65 74 44 61 74 61 28 29 3b 0d 0a 09 43 53 74 72  etData();...CStr
a760: 69 6e 67 2a 20 70 53 74 72 69 6e 67 20 3d 20 66  ing* pString = f
a770: 69 65 6c 64 73 2e 47 65 74 44 61 74 61 28 29 3b  ields.GetData();
a780: 0d 0a 09 77 68 69 6c 65 28 70 49 6e 66 6f 29 0d  ...while(pInfo).
a790: 0a 09 7b 0d 0a 09 09 2a 70 53 74 72 69 6e 67 2b  ..{....*pString+
a7a0: 2b 20 3d 20 70 49 6e 66 6f 2d 3e 6e 61 6d 65 3b  + = pInfo->name;
a7b0: 0d 0a 09 09 2a 70 54 79 70 65 73 2b 2b 20 3d 20  ....*pTypes++ = 
a7c0: 70 49 6e 66 6f 2d 3e 74 79 70 65 3b 0d 0a 09 09  pInfo->type;....
a7d0: 70 49 6e 66 6f 20 3d 20 70 49 6e 66 6f 2d 3e 6e  pInfo = pInfo->n
a7e0: 65 78 74 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76  ext;...}..}....v
a7f0: 6f 69 64 20 53 51 4c 69 74 65 51 75 65 72 79 3a  oid SQLiteQuery:
a800: 3a 74 79 70 65 46 69 65 6c 64 28 43 53 74 72 69  :typeField(CStri
a810: 6e 67 26 20 6e 61 6d 65 2c 20 43 53 74 72 69 6e  ng& name, CStrin
a820: 67 2a 20 70 54 79 70 65 29 0d 0a 7b 0d 0a 09 6e  g* pType)..{...n
a830: 61 6d 65 2e 54 72 69 6d 4c 65 66 74 28 27 5b 27  ame.TrimLeft('['
a840: 29 3b 0d 0a 09 6e 61 6d 65 2e 54 72 69 6d 52 69  );...name.TrimRi
a850: 67 68 74 28 27 5d 27 29 3b 0d 0a 09 0d 0a 09 69  ght(']');......i
a860: 6e 74 20 69 73 54 79 70 65 64 20 3d 20 6e 61 6d  nt isTyped = nam
a870: 65 2e 46 69 6e 64 28 27 3a 27 29 3b 0d 0a 09 69  e.Find(':');...i
a880: 66 28 69 73 54 79 70 65 64 20 3c 20 30 29 0d 0a  f(isTyped < 0)..
a890: 09 09 69 73 54 79 70 65 64 20 3d 20 6e 61 6d 65  ..isTyped = name
a8a0: 2e 46 69 6e 64 28 27 24 27 29 3b 0d 0a 09 0d 0a  .Find('$');.....
a8b0: 09 69 66 28 69 73 54 79 70 65 64 20 3e 20 30 29  .if(isTyped > 0)
a8c0: 0d 0a 09 7b 0d 0a 09 09 69 66 28 70 54 79 70 65  ...{....if(pType
a8d0: 29 0d 0a 09 09 7b 0d 0a 09 09 09 2a 70 54 79 70  )....{.....*pTyp
a8e0: 65 20 3d 20 6e 61 6d 65 2e 4d 69 64 28 69 73 54  e = name.Mid(isT
a8f0: 79 70 65 64 20 2b 20 31 29 3b 0d 0a 09 09 09 70  yped + 1);.....p
a900: 54 79 70 65 2d 3e 54 72 69 6d 4c 65 66 74 28 29  Type->TrimLeft()
a910: 3b 0d 0a 09 09 09 70 54 79 70 65 2d 3e 54 72 69  ;.....pType->Tri
a920: 6d 52 69 67 68 74 28 29 3b 0d 0a 09 09 7d 0d 0a  mRight();....}..
a930: 09 09 6e 61 6d 65 2e 47 65 74 42 75 66 66 65 72  ..name.GetBuffer
a940: 53 65 74 4c 65 6e 67 74 68 28 69 73 54 79 70 65  SetLength(isType
a950: 64 29 3b 0d 0a 09 7d 0d 0a 09 6e 61 6d 65 2e 54  d);...}...name.T
a960: 72 69 6d 4c 65 66 74 28 29 3b 0d 0a 09 6e 61 6d  rimLeft();...nam
a970: 65 2e 54 72 69 6d 52 69 67 68 74 28 29 3b 0d 0a  e.TrimRight();..
a980: 09 6e 61 6d 65 2e 52 65 70 6c 61 63 65 28 27 20  .name.Replace(' 
a990: 27 2c 20 27 5f 27 29 3b 0d 0a 09 6e 61 6d 65 2e  ', '_');...name.
a9a0: 52 65 70 6c 61 63 65 28 27 2e 27 2c 20 27 5f 27  Replace('.', '_'
a9b0: 29 3b 0d 0a 7d 0d 0a 0d 0a 42 4f 4f 4c 20 43 53  );..}....BOOL CS
a9c0: 4c 44 61 74 61 42 61 73 65 3a 3a 50 75 74 56 54  LDataBase::PutVT
a9d0: 28 43 56 61 6c 75 65 2a 2a 20 70 70 50 61 72 61  (CValue** ppPara
a9e0: 6d 73 29 0d 0a 7b 0d 0a 09 43 56 61 6c 75 65 54  ms)..{...CValueT
a9f0: 61 62 6c 65 2a 20 70 56 54 20 3d 20 4e 55 4c 4c  able* pVT = NULL
aa00: 3b 2f 2f 2c 20 63 6f 6e 73 74 20 43 53 74 72 69  ;//, const CStri
aa10: 6e 67 26 20 73 74 72 4e 61 6d 65 4f 66 54 61 62  ng& strNameOfTab
aa20: 6c 65 2c 20 42 4f 4f 4c 20 62 41 73 50 65 72 73  le, BOOL bAsPers
aa30: 69 73 74 65 6e 74 0d 0a 09 69 66 28 70 70 50 61  istent...if(ppPa
aa40: 72 61 6d 73 5b 30 5d 2d 3e 74 79 70 65 20 3d 3d  rams[0]->type ==
aa50: 20 31 30 30 20 26 26 20 70 70 50 61 72 61 6d 73   100 && ppParams
aa60: 5b 30 5d 2d 3e 6d 5f 43 6f 6e 74 65 78 74 29 0d  [0]->m_Context).
aa70: 0a 09 7b 0d 0a 09 09 43 42 4c 43 6f 6e 74 65 78  ..{....CBLContex
aa80: 74 2a 20 70 43 6f 6e 74 20 3d 20 43 61 73 74 43  t* pCont = CastC
aa90: 6f 6e 74 65 78 74 3a 3a 42 79 52 54 43 4e 61 6d  ontext::ByRTCNam
aaa0: 65 28 70 70 50 61 72 61 6d 73 5b 30 5d 2d 3e 6d  e(ppParams[0]->m
aab0: 5f 43 6f 6e 74 65 78 74 2c 20 22 43 56 61 6c 75  _Context, "CValu
aac0: 65 54 61 62 6c 65 43 6f 6e 74 65 78 74 22 29 3b  eTableContext");
aad0: 0d 0a 09 09 69 66 28 70 43 6f 6e 74 29 0d 0a 09  ....if(pCont)...
aae0: 09 09 70 56 54 20 3d 20 28 28 43 56 61 6c 75 65  ..pVT = ((CValue
aaf0: 54 61 62 6c 65 43 6f 6e 74 65 78 74 44 61 74 61  TableContextData
ab00: 2a 29 70 43 6f 6e 74 2d 3e 47 65 74 49 6e 74 65  *)pCont->GetInte
ab10: 72 6e 61 6c 44 61 74 61 28 29 29 2d 3e 47 65 74  rnalData())->Get
ab20: 56 61 6c 75 65 54 61 62 6c 65 28 29 3b 0d 0a 09  ValueTable();...
ab30: 7d 0d 0a 09 69 66 28 21 70 56 54 29 0d 0a 09 09  }...if(!pVT)....
ab40: 43 42 4c 4d 6f 64 75 6c 65 3a 3a 52 61 69 73 65  CBLModule::Raise
ab50: 45 78 74 52 75 6e 74 69 6d 65 45 72 72 6f 72 28  ExtRuntimeError(
ab60: 22 cd e5 20 f3 e4 e0 eb ee f1 fc 20 ef ee eb f3  ".. ....... ....
ab70: f7 e8 f2 fc 20 f2 e0 e1 eb e8 f6 f3 20 e7 ed e0  .... ....... ...
ab80: f7 e5 ed e8 e9 20 e8 e7 20 ef e5 f0 e2 ee e3 ee  ..... .. .......
ab90: 20 ef e0 f0 e0 ec e5 f2 f0 e0 22 2c 20 46 41 4c   .........", FAL
aba0: 53 45 29 3b 0d 0a 09 70 75 74 56 54 28 70 56 54  SE);...putVT(pVT
abb0: 2c 20 70 70 50 61 72 61 6d 73 5b 31 5d 2d 3e 47  , ppParams[1]->G
abc0: 65 74 53 74 72 69 6e 67 28 29 2c 20 30 20 21 3d  etString(), 0 !=
abd0: 20 28 6c 6f 6e 67 29 70 70 50 61 72 61 6d 73 5b   (long)ppParams[
abe0: 32 5d 2d 3e 47 65 74 4e 75 6d 65 72 69 63 28 29  2]->GetNumeric()
abf0: 29 3b 0d 0a 0d 0a 09 72 65 74 75 72 6e 20 54 52  );.....return TR
ac00: 55 45 3b 0d 0a 7d 0d 0a 0d 0a 2f 2a 0d 0a cf f0  UE;..}..../*....
ac10: e8 ec e5 ed ff e5 f2 f1 ff 20 e4 eb ff 20 ef ee  ......... ... ..
ac20: e8 f1 ea e0 20 f3 f2 e5 f7 e5 ea 20 ef e0 ec ff  .... ...... ....
ac30: f2 e8 2e 0d 0a 73 74 72 75 63 74 20 6d 65 6d 5f  .....struct mem_
ac40: 74 65 73 74 0d 0a 7b 0d 0a 09 43 4d 61 70 50 74  test..{...CMapPt
ac50: 72 54 6f 50 74 72 20 61 6c 6c 6f 63 6b 73 3b 0d  rToPtr allocks;.
ac60: 0a 09 7e 6d 65 6d 5f 74 65 73 74 28 29 0d 0a 09  ..~mem_test()...
ac70: 7b 0d 0a 09 09 44 6f 4d 73 67 4c 69 6e 65 28 22  {....DoMsgLine("
ac80: 43 6f 75 6e 74 20 64 65 61 6c 6c 6f 63 61 74 65  Count deallocate
ac90: 64 20 25 69 22 2c 20 6d 6d 4e 6f 6e 65 2c 20 61  d %i", mmNone, a
aca0: 6c 6c 6f 63 6b 73 2e 47 65 74 43 6f 75 6e 74 28  llocks.GetCount(
acb0: 29 29 3b 0d 0a 09 09 66 6f 72 28 50 4f 53 49 54  ));....for(POSIT
acc0: 49 4f 4e 20 70 6f 73 20 3d 20 61 6c 6c 6f 63 6b  ION pos = allock
acd0: 73 2e 47 65 74 53 74 61 72 74 50 6f 73 69 74 69  s.GetStartPositi
ace0: 6f 6e 28 29 3b 20 70 6f 73 3b 29 0d 0a 09 09 7b  on(); pos;)....{
acf0: 0d 0a 09 09 09 44 57 4f 52 44 20 73 3b 0d 0a 09  .....DWORD s;...
ad00: 09 09 76 6f 69 64 2a 20 70 3b 0d 0a 09 09 09 61  ..void* p;.....a
ad10: 6c 6c 6f 63 6b 73 2e 47 65 74 4e 65 78 74 41 73  llocks.GetNextAs
ad20: 73 6f 63 28 70 6f 73 2c 20 70 2c 20 28 76 6f 69  soc(pos, p, (voi
ad30: 64 2a 26 29 73 29 3b 0d 0a 09 09 7d 0d 0a 09 7d  d*&)s);....}...}
ad40: 0d 0a 7d 20 5f 6d 65 6d 5f 3b 0d 0a 0d 0a 76 6f  ..} _mem_;....vo
ad50: 69 64 2a 20 6f 70 65 72 61 74 6f 72 20 6e 65 77  id* operator new
ad60: 20 28 73 69 7a 65 5f 74 20 73 29 0d 0a 7b 0d 0a   (size_t s)..{..
ad70: 09 69 66 28 73 20 3d 3d 20 30 29 0d 0a 09 7b 0d  .if(s == 0)...{.
ad80: 0a 09 09 44 6f 4d 73 67 4c 69 6e 65 28 22 61 61  ...DoMsgLine("aa
ad90: 22 29 3b 0d 0a 09 7d 0d 0a 09 76 6f 69 64 2a 20  ");...}...void* 
ada0: 70 20 3d 20 6d 61 6c 6c 6f 63 28 73 29 3b 0d 0a  p = malloc(s);..
adb0: 09 5f 6d 65 6d 5f 2e 61 6c 6c 6f 63 6b 73 5b 70  ._mem_.allocks[p
adc0: 5d 20 3d 20 28 76 6f 69 64 2a 29 73 3b 0d 0a 09  ] = (void*)s;...
add0: 72 65 74 75 72 6e 20 70 3b 0d 0a 7d 0d 0a 0d 0a  return p;..}....
ade0: 76 6f 69 64 20 6f 70 65 72 61 74 6f 72 20 64 65  void operator de
adf0: 6c 65 74 65 28 76 6f 69 64 2a 20 70 29 0d 0a 7b  lete(void* p)..{
ae00: 0d 0a 09 69 66 28 70 29 0d 0a 09 7b 0d 0a 09 09  ...if(p)...{....
ae10: 5f 6d 65 6d 5f 2e 61 6c 6c 6f 63 6b 73 2e 52 65  _mem_.allocks.Re
ae20: 6d 6f 76 65 4b 65 79 28 70 29 3b 0d 0a 09 09 66  moveKey(p);....f
ae30: 72 65 65 28 70 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a  ree(p);...}..}..
ae40: 2a 2f 0d 0a 0d 0a                                */....