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 */....