0000: 2f 2f 20 64 61 74 61 70 72 6f 76 69 64 65 72 2e // dataprovider.
0010: 63 70 70 0d 0a 23 69 6e 63 6c 75 64 65 20 22 53 cpp..#include "S
0020: 74 64 41 66 78 2e 68 22 0d 0a 23 69 6e 63 6c 75 tdAfx.h"..#inclu
0030: 64 65 20 22 64 61 74 61 70 72 6f 76 69 64 65 72 de "dataprovider
0040: 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 22 76 .h"..#include "v
0050: 61 6c 75 65 77 6f 72 6b 2e 68 70 70 22 0d 0a 0d aluework.hpp"...
0060: 0a 42 4c 5f 49 4e 49 54 5f 43 4f 4e 54 45 58 54 .BL_INIT_CONTEXT
0070: 28 53 51 4c 69 74 65 44 61 74 61 50 72 6f 76 69 (SQLiteDataProvi
0080: 64 65 72 29 3b 0d 0a 0d 0a 63 6f 6e 73 74 20 63 der);....const c
0090: 68 61 72 20 69 64 50 61 72 61 6d 4e 61 6d 65 5b har idParamName[
00a0: 5d 09 09 3d 20 22 40 73 71 6c 69 74 65 5f 64 61 ]..= "@sqlite_da
00b0: 74 61 5f 70 72 6f 76 69 64 65 72 5f 69 64 22 3b ta_provider_id";
00c0: 0d 0a 63 6f 6e 73 74 20 63 68 61 72 20 72 6f 77 ..const char row
00d0: 43 6f 75 6e 74 50 61 72 61 6d 4e 61 6d 65 5b 5d CountParamName[]
00e0: 09 3d 20 22 40 73 71 6c 69 74 65 5f 64 61 74 61 .= "@sqlite_data
00f0: 5f 70 72 6f 76 69 64 65 72 5f 72 6f 77 63 6f 75 _provider_rowcou
0100: 6e 74 22 3b 0d 0a 63 6f 6e 73 74 20 63 68 61 72 nt";..const char
0110: 20 6b 65 79 50 61 72 61 6d 50 61 74 74 65 72 6e keyParamPattern
0120: 5b 5d 09 3d 20 22 40 73 71 6c 69 74 65 5f 64 61 [].= "@sqlite_da
0130: 74 61 5f 70 72 6f 76 69 64 65 72 5f 6b 65 79 22 ta_provider_key"
0140: 3b 0d 0a 63 6f 6e 73 74 20 63 68 61 72 20 74 72 ;..const char tr
0150: 69 6d 50 61 74 74 65 72 6e 5b 5d 09 09 3d 20 22 imPattern[]..= "
0160: 20 5c 74 5c 72 5c 6e 22 3b 0d 0a 0d 0a 69 6e 74 \t\r\n";....int
0170: 20 53 51 4c 69 74 65 44 61 74 61 52 6f 77 3a 3a SQLiteDataRow::
0180: 47 65 74 46 69 65 6c 64 43 6f 75 6e 74 28 29 0d GetFieldCount().
0190: 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 6d 5f 66 43 .{...return m_fC
01a0: 6f 75 6e 74 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 74 20 ount;..}....int
01b0: 53 51 4c 69 74 65 44 61 74 61 52 6f 77 3a 3a 47 SQLiteDataRow::G
01c0: 65 74 46 69 65 6c 64 49 6e 64 65 78 4f 66 28 4c etFieldIndexOf(L
01d0: 50 43 53 54 52 20 73 7a 46 69 65 6c 64 4e 61 6d PCSTR szFieldNam
01e0: 65 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 6d e)..{...return m
01f0: 5f 70 50 61 72 65 6e 74 2d 3e 66 69 6e 64 46 69 _pParent->findFi
0200: 65 6c 64 28 73 7a 46 69 65 6c 64 4e 61 6d 65 29 eld(szFieldName)
0210: 3b 0d 0a 7d 0d 0a 0d 0a 4c 50 43 53 54 52 20 53 ;..}....LPCSTR S
0220: 51 4c 69 74 65 44 61 74 61 52 6f 77 3a 3a 47 65 QLiteDataRow::Ge
0230: 74 46 69 65 6c 64 4e 61 6d 65 28 69 6e 74 20 6e tFieldName(int n
0240: 49 6e 64 65 78 29 0d 0a 7b 0d 0a 09 72 65 74 75 Index)..{...retu
0250: 72 6e 20 6d 5f 70 50 61 72 65 6e 74 2d 3e 66 69 rn m_pParent->fi
0260: 65 6c 64 4e 61 6d 65 28 6e 49 6e 64 65 78 29 09 eldName(nIndex).
0270: 3b 0d 0a 7d 0d 0a 0d 0a 44 61 74 61 54 79 70 65 ;..}....DataType
0280: 20 53 51 4c 69 74 65 44 61 74 61 52 6f 77 3a 3a SQLiteDataRow::
0290: 47 65 74 46 69 65 6c 64 54 79 70 65 28 69 6e 74 GetFieldType(int
02a0: 20 6e 49 6e 64 65 78 29 0d 0a 7b 0d 0a 09 73 77 nIndex)..{...sw
02b0: 69 74 63 68 28 6d 5f 70 56 61 6c 75 65 73 5b 6e itch(m_pValues[n
02c0: 49 6e 64 65 78 5d 2e 74 79 70 65 29 0d 0a 09 7b Index].type)...{
02d0: 0d 0a 09 63 61 73 65 20 74 79 70 65 4e 75 6d 62 ...case typeNumb
02e0: 65 72 3a 0d 0a 09 09 72 65 74 75 72 6e 20 64 74 er:....return dt
02f0: 4e 75 6d 65 72 69 63 3b 0d 0a 09 63 61 73 65 20 Numeric;...case
0300: 74 79 70 65 44 61 74 65 3a 0d 0a 09 09 72 65 74 typeDate:....ret
0310: 75 72 6e 20 64 74 44 61 74 65 3b 0d 0a 09 64 65 urn dtDate;...de
0320: 66 61 75 6c 74 3a 0d 0a 09 09 72 65 74 75 72 6e fault:....return
0330: 20 64 74 54 65 78 74 3b 0d 0a 09 7d 0d 0a 7d 0d dtText;...}..}.
0340: 0a 0d 0a 76 6f 69 64 20 53 51 4c 69 74 65 44 61 ...void SQLiteDa
0350: 74 61 52 6f 77 3a 3a 46 6f 72 6d 61 74 46 69 65 taRow::FormatFie
0360: 6c 64 28 69 6e 74 20 6e 49 6e 64 65 78 2c 20 43 ld(int nIndex, C
0370: 53 74 72 69 6e 67 26 20 73 74 72 56 61 6c 75 65 String& strValue
0380: 29 0d 0a 7b 0d 0a 09 43 56 37 44 61 74 61 52 6f )..{...CV7DataRo
0390: 77 3a 3a 46 6f 72 6d 61 74 56 61 6c 75 65 28 6d w::FormatValue(m
03a0: 5f 70 56 61 6c 75 65 73 5b 6e 49 6e 64 65 78 5d _pValues[nIndex]
03b0: 2c 20 73 74 72 56 61 6c 75 65 29 3b 0d 0a 7d 0d , strValue);..}.
03c0: 0a 0d 0a 55 49 4e 54 20 53 51 4c 69 74 65 44 61 ...UINT SQLiteDa
03d0: 74 61 52 6f 77 3a 3a 47 65 74 52 6f 77 49 6e 64 taRow::GetRowInd
03e0: 65 78 28 29 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e ex()..{...return
03f0: 20 30 3b 0d 0a 7d 0d 0a 0d 0a 63 6f 6e 73 74 20 0;..}....const
0400: 43 56 61 6c 75 65 26 20 53 51 4c 69 74 65 44 61 CValue& SQLiteDa
0410: 74 61 52 6f 77 3a 3a 47 65 74 56 61 6c 75 65 28 taRow::GetValue(
0420: 69 6e 74 20 6e 49 6e 64 65 78 29 20 63 6f 6e 73 int nIndex) cons
0430: 74 0d 0a 7b 0d 0a 09 72 65 74 75 72 6e 20 6d 5f t..{...return m_
0440: 70 56 61 6c 75 65 73 5b 6e 49 6e 64 65 78 5d 3b pValues[nIndex];
0450: 0d 0a 7d 0d 0a 0d 0a 53 51 4c 69 74 65 44 61 74 ..}....SQLiteDat
0460: 61 52 6f 77 3a 3a 53 51 4c 69 74 65 44 61 74 61 aRow::SQLiteData
0470: 52 6f 77 28 53 51 4c 69 74 65 44 61 74 61 50 72 Row(SQLiteDataPr
0480: 6f 76 69 64 65 72 2a 20 70 50 61 72 65 6e 74 29 ovider* pParent)
0490: 0d 0a 7b 0d 0a 09 6d 5f 70 50 61 72 65 6e 74 20 ..{...m_pParent
04a0: 3d 20 70 50 61 72 65 6e 74 3b 0d 0a 09 6d 5f 66 = pParent;...m_f
04b0: 43 6f 75 6e 74 20 3d 20 6d 5f 70 50 61 72 65 6e Count = m_pParen
04c0: 74 2d 3e 66 69 65 6c 64 73 43 6f 75 6e 74 28 29 t->fieldsCount()
04d0: 3b 0d 0a 09 6d 5f 70 56 61 6c 75 65 73 20 3d 20 ;...m_pValues =
04e0: 28 43 56 61 6c 75 65 2a 29 6e 65 77 20 63 68 61 (CValue*)new cha
04f0: 72 5b 73 69 7a 65 6f 66 28 43 56 61 6c 75 65 29 r[sizeof(CValue)
0500: 20 2a 20 6d 5f 66 43 6f 75 6e 74 5d 3b 0d 0a 7d * m_fCount];..}
0510: 0d 0a 0d 0a 53 51 4c 69 74 65 44 61 74 61 52 6f ....SQLiteDataRo
0520: 77 3a 3a 53 51 4c 69 74 65 44 61 74 61 52 6f 77 w::SQLiteDataRow
0530: 28 44 57 4f 52 44 20 66 63 29 0d 0a 7b 0d 0a 09 (DWORD fc)..{...
0540: 6d 5f 70 50 61 72 65 6e 74 20 3d 20 4e 55 4c 4c m_pParent = NULL
0550: 3b 0d 0a 09 6d 5f 66 43 6f 75 6e 74 20 3d 20 66 ;...m_fCount = f
0560: 63 3b 0d 0a 09 6d 5f 70 56 61 6c 75 65 73 20 3d c;...m_pValues =
0570: 20 28 43 56 61 6c 75 65 2a 29 6e 65 77 20 63 68 (CValue*)new ch
0580: 61 72 5b 73 69 7a 65 6f 66 28 43 56 61 6c 75 65 ar[sizeof(CValue
0590: 29 20 2a 20 6d 5f 66 43 6f 75 6e 74 5d 3b 0d 0a ) * m_fCount];..
05a0: 09 66 6f 72 28 44 57 4f 52 44 20 69 20 3d 20 30 .for(DWORD i = 0
05b0: 3b 20 69 20 3c 20 6d 5f 66 43 6f 75 6e 74 3b 20 ; i < m_fCount;
05c0: 69 2b 2b 29 0d 0a 09 09 6d 5f 70 56 61 6c 75 65 i++)....m_pValue
05d0: 73 5b 69 5d 2e 43 56 61 6c 75 65 3a 3a 43 56 61 s[i].CValue::CVa
05e0: 6c 75 65 28 29 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c lue();..}....SQL
05f0: 69 74 65 44 61 74 61 52 6f 77 3a 3a 7e 53 51 4c iteDataRow::~SQL
0600: 69 74 65 44 61 74 61 52 6f 77 28 29 0d 0a 7b 0d iteDataRow()..{.
0610: 0a 09 43 56 61 6c 75 65 2a 20 70 56 61 6c 75 65 ..CValue* pValue
0620: 20 3d 20 6d 5f 70 56 61 6c 75 65 73 3b 0d 0a 09 = m_pValues;...
0630: 66 6f 72 28 44 57 4f 52 44 20 63 20 3d 20 6d 5f for(DWORD c = m_
0640: 66 43 6f 75 6e 74 3b 20 63 2d 2d 3b 20 70 56 61 fCount; c--; pVa
0650: 6c 75 65 2b 2b 29 0d 0a 09 09 70 56 61 6c 75 65 lue++)....pValue
0660: 2d 3e 43 56 61 6c 75 65 3a 3a 7e 43 56 61 6c 75 ->CValue::~CValu
0670: 65 28 29 3b 0d 0a 09 64 65 6c 65 74 65 20 5b 5d e();...delete []
0680: 20 28 63 68 61 72 2a 29 20 6d 5f 70 56 61 6c 75 (char*) m_pValu
0690: 65 73 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 es;..}....void S
06a0: 51 4c 69 74 65 44 61 74 61 50 72 6f 76 69 64 65 QLiteDataProvide
06b0: 72 3a 3a 51 75 65 72 79 52 6f 77 73 28 43 44 61 r::QueryRows(CDa
06c0: 74 61 52 6f 77 2a 20 70 52 6f 77 46 72 6f 6d 2c taRow* pRowFrom,
06d0: 20 69 6e 74 20 6e 52 6f 77 73 43 6f 75 6e 74 2c int nRowsCount,
06e0: 20 69 6e 74 20 6e 50 61 67 65 53 69 7a 65 48 69 int nPageSizeHi
06f0: 6e 74 29 0d 0a 7b 0d 0a 09 63 6c 65 61 72 52 6f nt)..{...clearRo
0700: 77 73 28 29 3b 0d 0a 09 53 51 4c 69 74 65 51 75 ws();...SQLiteQu
0710: 65 72 79 2a 20 70 51 75 65 72 79 20 3d 20 67 65 ery* pQuery = ge
0720: 74 51 75 65 72 79 28 6e 52 6f 77 73 43 6f 75 6e tQuery(nRowsCoun
0730: 74 20 3e 20 30 20 3f 20 28 70 52 6f 77 46 72 6f t > 0 ? (pRowFro
0740: 6d 20 3f 20 71 44 6f 77 6e 20 3a 20 71 54 6f 70 m ? qDown : qTop
0750: 29 20 3a 20 28 70 52 6f 77 46 72 6f 6d 20 3f 20 ) : (pRowFrom ?
0760: 71 55 70 20 3a 20 71 42 6f 74 74 6f 6d 29 29 3b qUp : qBottom));
0770: 0d 0a 09 62 69 6e 64 4b 65 79 56 61 6c 75 65 73 ...bindKeyValues
0780: 28 70 51 75 65 72 79 2c 20 73 74 61 74 69 63 5f (pQuery, static_
0790: 63 61 73 74 3c 53 51 4c 69 74 65 44 61 74 61 52 cast<SQLiteDataR
07a0: 6f 77 2a 3e 28 70 52 6f 77 46 72 6f 6d 29 29 3b ow*>(pRowFrom));
07b0: 0d 0a 09 70 51 75 65 72 79 2d 3e 73 65 74 53 71 ...pQuery->setSq
07c0: 6c 50 61 72 61 6d 28 72 6f 77 43 6f 75 6e 74 50 lParam(rowCountP
07d0: 61 72 61 6d 4e 61 6d 65 2c 20 6e 52 6f 77 73 43 aramName, nRowsC
07e0: 6f 75 6e 74 20 3c 20 30 20 3f 20 2d 6e 52 6f 77 ount < 0 ? -nRow
07f0: 73 43 6f 75 6e 74 20 3a 20 6e 52 6f 77 73 43 6f sCount : nRowsCo
0800: 75 6e 74 2c 20 30 29 3b 0d 0a 09 44 61 74 61 50 unt, 0);...DataP
0810: 72 6f 76 69 64 65 72 52 65 73 75 6c 74 4c 6f 61 roviderResultLoa
0820: 64 65 72 20 65 78 65 63 75 74 6f 72 28 74 68 69 der executor(thi
0830: 73 2c 20 26 6d 5f 72 6f 77 73 29 3b 0d 0a 09 65 s, &m_rows);...e
0840: 78 65 63 75 74 6f 72 2e 65 78 65 63 75 74 65 28 xecutor.execute(
0850: 70 51 75 65 72 79 29 3b 0d 0a 7d 0d 0a 0d 0a 43 pQuery);..}....C
0860: 44 61 74 61 52 6f 77 2a 20 53 51 4c 69 74 65 44 DataRow* SQLiteD
0870: 61 74 61 50 72 6f 76 69 64 65 72 3a 3a 46 65 74 ataProvider::Fet
0880: 63 68 28 29 0d 0a 7b 0d 0a 09 69 66 28 6d 5f 72 ch()..{...if(m_r
0890: 6f 77 73 2e 47 65 74 53 69 7a 65 28 29 29 0d 0a ows.GetSize())..
08a0: 09 7b 0d 0a 09 09 43 44 61 74 61 52 6f 77 2a 20 .{....CDataRow*
08b0: 70 52 6f 77 20 3d 20 28 53 51 4c 69 74 65 44 61 pRow = (SQLiteDa
08c0: 74 61 52 6f 77 2a 29 6d 5f 72 6f 77 73 5b 30 5d taRow*)m_rows[0]
08d0: 3b 0d 0a 09 09 6d 5f 72 6f 77 73 2e 52 65 6d 6f ;....m_rows.Remo
08e0: 76 65 41 74 28 30 29 3b 0d 0a 09 09 72 65 74 75 veAt(0);....retu
08f0: 72 6e 20 70 52 6f 77 3b 0d 0a 09 7d 0d 0a 09 72 rn pRow;...}...r
0900: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 7d 0d 0a eturn NULL;..}..
0910: 0d 0a 42 4f 4f 4c 20 53 51 4c 69 74 65 44 61 74 ..BOOL SQLiteDat
0920: 61 50 72 6f 76 69 64 65 72 3a 3a 52 65 66 72 65 aProvider::Refre
0930: 73 68 52 6f 77 28 43 44 61 74 61 52 6f 77 2a 20 shRow(CDataRow*
0940: 70 52 6f 77 46 72 6f 6d 29 0d 0a 7b 0d 0a 09 69 pRowFrom)..{...i
0950: 66 28 6d 5f 64 65 62 75 67 29 0d 0a 09 09 44 6f f(m_debug)....Do
0960: 4d 73 67 4c 69 6e 65 28 22 cf ee f1 f2 e0 e2 f9 MsgLine(".......
0970: e8 e5 20 e4 e0 ed ed fb f5 20 53 51 4c 69 74 65 .. ...... SQLite
0980: 3a 20 ee e1 ed ee e2 e8 f2 fc 20 f1 f2 f0 ee ea : ........ .....
0990: f3 22 29 3b 0d 0a 09 69 66 28 21 70 52 6f 77 46 .");...if(!pRowF
09a0: 72 6f 6d 29 0d 0a 09 09 72 65 74 75 72 6e 20 46 rom)....return F
09b0: 41 4c 53 45 3b 0d 0a 09 53 51 4c 69 74 65 44 61 ALSE;...SQLiteDa
09c0: 74 61 52 6f 77 2a 20 70 52 6f 77 20 3d 20 73 74 taRow* pRow = st
09d0: 61 74 69 63 5f 63 61 73 74 3c 53 51 4c 69 74 65 atic_cast<SQLite
09e0: 44 61 74 61 52 6f 77 2a 3e 28 70 52 6f 77 46 72 DataRow*>(pRowFr
09f0: 6f 6d 29 3b 0d 0a 09 53 51 4c 69 74 65 51 75 65 om);...SQLiteQue
0a00: 72 79 2a 20 70 51 75 65 72 79 20 3d 20 67 65 74 ry* pQuery = get
0a10: 51 75 65 72 79 28 71 43 75 72 52 6f 77 29 3b 0d Query(qCurRow);.
0a20: 0a 09 62 69 6e 64 4b 65 79 56 61 6c 75 65 73 28 ..bindKeyValues(
0a30: 70 51 75 65 72 79 2c 20 70 52 6f 77 29 3b 0d 0a pQuery, pRow);..
0a40: 09 0d 0a 09 52 6f 77 73 41 72 72 61 79 20 74 65 ....RowsArray te
0a50: 6d 70 44 73 74 3b 0d 0a 09 44 61 74 61 50 72 6f mpDst;...DataPro
0a60: 76 69 64 65 72 52 65 73 75 6c 74 4c 6f 61 64 65 viderResultLoade
0a70: 72 20 65 78 65 63 75 74 6f 72 28 74 68 69 73 2c r executor(this,
0a80: 20 26 74 65 6d 70 44 73 74 29 3b 0d 0a 09 65 78 &tempDst);...ex
0a90: 65 63 75 74 6f 72 2e 65 78 65 63 75 74 65 28 70 ecutor.execute(p
0aa0: 51 75 65 72 79 29 3b 0d 0a 09 69 66 28 74 65 6d Query);...if(tem
0ab0: 70 44 73 74 2e 47 65 74 53 69 7a 65 28 29 20 21 pDst.GetSize() !
0ac0: 3d 20 31 29 0d 0a 09 09 72 65 74 75 72 6e 20 46 = 1)....return F
0ad0: 41 4c 53 45 3b 0d 0a 09 0d 0a 09 53 51 4c 69 74 ALSE;......SQLit
0ae0: 65 44 61 74 61 52 6f 77 2a 20 70 4e 65 77 52 6f eDataRow* pNewRo
0af0: 77 20 3d 20 74 65 6d 70 44 73 74 5b 30 5d 3b 0d w = tempDst[0];.
0b00: 0a 09 0d 0a 09 43 56 61 6c 75 65 2a 20 70 4f 6c .....CValue* pOl
0b10: 64 56 61 6c 75 65 73 20 3d 20 70 52 6f 77 2d 3e dValues = pRow->
0b20: 6d 5f 70 56 61 6c 75 65 73 3b 0d 0a 09 70 52 6f m_pValues;...pRo
0b30: 77 2d 3e 6d 5f 70 56 61 6c 75 65 73 20 3d 20 70 w->m_pValues = p
0b40: 4e 65 77 52 6f 77 2d 3e 6d 5f 70 56 61 6c 75 65 NewRow->m_pValue
0b50: 73 3b 0d 0a 09 70 4e 65 77 52 6f 77 2d 3e 6d 5f s;...pNewRow->m_
0b60: 70 56 61 6c 75 65 73 20 3d 20 70 4f 6c 64 56 61 pValues = pOldVa
0b70: 6c 75 65 73 3b 0d 0a 09 70 4e 65 77 52 6f 77 2d lues;...pNewRow-
0b80: 3e 6d 5f 66 43 6f 75 6e 74 20 3d 20 70 52 6f 77 >m_fCount = pRow
0b90: 2d 3e 6d 5f 66 43 6f 75 6e 74 3b 0d 0a 09 70 52 ->m_fCount;...pR
0ba0: 6f 77 2d 3e 6d 5f 66 43 6f 75 6e 74 20 3d 20 66 ow->m_fCount = f
0bb0: 69 65 6c 64 73 43 6f 75 6e 74 28 29 3b 0d 0a 09 ieldsCount();...
0bc0: 0d 0a 09 64 65 6c 65 74 65 20 70 4e 65 77 52 6f ...delete pNewRo
0bd0: 77 3b 0d 0a 09 72 65 74 75 72 6e 20 54 52 55 45 w;...return TRUE
0be0: 3b 0d 0a 7d 0d 0a 0d 0a 42 4f 4f 4c 20 53 51 4c ;..}....BOOL SQL
0bf0: 69 74 65 44 61 74 61 50 72 6f 76 69 64 65 72 3a iteDataProvider:
0c00: 3a 43 6f 6d 70 61 72 65 52 6f 77 73 28 43 44 61 :CompareRows(CDa
0c10: 74 61 52 6f 77 2a 20 70 52 6f 77 31 2c 20 43 44 taRow* pRow1, CD
0c20: 61 74 61 52 6f 77 2a 20 70 52 6f 77 32 29 20 63 ataRow* pRow2) c
0c30: 6f 6e 73 74 0d 0a 7b 0d 0a 09 43 56 61 6c 75 65 onst..{...CValue
0c40: 09 2a 70 56 61 6c 73 31 20 3d 20 73 74 61 74 69 .*pVals1 = stati
0c50: 63 5f 63 61 73 74 3c 53 51 4c 69 74 65 44 61 74 c_cast<SQLiteDat
0c60: 61 52 6f 77 2a 3e 28 70 52 6f 77 31 29 2d 3e 6d aRow*>(pRow1)->m
0c70: 5f 70 56 61 6c 75 65 73 2c 0d 0a 09 09 09 2a 70 _pValues,.....*p
0c80: 56 61 6c 73 32 20 3d 20 73 74 61 74 69 63 5f 63 Vals2 = static_c
0c90: 61 73 74 3c 53 51 4c 69 74 65 44 61 74 61 52 6f ast<SQLiteDataRo
0ca0: 77 2a 3e 28 70 52 6f 77 32 29 2d 3e 6d 5f 70 56 w*>(pRow2)->m_pV
0cb0: 61 6c 75 65 73 3b 0d 0a 0d 0a 09 66 6f 72 28 44 alues;.....for(D
0cc0: 57 4f 52 44 20 69 64 78 20 3d 20 30 2c 20 6d 69 WORD idx = 0, mi
0cd0: 64 78 20 3d 20 6b 65 79 46 69 65 6c 64 73 43 6f dx = keyFieldsCo
0ce0: 75 6e 74 28 29 3b 20 69 64 78 20 3c 20 6d 69 64 unt(); idx < mid
0cf0: 78 20 3b 20 69 64 78 2b 2b 29 0d 0a 09 7b 0d 0a x ; idx++)...{..
0d00: 09 09 69 66 28 70 56 61 6c 73 31 5b 69 64 78 5d ..if(pVals1[idx]
0d10: 20 21 3d 20 70 56 61 6c 73 32 5b 69 64 78 5d 29 != pVals2[idx])
0d20: 0d 0a 09 09 09 72 65 74 75 72 6e 20 46 41 4c 53 .....return FALS
0d30: 45 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e 20 E;...}...return
0d40: 54 52 55 45 3b 0d 0a 7d 0d 0a 0d 0a 42 4f 4f 4c TRUE;..}....BOOL
0d50: 20 53 51 4c 69 74 65 44 61 74 61 50 72 6f 76 69 SQLiteDataProvi
0d60: 64 65 72 3a 3a 47 65 74 52 6f 77 43 6f 75 6e 74 der::GetRowCount
0d70: 28 55 49 4e 54 2a 20 70 43 6f 75 6e 74 29 0d 0a (UINT* pCount)..
0d80: 7b 0d 0a 09 72 65 74 75 72 6e 20 46 41 4c 53 45 {...return FALSE
0d90: 3b 09 0d 0a 7d 0d 0a 0d 0a 44 61 74 61 54 79 70 ;...}....DataTyp
0da0: 65 20 53 51 4c 69 74 65 44 61 74 61 50 72 6f 76 e SQLiteDataProv
0db0: 69 64 65 72 3a 3a 47 65 74 51 75 69 63 6b 53 65 ider::GetQuickSe
0dc0: 61 72 63 68 54 79 70 65 28 4c 50 43 53 54 52 20 archType(LPCSTR
0dd0: 73 7a 46 69 65 6c 64 4e 61 6d 65 29 0d 0a 7b 0d szFieldName)..{.
0de0: 0a 09 66 69 65 6c 64 5f 69 6e 66 6f 2a 20 70 46 ..field_info* pF
0df0: 49 3b 0d 0a 09 69 66 28 6d 5f 66 69 65 6c 64 42 I;...if(m_fieldB
0e00: 79 4e 61 6d 65 2e 4c 6f 6f 6b 75 70 28 73 7a 46 yName.Lookup(szF
0e10: 69 65 6c 64 4e 61 6d 65 2c 20 70 46 49 29 20 26 ieldName, pFI) &
0e20: 26 20 30 20 21 3d 20 28 70 46 49 2d 3e 66 6c 61 & 0 != (pFI->fla
0e30: 67 73 20 26 20 66 69 65 6c 64 5f 69 6e 66 6f 3a gs & field_info:
0e40: 3a 71 73 50 6f 73 73 69 62 6c 65 29 29 0d 0a 09 :qsPossible))...
0e50: 09 72 65 74 75 72 6e 20 64 74 54 65 78 74 3b 0d .return dtText;.
0e60: 0a 09 72 65 74 75 72 6e 20 64 74 55 6e 64 65 66 ..return dtUndef
0e70: 69 6e 65 64 3b 2f 2f 64 74 54 65 78 74 3b 0d 0a ined;//dtText;..
0e80: 7d 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c 69 74 65 }....void SQLite
0e90: 44 61 74 61 50 72 6f 76 69 64 65 72 3a 3a 51 75 DataProvider::Qu
0ea0: 69 63 6b 53 65 61 72 63 68 28 73 74 51 75 69 63 ickSearch(stQuic
0eb0: 6b 53 65 61 72 63 68 50 61 74 74 65 72 6e 26 20 kSearchPattern&
0ec0: 51 53 50 61 74 74 65 72 6e 29 0d 0a 7b 0d 0a 09 QSPattern)..{...
0ed0: 66 69 65 6c 64 5f 69 6e 66 6f 2a 20 70 46 49 3b field_info* pFI;
0ee0: 0d 0a 09 69 66 28 51 53 50 61 74 74 65 72 6e 2e ...if(QSPattern.
0ef0: 64 61 74 61 54 79 70 65 20 21 3d 20 64 74 54 65 dataType != dtTe
0f00: 78 74 20 7c 7c 20 21 6d 5f 66 69 65 6c 64 42 79 xt || !m_fieldBy
0f10: 4e 61 6d 65 2e 4c 6f 6f 6b 75 70 28 51 53 50 61 Name.Lookup(QSPa
0f20: 74 74 65 72 6e 2e 73 7a 46 69 65 6c 64 4e 61 6d ttern.szFieldNam
0f30: 65 2c 20 70 46 49 29 0d 0a 09 09 7c 7c 20 30 20 e, pFI)....|| 0
0f40: 3d 3d 20 28 70 46 49 2d 3e 66 6c 61 67 73 20 26 == (pFI->flags &
0f50: 20 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 71 73 50 field_info::qsP
0f60: 6f 73 73 69 62 6c 65 29 20 7c 7c 20 51 53 50 61 ossible) || QSPa
0f70: 74 74 65 72 6e 2e 70 54 65 78 74 44 61 74 61 2d ttern.pTextData-
0f80: 3e 49 73 45 6d 70 74 79 28 29 29 0d 0a 09 7b 0d >IsEmpty())...{.
0f90: 0a 09 09 51 53 50 61 74 74 65 72 6e 2e 70 54 65 ...QSPattern.pTe
0fa0: 78 74 44 61 74 61 2d 3e 45 6d 70 74 79 28 29 3b xtData->Empty();
0fb0: 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 7d 0d ....return;...}.
0fc0: 0a 09 53 51 4c 69 74 65 51 75 65 72 79 2a 20 70 ..SQLiteQuery* p
0fd0: 51 75 65 72 79 20 3d 20 6d 5f 71 75 65 72 69 65 Query = m_querie
0fe0: 73 5b 71 51 75 69 63 6b 53 65 61 72 63 68 5d 3b s[qQuickSearch];
0ff0: 0d 0a 09 69 66 28 21 70 51 75 65 72 79 29 0d 0a ...if(!pQuery)..
1000: 09 09 70 51 75 65 72 79 20 3d 20 6d 5f 71 75 65 ..pQuery = m_que
1010: 72 69 65 73 5b 71 51 75 69 63 6b 53 65 61 72 63 ries[qQuickSearc
1020: 68 5d 20 3d 20 6d 5f 70 44 61 74 61 42 61 73 65 h] = m_pDataBase
1030: 2d 3e 6e 65 77 51 75 65 72 79 28 29 3b 0d 0a 09 ->newQuery();...
1040: 69 66 28 6d 5f 6c 61 73 74 51 53 43 6f 6c 75 6d if(m_lastQSColum
1050: 6e 20 21 3d 20 70 46 49 29 0d 0a 09 7b 0d 0a 09 n != pFI)...{...
1060: 09 6d 5f 51 53 43 6f 6c 75 6d 6e 20 3d 20 2d 31 .m_QSColumn = -1
1070: 3b 0d 0a 09 09 43 53 74 72 69 6e 67 20 73 74 72 ;....CString str
1080: 53 71 6c 54 65 78 74 28 22 73 65 6c 65 63 74 5c SqlText("select\
1090: 72 5c 6e 22 29 2c 20 73 74 72 4f 72 64 65 72 28 r\n"), strOrder(
10a0: 22 20 6f 72 64 65 72 20 62 79 5c 72 5c 6e 22 29 " order by\r\n")
10b0: 3b 0d 0a 09 09 66 69 65 6c 64 5f 69 6e 66 6f 2a ;....field_info*
10c0: 20 70 46 69 65 6c 64 73 20 3d 20 6d 5f 66 69 65 pFields = m_fie
10d0: 6c 64 73 49 6e 66 6f 3b 0d 0a 09 09 66 6f 72 28 ldsInfo;....for(
10e0: 44 57 4f 52 44 20 69 64 78 20 3d 20 30 3b 20 69 DWORD idx = 0; i
10f0: 64 78 20 3c 20 6b 65 79 46 69 65 6c 64 73 43 6f dx < keyFieldsCo
1100: 75 6e 74 28 29 3b 20 69 64 78 2b 2b 2c 20 70 46 unt(); idx++, pF
1110: 69 65 6c 64 73 2b 2b 29 0d 0a 09 09 7b 0d 0a 09 ields++)....{...
1120: 09 09 73 74 72 53 71 6c 54 65 78 74 20 2b 3d 20 ..strSqlText +=
1130: 70 46 69 65 6c 64 73 2d 3e 65 78 70 72 65 73 73 pFields->express
1140: 69 6f 6e 20 2b 20 70 46 69 65 6c 64 73 2d 3e 61 ion + pFields->a
1150: 6c 69 61 73 20 2b 20 22 2c 5c 72 5c 6e 22 3b 0d lias + ",\r\n";.
1160: 0a 09 09 09 73 74 72 4f 72 64 65 72 20 2b 3d 20 ....strOrder +=
1170: 70 46 69 65 6c 64 73 2d 3e 65 78 70 72 65 73 73 pFields->express
1180: 69 6f 6e 20 2b 20 22 2c 5c 72 5c 6e 22 3b 0d 0a ion + ",\r\n";..
1190: 09 09 09 69 66 28 70 46 69 65 6c 64 73 20 3d 3d ...if(pFields ==
11a0: 20 70 46 49 29 0d 0a 09 09 09 09 6d 5f 51 53 43 pFI)......m_QSC
11b0: 6f 6c 75 6d 6e 20 3d 20 69 64 78 3b 0d 0a 09 09 olumn = idx;....
11c0: 7d 0d 0a 09 09 69 66 28 2d 31 20 3d 3d 20 6d 5f }....if(-1 == m_
11d0: 51 53 43 6f 6c 75 6d 6e 29 0d 0a 09 09 7b 0d 0a QSColumn)....{..
11e0: 09 09 09 73 74 72 53 71 6c 54 65 78 74 20 2b 3d ...strSqlText +=
11f0: 20 70 46 49 2d 3e 65 78 70 72 65 73 73 69 6f 6e pFI->expression
1200: 20 2b 20 70 46 49 2d 3e 61 6c 69 61 73 3b 0d 0a + pFI->alias;..
1210: 09 09 09 6d 5f 51 53 43 6f 6c 75 6d 6e 20 3d 20 ...m_QSColumn =
1220: 69 64 78 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 idx;....}....els
1230: 65 0d 0a 09 09 09 73 74 72 53 71 6c 54 65 78 74 e.....strSqlText
1240: 2e 47 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e .GetBufferSetLen
1250: 67 74 68 28 73 74 72 53 71 6c 54 65 78 74 2e 47 gth(strSqlText.G
1260: 65 74 4c 65 6e 67 74 68 28 29 20 2d 20 33 29 3b etLength() - 3);
1270: 0d 0a 09 09 73 74 72 53 71 6c 54 65 78 74 20 2b ....strSqlText +
1280: 3d 20 6d 5f 66 72 6f 6d 3b 0d 0a 09 09 69 66 28 = m_from;....if(
1290: 21 6d 5f 77 68 65 72 65 2e 49 73 45 6d 70 74 79 !m_where.IsEmpty
12a0: 28 29 29 0d 0a 09 09 09 73 74 72 53 71 6c 54 65 ()).....strSqlTe
12b0: 78 74 20 3d 20 73 74 72 53 71 6c 54 65 78 74 20 xt = strSqlText
12c0: 2b 20 22 20 77 68 65 72 65 5c 72 5c 6e 22 20 2b + " where\r\n" +
12d0: 20 6d 5f 77 68 65 72 65 20 2b 20 22 5c 72 5c 6e m_where + "\r\n
12e0: 22 3b 0d 0a 09 09 73 74 72 4f 72 64 65 72 2e 47 ";....strOrder.G
12f0: 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 74 etBufferSetLengt
1300: 68 28 73 74 72 4f 72 64 65 72 2e 47 65 74 4c 65 h(strOrder.GetLe
1310: 6e 67 74 68 28 29 20 2d 20 33 29 3b 0d 0a 09 09 ngth() - 3);....
1320: 73 74 72 53 71 6c 54 65 78 74 20 2b 3d 20 73 74 strSqlText += st
1330: 72 4f 72 64 65 72 3b 0d 0a 0d 0a 09 09 70 51 75 rOrder;......pQu
1340: 65 72 79 2d 3e 73 65 74 44 65 62 75 67 28 6d 5f ery->setDebug(m_
1350: 64 65 62 75 67 29 3b 0d 0a 09 09 70 51 75 65 72 debug);....pQuer
1360: 79 2d 3e 70 72 65 70 61 72 65 28 73 74 72 53 71 y->prepare(strSq
1370: 6c 54 65 78 74 29 3b 0d 0a 09 09 6d 5f 6c 61 73 lText);....m_las
1380: 74 51 53 43 6f 6c 75 6d 6e 20 3d 20 70 46 49 3b tQSColumn = pFI;
1390: 0d 0a 09 7d 0d 0a 0d 0a 09 6d 5f 73 71 6c 50 61 ...}.....m_sqlPa
13a0: 72 61 6d 73 2e 61 70 70 6c 79 50 61 72 61 6d 73 rams.applyParams
13b0: 54 6f 51 75 65 72 79 28 70 51 75 65 72 79 2c 20 ToQuery(pQuery,
13c0: 2d 31 29 3b 0d 0a 09 0d 0a 09 53 51 4c 69 74 65 -1);......SQLite
13d0: 44 61 74 61 52 6f 77 20 71 73 52 6f 77 28 6b 65 DataRow qsRow(ke
13e0: 79 46 69 65 6c 64 73 43 6f 75 6e 74 28 29 29 3b yFieldsCount());
13f0: 0d 0a 09 51 75 69 63 6b 53 65 61 72 63 68 52 65 ...QuickSearchRe
1400: 73 75 6c 74 4c 6f 61 64 65 72 20 71 73 6c 6f 61 sultLoader qsloa
1410: 64 65 72 28 2a 51 53 50 61 74 74 65 72 6e 2e 70 der(*QSPattern.p
1420: 54 65 78 74 44 61 74 61 2c 20 71 73 52 6f 77 2e TextData, qsRow.
1430: 6d 5f 70 56 61 6c 75 65 73 2c 20 6b 65 79 46 69 m_pValues, keyFi
1440: 65 6c 64 73 43 6f 75 6e 74 28 29 2c 20 6d 5f 51 eldsCount(), m_Q
1450: 53 43 6f 6c 75 6d 6e 29 3b 0d 0a 09 69 6e 74 20 SColumn);...int
1460: 6d 61 78 53 79 6d 62 20 3d 20 71 73 6c 6f 61 64 maxSymb = qsload
1470: 65 72 2e 66 69 6e 64 28 70 51 75 65 72 79 29 3b er.find(pQuery);
1480: 0d 0a 0d 0a 09 51 53 50 61 74 74 65 72 6e 2e 70 .....QSPattern.p
1490: 54 65 78 74 44 61 74 61 2d 3e 47 65 74 42 75 66 TextData->GetBuf
14a0: 66 65 72 53 65 74 4c 65 6e 67 74 68 28 6d 61 78 ferSetLength(max
14b0: 53 79 6d 62 29 3b 0d 0a 09 69 66 28 6d 61 78 53 Symb);...if(maxS
14c0: 79 6d 62 29 0d 0a 09 09 53 65 74 43 75 72 72 65 ymb)....SetCurre
14d0: 6e 74 52 6f 77 28 26 71 73 52 6f 77 29 3b 0d 0a ntRow(&qsRow);..
14e0: 7d 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c 69 74 65 }....void SQLite
14f0: 44 61 74 61 50 72 6f 76 69 64 65 72 3a 3a 4f 6e DataProvider::On
1500: 41 74 74 61 63 68 28 29 0d 0a 7b 0d 0a 09 52 65 Attach()..{...Re
1510: 73 65 74 44 61 74 61 28 29 3b 0d 0a 7d 0d 0a 0d setData();..}...
1520: 0a 43 56 37 44 61 74 61 52 6f 77 2a 20 53 51 4c .CV7DataRow* SQL
1530: 69 74 65 44 61 74 61 50 72 6f 76 69 64 65 72 3a iteDataProvider:
1540: 3a 47 65 74 56 37 44 61 74 61 52 6f 77 28 43 44 :GetV7DataRow(CD
1550: 61 74 61 52 6f 77 2a 20 70 44 61 74 61 52 6f 77 ataRow* pDataRow
1560: 29 20 63 6f 6e 73 74 0d 0a 7b 0d 0a 09 72 65 74 ) const..{...ret
1570: 75 72 6e 20 73 74 61 74 69 63 5f 63 61 73 74 3c urn static_cast<
1580: 53 51 4c 69 74 65 44 61 74 61 52 6f 77 2a 3e 28 SQLiteDataRow*>(
1590: 70 44 61 74 61 52 6f 77 29 3b 0d 0a 7d 0d 0a 0d pDataRow);..}...
15a0: 0a 76 6f 69 64 20 53 51 4c 69 74 65 44 61 74 61 .void SQLiteData
15b0: 50 72 6f 76 69 64 65 72 3a 3a 47 65 74 52 6f 77 Provider::GetRow
15c0: 56 61 6c 75 65 28 43 44 61 74 61 52 6f 77 2a 20 Value(CDataRow*
15d0: 70 44 61 74 61 52 6f 77 2c 20 43 56 61 6c 75 65 pDataRow, CValue
15e0: 26 20 76 61 6c 75 65 29 20 63 6f 6e 73 74 0d 0a & value) const..
15f0: 7b 0d 0a 09 69 66 28 69 64 46 69 65 6c 64 50 6f {...if(idFieldPo
1600: 73 28 29 20 3e 3d 20 30 29 0d 0a 09 09 76 61 6c s() >= 0)....val
1610: 75 65 20 3d 20 73 74 61 74 69 63 5f 63 61 73 74 ue = static_cast
1620: 3c 53 51 4c 69 74 65 44 61 74 61 52 6f 77 2a 3e <SQLiteDataRow*>
1630: 28 70 44 61 74 61 52 6f 77 29 2d 3e 6d 5f 70 56 (pDataRow)->m_pV
1640: 61 6c 75 65 73 5b 69 64 46 69 65 6c 64 50 6f 73 alues[idFieldPos
1650: 28 29 5d 3b 0d 0a 09 65 6c 73 65 0d 0a 09 09 76 ()];...else....v
1660: 61 6c 75 65 2e 52 65 73 65 74 28 29 3b 0d 0a 7d alue.Reset();..}
1670: 0d 0a 0d 0a 69 6e 74 20 6d 6f 64 69 66 69 63 61 ....int modifica
1680: 74 6f 72 42 79 54 79 70 65 28 74 79 70 65 73 4f torByType(typesO
1690: 66 46 69 65 6c 64 73 20 74 29 0d 0a 7b 0d 0a 09 fFields t)..{...
16a0: 73 77 69 74 63 68 28 74 29 0d 0a 09 7b 0d 0a 09 switch(t)...{...
16b0: 63 61 73 65 20 74 74 52 65 66 65 72 65 6e 63 65 case ttReference
16c0: 3a 0d 0a 09 63 61 73 65 20 74 74 44 6f 63 75 6d :...case ttDocum
16d0: 65 6e 74 3a 0d 0a 09 63 61 73 65 20 74 74 45 6e ent:...case ttEn
16e0: 75 6d 3a 0d 0a 09 63 61 73 65 20 74 74 41 63 63 um:...case ttAcc
16f0: 6f 75 6e 74 3a 0d 0a 09 63 61 73 65 20 74 74 43 ount:...case ttC
1700: 61 6c 65 6e 64 61 72 3a 0d 0a 09 09 72 65 74 75 alendar:....retu
1710: 72 6e 20 31 3b 0d 0a 09 63 61 73 65 20 74 74 55 rn 1;...case ttU
1720: 6e 64 65 66 69 6e 65 3a 0d 0a 09 09 72 65 74 75 ndefine:....retu
1730: 72 6e 20 2d 31 3b 0d 0a 09 09 62 72 65 61 6b 3b rn -1;....break;
1740: 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e 20 30 3b ...}...return 0;
1750: 0d 0a 7d 0d 0a 0d 0a 43 44 61 74 61 52 6f 77 2a ..}....CDataRow*
1760: 20 53 51 4c 69 74 65 44 61 74 61 50 72 6f 76 69 SQLiteDataProvi
1770: 64 65 72 3a 3a 42 75 69 6c 64 52 6f 77 42 79 56 der::BuildRowByV
1780: 61 6c 75 65 28 63 6f 6e 73 74 20 43 56 61 6c 75 alue(const CValu
1790: 65 26 20 76 61 6c 75 65 29 0d 0a 7b 0d 0a 09 69 e& value)..{...i
17a0: 66 28 69 64 46 69 65 6c 64 50 6f 73 28 29 20 3c f(idFieldPos() <
17b0: 20 30 29 0d 0a 09 09 72 65 74 75 72 6e 20 4e 55 0)....return NU
17c0: 4c 4c 3b 0d 0a 09 53 51 4c 69 74 65 51 75 65 72 LL;...SQLiteQuer
17d0: 79 2a 20 70 51 75 65 72 79 20 3d 20 67 65 74 51 y* pQuery = getQ
17e0: 75 65 72 79 28 71 49 44 29 3b 0d 0a 09 70 51 75 uery(qID);...pQu
17f0: 65 72 79 2d 3e 73 65 74 53 71 6c 50 61 72 61 6d ery->setSqlParam
1800: 28 69 64 50 61 72 61 6d 4e 61 6d 65 2c 20 76 61 (idParamName, va
1810: 6c 75 65 2c 20 6d 6f 64 69 66 69 63 61 74 6f 72 lue, modificator
1820: 42 79 54 79 70 65 28 66 69 65 6c 64 49 6e 66 6f ByType(fieldInfo
1830: 28 69 64 46 69 65 6c 64 50 6f 73 28 29 29 2e 74 (idFieldPos()).t
1840: 79 70 65 29 29 3b 0d 0a 09 0d 0a 09 52 6f 77 73 ype));......Rows
1850: 41 72 72 61 79 20 74 65 6d 70 44 73 74 3b 0d 0a Array tempDst;..
1860: 09 44 61 74 61 50 72 6f 76 69 64 65 72 52 65 73 .DataProviderRes
1870: 75 6c 74 4c 6f 61 64 65 72 20 65 78 65 63 75 74 ultLoader execut
1880: 6f 72 28 74 68 69 73 2c 20 26 74 65 6d 70 44 73 or(this, &tempDs
1890: 74 29 3b 0d 0a 09 65 78 65 63 75 74 6f 72 2e 65 t);...executor.e
18a0: 78 65 63 75 74 65 28 70 51 75 65 72 79 29 3b 0d xecute(pQuery);.
18b0: 0a 09 69 66 28 74 65 6d 70 44 73 74 2e 47 65 74 ..if(tempDst.Get
18c0: 53 69 7a 65 28 29 20 21 3d 20 31 29 0d 0a 09 09 Size() != 1)....
18d0: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 72 return NULL;...r
18e0: 65 74 75 72 6e 20 28 53 51 4c 69 74 65 44 61 74 eturn (SQLiteDat
18f0: 61 52 6f 77 2a 29 74 65 6d 70 44 73 74 5b 30 5d aRow*)tempDst[0]
1900: 3b 0d 0a 7d 0d 0a 0d 0a 53 51 4c 69 74 65 44 61 ;..}....SQLiteDa
1910: 74 61 50 72 6f 76 69 64 65 72 3a 3a 53 51 4c 69 taProvider::SQLi
1920: 74 65 44 61 74 61 50 72 6f 76 69 64 65 72 28 29 teDataProvider()
1930: 0d 0a 7b 0d 0a 09 6d 5f 70 44 61 74 61 42 61 73 ..{...m_pDataBas
1940: 65 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 6d 5f 66 69 e = NULL;...m_fi
1950: 65 6c 64 73 49 6e 66 6f 20 3d 20 4e 55 4c 4c 3b eldsInfo = NULL;
1960: 0d 0a 09 6d 5f 66 69 65 6c 64 73 49 6e 66 6f 43 ...m_fieldsInfoC
1970: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 09 6d 65 6d 73 ount = 0;...mems
1980: 65 74 28 6d 5f 71 75 65 72 69 65 73 2c 20 30 2c et(m_queries, 0,
1990: 20 73 69 7a 65 6f 66 28 6d 5f 71 75 65 72 69 65 sizeof(m_querie
19a0: 73 29 29 3b 0d 0a 09 6d 5f 64 65 62 75 67 20 3d s));...m_debug =
19b0: 20 46 41 4c 53 45 3b 0d 0a 09 6d 5f 6c 61 73 74 FALSE;...m_last
19c0: 51 53 43 6f 6c 75 6d 6e 20 3d 20 4e 55 4c 4c 3b QSColumn = NULL;
19d0: 0d 0a 09 6d 5f 71 75 65 72 79 46 69 65 6c 64 73 ...m_queryFields
19e0: 4e 61 6d 65 73 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 Names = NULL;...
19f0: 6d 5f 6b 65 79 50 61 72 61 6d 4e 61 6d 65 73 20 m_keyParamNames
1a00: 3d 20 4e 55 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 42 4f = NULL;..}....BO
1a10: 4f 4c 20 53 51 4c 69 74 65 44 61 74 61 50 72 6f OL SQLiteDataPro
1a20: 76 69 64 65 72 3a 3a 53 65 74 44 61 74 61 42 61 vider::SetDataBa
1a30: 73 65 28 43 56 61 6c 75 65 2a 2a 20 70 70 50 61 se(CValue** ppPa
1a40: 72 61 6d 73 29 0d 0a 7b 0d 0a 09 63 6c 65 61 72 rams)..{...clear
1a50: 41 6c 6c 28 29 3b 0d 0a 09 69 66 28 70 70 50 61 All();...if(ppPa
1a60: 72 61 6d 73 5b 30 5d 2d 3e 49 73 45 6d 70 74 79 rams[0]->IsEmpty
1a70: 28 29 29 0d 0a 09 7b 0d 0a 09 09 6d 5f 70 44 61 ())...{....m_pDa
1a80: 74 61 42 61 73 65 20 3d 20 6e 65 77 20 43 53 4c taBase = new CSL
1a90: 44 61 74 61 42 61 73 65 3b 0d 0a 09 09 6d 5f 70 DataBase;....m_p
1aa0: 44 61 74 61 42 61 73 65 2d 3e 6f 70 65 6e 28 22 DataBase->open("
1ab0: 3a 6d 65 6d 6f 72 79 3a 22 29 3b 0d 0a 09 7d 0d :memory:");...}.
1ac0: 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09 69 66 ..else...{....if
1ad0: 28 70 70 50 61 72 61 6d 73 5b 30 5d 2d 3e 74 79 (ppParams[0]->ty
1ae0: 70 65 20 21 3d 20 31 30 30 20 7c 7c 20 21 73 61 pe != 100 || !sa
1af0: 66 65 44 79 6e 43 61 73 74 28 70 70 50 61 72 61 feDynCast(ppPara
1b00: 6d 73 5b 30 5d 2d 3e 6d 5f 43 6f 6e 74 65 78 74 ms[0]->m_Context
1b10: 2c 20 6d 5f 70 44 61 74 61 42 61 73 65 29 29 0d , m_pDataBase)).
1b20: 0a 09 09 09 43 42 4c 4d 6f 64 75 6c 65 3a 3a 52 ....CBLModule::R
1b30: 61 69 73 65 45 78 74 52 75 6e 74 69 6d 65 45 72 aiseExtRuntimeEr
1b40: 72 6f 72 28 22 cf e5 f0 e5 e4 e0 ed ed fb e9 20 ror("..........
1b50: ef e0 f0 e0 ec e5 f2 f0 20 ed e5 20 e1 e0 e7 e0 ........ .. ....
1b60: 20 e4 e0 ed ed fb f5 20 53 51 4c 69 74 65 22 2c ...... SQLite",
1b70: 20 46 41 4c 53 45 29 3b 0d 0a 09 09 6d 5f 70 44 FALSE);....m_pD
1b80: 61 74 61 42 61 73 65 2d 3e 6d 5f 52 65 66 43 6f ataBase->m_RefCo
1b90: 75 6e 74 2b 2b 3b 0d 0a 09 7d 0d 0a 09 52 65 73 unt++;...}...Res
1ba0: 65 74 44 61 74 61 28 29 3b 0d 0a 09 72 65 74 75 etData();...retu
1bb0: 72 6e 20 54 52 55 45 3b 0d 0a 7d 0d 0a 0d 0a 76 rn TRUE;..}....v
1bc0: 6f 69 64 20 72 65 6d 6f 76 65 43 6f 6d 6d 65 6e oid removeCommen
1bd0: 74 73 28 43 53 74 72 69 6e 67 26 20 73 74 72 51 ts(CString& strQ
1be0: 75 65 72 79 29 0d 0a 7b 0d 0a 09 65 6e 75 6d 20 uery)..{...enum
1bf0: 7b 73 4e 6f 6e 65 2c 20 73 51 75 6f 74 65 2c 20 {sNone, sQuote,
1c00: 73 4c 69 74 65 72 61 6c 2c 20 73 4d 69 6e 75 73 sLiteral, sMinus
1c10: 2c 20 73 44 69 76 2c 20 73 52 65 6d 61 72 6b 2c , sDiv, sRemark,
1c20: 20 73 4d 75 6c 74 52 65 6d 2c 20 73 4d 75 6c 74 sMultRem, sMult
1c30: 52 65 6d 4d 75 6c 74 7d 3b 0d 0a 09 44 57 4f 52 RemMult};...DWOR
1c40: 44 20 73 74 61 74 65 20 3d 20 73 4e 6f 6e 65 3b D state = sNone;
1c50: 0d 0a 09 4c 50 53 54 52 20 70 57 72 69 74 65 20 ...LPSTR pWrite
1c60: 3d 20 73 74 72 51 75 65 72 79 2e 47 65 74 42 75 = strQuery.GetBu
1c70: 66 66 65 72 53 65 74 4c 65 6e 67 74 68 28 73 74 fferSetLength(st
1c80: 72 51 75 65 72 79 2e 47 65 74 4c 65 6e 67 74 68 rQuery.GetLength
1c90: 28 29 29 3b 0d 0a 09 4c 50 43 53 54 52 20 70 52 ());...LPCSTR pR
1ca0: 65 61 64 20 3d 20 70 57 72 69 74 65 2c 20 70 53 ead = pWrite, pS
1cb0: 74 61 72 74 20 3d 20 70 52 65 61 64 3b 0d 0a 09 tart = pRead;...
1cc0: 66 6f 72 28 3b 3b 20 70 52 65 61 64 2b 2b 29 0d for(;; pRead++).
1cd0: 0a 09 7b 0d 0a 09 09 44 57 4f 52 44 20 73 20 3d ..{....DWORD s =
1ce0: 20 28 44 57 4f 52 44 29 28 42 59 54 45 29 2a 70 (DWORD)(BYTE)*p
1cf0: 52 65 61 64 3b 0d 0a 09 09 73 77 69 74 63 68 28 Read;....switch(
1d00: 73 74 61 74 65 29 0d 0a 09 09 7b 0d 0a 09 09 63 state)....{....c
1d10: 61 73 65 20 73 4e 6f 6e 65 3a 0d 0a 09 09 09 69 ase sNone:.....i
1d20: 66 28 27 5c 27 27 20 3d 3d 20 73 29 0d 0a 09 09 f('\'' == s)....
1d30: 09 09 73 74 61 74 65 20 3d 20 73 51 75 6f 74 65 ..state = sQuote
1d40: 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 27 5b ;.....else if('[
1d50: 27 20 3d 3d 20 73 29 0d 0a 09 09 09 09 73 74 61 ' == s)......sta
1d60: 74 65 20 3d 20 73 4c 69 74 65 72 61 6c 3b 0d 0a te = sLiteral;..
1d70: 09 09 09 65 6c 73 65 20 69 66 28 27 2d 27 20 3d ...else if('-' =
1d80: 3d 20 73 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 = s).....{......
1d90: 73 74 61 74 65 20 3d 20 73 4d 69 6e 75 73 3b 0d state = sMinus;.
1da0: 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 09 2f .....continue;./
1db0: 2f 20 cf ee ea e0 20 f1 e8 ec e2 ee eb 20 ed e5 / .... ...... ..
1dc0: 20 ea ee ef e8 f0 f3 e5 ec 0d 0a 09 09 09 7d 0d .............}.
1dd0: 0a 09 09 09 65 6c 73 65 20 69 66 28 27 2f 27 20 ....else if('/'
1de0: 3d 3d 20 73 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 == s).....{.....
1df0: 09 73 74 61 74 65 20 3d 20 73 44 69 76 3b 0d 0a .state = sDiv;..
1e00: 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 09 2f 2f ....continue;.//
1e10: 20 cf ee ea e0 20 f1 e8 ec e2 ee eb 20 ed e5 20 .... ...... ..
1e20: ea ee ef e8 f0 f3 e5 ec 0d 0a 09 09 09 7d 0d 0a .............}..
1e30: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 ...break;....cas
1e40: 65 20 73 51 75 6f 74 65 3a 20 2f 2f 20 eb e8 f2 e sQuote: // ...
1e50: e5 f0 e0 eb 20 e2 20 27 20 27 0d 0a 09 09 09 69 .... . ' '.....i
1e60: 66 28 27 5c 27 27 20 3d 3d 20 73 29 0d 0a 09 09 f('\'' == s)....
1e70: 09 09 73 74 61 74 65 20 3d 20 73 4e 6f 6e 65 3b ..state = sNone;
1e80: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 .....break;....c
1e90: 61 73 65 20 73 4c 69 74 65 72 61 6c 3a 0d 0a 09 ase sLiteral:...
1ea0: 09 09 69 66 28 27 5d 27 20 3d 3d 20 73 29 0d 0a ..if(']' == s)..
1eb0: 09 09 09 09 73 74 61 74 65 20 3d 20 73 4e 6f 6e ....state = sNon
1ec0: 65 3b 0d 0a 09 09 20 20 20 20 62 72 65 61 6b 3b e;.... break;
1ed0: 0d 0a 09 09 63 61 73 65 20 73 4d 69 6e 75 73 3a ....case sMinus:
1ee0: 09 2f 2f 09 27 2d 27 0d 0a 09 09 09 69 66 28 27 .//.'-'.....if('
1ef0: 2d 27 20 3d 3d 20 73 29 0d 0a 09 09 09 7b 0d 0a -' == s).....{..
1f00: 09 09 09 09 73 74 61 74 65 20 3d 20 73 52 65 6d ....state = sRem
1f10: 61 72 6b 3b 0d 0a 09 09 09 09 63 6f 6e 74 69 6e ark;......contin
1f20: 75 65 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 2f 2f ue;.....}.....//
1f30: 20 dd f2 ee 20 e1 fb eb 20 ed e5 20 ea ee ec ec ... ... .. ....
1f40: e5 ed f2 2c 20 e4 ee ea ee ef e8 f0 f3 e5 ec 20 ..., ..........
1f50: ec e8 ed f3 f1 0d 0a 09 09 09 2a 70 57 72 69 74 ..........*pWrit
1f60: 65 2b 2b 20 3d 20 27 2d 27 3b 0d 0a 09 09 09 69 e++ = '-';.....i
1f70: 66 28 27 2f 27 20 3d 3d 20 73 29 0d 0a 09 09 09 f('/' == s).....
1f80: 7b 0d 0a 09 09 09 09 73 74 61 74 65 20 3d 20 73 {......state = s
1f90: 44 69 76 3b 0d 0a 09 09 09 09 63 6f 6e 74 69 6e Div;......contin
1fa0: 75 65 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 73 74 ue;.....}.....st
1fb0: 61 74 65 20 3d 20 73 4e 6f 6e 65 3b 0d 0a 09 09 ate = sNone;....
1fc0: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 09 09 63 61 break;....ca
1fd0: 73 65 20 73 44 69 76 3a 09 2f 2f 20 27 2f 27 0d se sDiv:.// '/'.
1fe0: 0a 09 09 09 69 66 28 27 2a 27 20 3d 3d 20 73 29 ....if('*' == s)
1ff0: 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 73 74 61 74 .....{......stat
2000: 65 20 3d 20 73 4d 75 6c 74 52 65 6d 3b 0d 0a 09 e = sMultRem;...
2010: 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0d 0a 09 09 ...continue;....
2020: 09 7d 0d 0a 09 09 09 2a 70 57 72 69 74 65 2b 2b .}.....*pWrite++
2030: 20 3d 20 27 2f 27 3b 0d 0a 09 09 09 69 66 28 27 = '/';.....if('
2040: 2d 27 20 3d 3d 20 73 29 0d 0a 09 09 09 7b 0d 0a -' == s).....{..
2050: 09 09 09 09 73 74 61 74 65 20 3d 20 73 4d 69 6e ....state = sMin
2060: 75 73 3b 0d 0a 09 09 09 09 63 6f 6e 74 69 6e 75 us;......continu
2070: 65 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 73 74 61 e;.....}.....sta
2080: 74 65 20 3d 20 73 4e 6f 6e 65 3b 0d 0a 09 09 09 te = sNone;.....
2090: 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 73 break;....case s
20a0: 52 65 6d 61 72 6b 3a 09 2f 2f 20 27 2d 2d 27 0d Remark:.// '--'.
20b0: 0a 09 09 09 69 66 28 27 5c 72 27 20 21 3d 20 73 ....if('\r' != s
20c0: 20 26 26 20 30 20 21 3d 20 73 29 0d 0a 09 09 09 && 0 != s).....
20d0: 09 63 6f 6e 74 69 6e 75 65 3b 0d 0a 09 09 09 2a .continue;.....*
20e0: 70 57 72 69 74 65 2b 2b 20 3d 20 27 20 27 3b 09 pWrite++ = ' ';.
20f0: 2f 2f 20 c7 e0 ec e5 ed e8 ec 20 ea ee ec ec e5 // ....... .....
2100: ed f2 20 ef f0 ee e1 e5 eb ee ec 2c 20 f1 e8 ec .. ........, ...
2110: e2 ee eb 20 5c 72 20 f1 ea ee ef e8 f0 f3 e5 ec ... \r .........
2120: 0d 0a 09 09 09 73 74 61 74 65 20 3d 20 73 4e 6f .....state = sNo
2130: 6e 65 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a ne;.....break;..
2140: 09 09 63 61 73 65 20 73 4d 75 6c 74 52 65 6d 3a ..case sMultRem:
2150: 09 2f 2f 20 27 2f 2a 27 0d 0a 09 09 09 69 66 28 .// '/*'.....if(
2160: 30 20 21 3d 20 73 29 0d 0a 09 09 09 7b 0d 0a 09 0 != s).....{...
2170: 09 09 09 69 66 28 27 2a 27 20 3d 3d 20 73 29 0d ...if('*' == s).
2180: 0a 09 09 09 09 09 73 74 61 74 65 20 3d 20 73 4d ......state = sM
2190: 75 6c 74 52 65 6d 4d 75 6c 74 3b 0d 0a 09 09 09 ultRemMult;.....
21a0: 09 63 6f 6e 74 69 6e 75 65 3b 0d 0a 09 09 09 7d .continue;.....}
21b0: 0d 0a 09 09 20 20 20 20 62 72 65 61 6b 3b 0d 0a .... break;..
21c0: 09 09 63 61 73 65 20 73 4d 75 6c 74 52 65 6d 4d ..case sMultRemM
21d0: 75 6c 74 3a 09 2f 2f 20 27 2f 2a 20 20 2a 27 0d ult:.// '/* *'.
21e0: 0a 09 09 09 69 66 28 30 20 21 3d 20 73 29 0d 0a ....if(0 != s)..
21f0: 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 27 2f 27 ...{......if('/'
2200: 20 3d 3d 20 73 29 0d 0a 09 09 09 09 7b 0d 0a 09 == s)......{...
2210: 09 09 09 09 73 74 61 74 65 20 3d 20 73 4e 6f 6e ....state = sNon
2220: 65 3b 0d 0a 09 09 09 09 09 2a 70 57 72 69 74 65 e;.......*pWrite
2230: 2b 2b 20 3d 20 27 20 27 3b 0d 0a 09 09 09 09 7d ++ = ' ';......}
2240: 0d 0a 09 09 09 09 65 6c 73 65 20 69 66 28 27 2a ......else if('*
2250: 27 20 21 3d 20 73 29 0d 0a 09 09 09 09 09 73 74 ' != s).......st
2260: 61 74 65 20 3d 20 73 4d 75 6c 74 52 65 6d 3b 0d ate = sMultRem;.
2270: 0a 09 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0d 0a .....continue;..
2280: 09 09 09 7d 0d 0a 09 09 20 20 20 20 62 72 65 61 ...}.... brea
2290: 6b 3b 0d 0a 09 09 7d 0d 0a 09 09 69 66 28 21 73 k;....}....if(!s
22a0: 29 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 ).....break;....
22b0: 69 66 28 70 52 65 61 64 20 3e 20 70 57 72 69 74 if(pRead > pWrit
22c0: 65 29 0d 0a 09 09 09 2a 70 57 72 69 74 65 20 3d e).....*pWrite =
22d0: 20 73 3b 0d 0a 09 09 70 57 72 69 74 65 2b 2b 3b s;....pWrite++;
22e0: 0d 0a 09 7d 0d 0a 09 69 66 28 70 52 65 61 64 20 ...}...if(pRead
22f0: 3e 20 70 57 72 69 74 65 20 2b 20 31 29 09 2f 2f > pWrite + 1).//
2300: 20 ca ee ec ec e5 ed f2 fb 20 e1 fb eb e8 0d 0a ........ ......
2310: 09 09 73 74 72 51 75 65 72 79 2e 47 65 74 42 75 ..strQuery.GetBu
2320: 66 66 65 72 53 65 74 4c 65 6e 67 74 68 28 70 57 fferSetLength(pW
2330: 72 69 74 65 20 2d 20 70 53 74 61 72 74 29 3b 0d rite - pStart);.
2340: 0a 09 73 74 72 51 75 65 72 79 2e 54 72 69 6d 4c ..strQuery.TrimL
2350: 65 66 74 28 74 72 69 6d 50 61 74 74 65 72 6e 29 eft(trimPattern)
2360: 3b 0d 0a 7d 0d 0a 0d 0a 69 6e 6c 69 6e 65 20 42 ;..}....inline B
2370: 4f 4f 4c 20 69 73 57 6f 72 64 53 79 6d 62 6f 6c OOL isWordSymbol
2380: 28 44 57 4f 52 44 20 73 29 0d 0a 7b 0d 0a 09 72 (DWORD s)..{...r
2390: 65 74 75 72 6e 20 28 73 20 3e 3d 20 27 41 27 20 eturn (s >= 'A'
23a0: 26 26 20 73 20 3c 3d 27 5a 27 29 20 7c 7c 20 28 && s <='Z') || (
23b0: 73 20 3e 3d 20 27 61 27 20 26 26 20 73 20 3c 3d s >= 'a' && s <=
23c0: 27 7a 27 29 20 7c 7c 20 73 20 3e 20 30 78 38 30 'z') || s > 0x80
23d0: 20 7c 7c 20 73 20 3d 3d 20 27 5f 27 20 7c 7c 20 || s == '_' ||
23e0: 28 73 20 3e 3d 20 27 30 27 20 26 26 20 73 20 3c (s >= '0' && s <
23f0: 3d 20 27 39 27 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f = '9');..}....vo
2400: 69 64 20 73 70 6c 69 74 51 75 65 72 79 28 43 53 id splitQuery(CS
2410: 74 72 69 6e 67 26 20 73 74 72 51 75 65 72 79 2c tring& strQuery,
2420: 20 43 53 74 72 69 6e 67 41 72 72 61 79 26 20 66 CStringArray& f
2430: 69 65 6c 64 73 2c 20 43 53 74 72 69 6e 67 26 20 ields, CString&
2440: 73 74 72 46 72 6f 6d 2c 20 43 53 74 72 69 6e 67 strFrom, CString
2450: 26 20 73 74 72 57 68 65 72 65 29 0d 0a 7b 0d 0a & strWhere)..{..
2460: 09 72 65 6d 6f 76 65 43 6f 6d 6d 65 6e 74 73 28 .removeComments(
2470: 73 74 72 51 75 65 72 79 29 3b 0d 0a 09 4c 50 43 strQuery);...LPC
2480: 53 54 52 20 70 74 72 20 3d 20 73 74 72 51 75 65 STR ptr = strQue
2490: 72 79 3b 0d 0a 09 70 74 72 20 2b 3d 20 73 69 7a ry;...ptr += siz
24a0: 65 6f 66 28 22 73 65 6c 65 63 74 22 29 20 2d 20 eof("select") -
24b0: 31 3b 0d 0a 09 0d 0a 09 2f 2f 20 c1 f3 e4 e5 ec 1;......// .....
24c0: 20 e2 fb e4 e5 eb ff f2 fc 20 ef ee eb ff 0d 0a ........ ......
24d0: 09 2f 2f 20 cf ee eb ff 20 f0 e0 e7 e4 e5 eb ff .// .... .......
24e0: fe f2 f1 ff 20 eb e8 e1 ee 20 2c 20 eb e8 e1 ee .... .... , ....
24f0: 20 66 72 6f 6d 20 e2 ed e5 20 f1 ea ee e1 ee ea from ... ......
2500: 20 f1 f2 f0 ee ea 20 eb e8 f2 e5 f0 e0 eb ee e2 ..... .........
2510: 0d 0a 09 44 57 4f 52 44 20 70 61 72 65 6e 74 68 ...DWORD parenth
2520: 65 73 65 73 20 3d 20 30 2c 20 69 6e 4c 69 74 65 eses = 0, inLite
2530: 72 61 6c 73 20 3d 20 30 3b 0d 0a 09 4c 50 43 53 rals = 0;...LPCS
2540: 54 52 20 70 53 74 61 72 74 4f 66 46 69 65 6c 64 TR pStartOfField
2550: 20 3d 20 70 74 72 2c 20 70 53 74 61 72 74 4f 66 = ptr, pStartOf
2560: 46 72 6f 6d 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 4c From = NULL;...L
2570: 50 43 53 54 52 20 6b 65 79 77 6f 72 64 20 3d 20 PCSTR keyword =
2580: 22 66 72 6f 6d 22 3b 0d 0a 09 0d 0a 09 66 6f 72 "from";......for
2590: 28 3b 3b 29 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 (;;)...{....DWOR
25a0: 44 20 73 20 3d 20 28 44 57 4f 52 44 29 28 42 59 D s = (DWORD)(BY
25b0: 54 45 29 2a 70 74 72 2b 2b 3b 0d 0a 09 09 69 66 TE)*ptr++;....if
25c0: 28 21 73 29 0d 0a 09 09 09 62 72 65 61 6b 3b 0d (!s).....break;.
25d0: 0a 09 09 69 66 28 69 6e 4c 69 74 65 72 61 6c 73 ...if(inLiterals
25e0: 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 20 28 )....{.....if( (
25f0: 31 20 3d 3d 20 69 6e 4c 69 74 65 72 61 6c 73 20 1 == inLiterals
2600: 26 26 20 27 5c 27 27 20 3d 3d 20 73 29 20 7c 7c && '\'' == s) ||
2610: 0d 0a 09 09 09 09 28 32 20 3d 3d 20 69 6e 4c 69 ......(2 == inLi
2620: 74 65 72 61 6c 73 20 26 26 20 27 5d 27 20 3d 3d terals && ']' ==
2630: 20 73 29 29 0d 0a 09 09 09 09 69 6e 4c 69 74 65 s))......inLite
2640: 72 61 6c 73 20 3d 20 30 3b 0d 0a 09 09 7d 0d 0a rals = 0;....}..
2650: 09 09 65 6c 73 65 20 69 66 28 27 5c 27 27 20 3d ..else if('\'' =
2660: 3d 20 73 29 0d 0a 09 09 09 69 6e 4c 69 74 65 72 = s).....inLiter
2670: 61 6c 73 20 3d 20 31 3b 0d 0a 09 09 65 6c 73 65 als = 1;....else
2680: 20 69 66 28 27 5b 27 20 3d 3d 20 73 29 0d 0a 09 if('[' == s)...
2690: 09 09 69 6e 4c 69 74 65 72 61 6c 73 20 3d 20 32 ..inLiterals = 2
26a0: 3b 0d 0a 09 09 65 6c 73 65 20 69 66 28 27 28 27 ;....else if('('
26b0: 20 3d 3d 20 73 29 0d 0a 09 09 09 70 61 72 65 6e == s).....paren
26c0: 74 68 65 73 65 73 2b 2b 3b 0d 0a 09 09 65 6c 73 theses++;....els
26d0: 65 20 69 66 28 27 29 27 20 3d 3d 20 73 29 0d 0a e if(')' == s)..
26e0: 09 09 09 70 61 72 65 6e 74 68 65 73 65 73 2d 2d ...parentheses--
26f0: 3b 0d 0a 09 09 65 6c 73 65 20 69 66 28 30 20 3d ;....else if(0 =
2700: 3d 20 70 61 72 65 6e 74 68 65 73 65 73 29 0d 0a = parentheses)..
2710: 09 09 7b 0d 0a 09 09 09 69 66 28 21 70 53 74 61 ..{.....if(!pSta
2720: 72 74 4f 66 46 72 6f 6d 20 26 26 20 27 2c 27 20 rtOfFrom && ','
2730: 3d 3d 20 73 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 == s).....{.....
2740: 09 66 69 65 6c 64 73 2e 41 64 64 28 43 53 74 72 .fields.Add(CStr
2750: 69 6e 67 28 70 53 74 61 72 74 4f 66 46 69 65 6c ing(pStartOfFiel
2760: 64 2c 20 70 74 72 20 2d 20 70 53 74 61 72 74 4f d, ptr - pStartO
2770: 66 46 69 65 6c 64 20 2d 20 31 29 29 3b 0d 0a 09 fField - 1));...
2780: 09 09 09 70 53 74 61 72 74 4f 66 46 69 65 6c 64 ...pStartOfField
2790: 20 3d 20 70 74 72 3b 0d 0a 09 09 09 7d 0d 0a 09 = ptr;.....}...
27a0: 09 09 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 ..else.....{....
27b0: 09 09 2f 2f 20 cf f0 ee e2 e5 f0 e8 ec 20 ea eb ..// ........ ..
27c0: fe f7 e5 e2 ee e5 20 f1 eb ee e2 ee 0d 0a 09 09 ...... .........
27d0: 09 09 4c 50 43 53 54 52 20 70 4b 65 79 77 6f 72 ..LPCSTR pKeywor
27e0: 64 20 3d 20 6b 65 79 77 6f 72 64 3b 0d 0a 09 09 d = keyword;....
27f0: 09 09 44 57 4f 52 44 20 6b 3b 0d 0a 09 09 09 09 ..DWORD k;......
2800: 66 6f 72 28 3b 3b 29 0d 0a 09 09 09 09 7b 0d 0a for(;;)......{..
2810: 09 09 09 09 09 6b 20 3d 20 28 44 57 4f 52 44 29 .....k = (DWORD)
2820: 28 42 59 54 45 29 2a 70 4b 65 79 77 6f 72 64 2b (BYTE)*pKeyword+
2830: 2b 3b 0d 0a 09 09 09 09 09 69 66 28 6b 20 21 3d +;.......if(k !=
2840: 20 28 73 20 7c 20 30 78 32 30 29 20 7c 7c 20 21 (s | 0x20) || !
2850: 73 29 0d 0a 09 09 09 09 09 09 62 72 65 61 6b 3b s)........break;
2860: 0d 0a 09 09 09 09 09 73 20 3d 20 28 44 57 4f 52 .......s = (DWOR
2870: 44 29 28 42 59 54 45 29 2a 70 74 72 2b 2b 3b 0d D)(BYTE)*ptr++;.
2880: 0a 09 09 09 09 7d 0d 0a 09 09 09 09 69 66 28 69 .....}......if(i
2890: 73 57 6f 72 64 53 79 6d 62 6f 6c 28 73 29 29 0d sWordSymbol(s)).
28a0: 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 64 6f 20 .....{.......do
28b0: 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 .......{........
28c0: 73 20 3d 20 28 44 57 4f 52 44 29 28 42 59 54 45 s = (DWORD)(BYTE
28d0: 29 2a 70 74 72 2b 2b 3b 0d 0a 09 09 09 09 09 7d )*ptr++;.......}
28e0: 77 68 69 6c 65 28 69 73 57 6f 72 64 53 79 6d 62 while(isWordSymb
28f0: 6f 6c 28 73 29 29 3b 0d 0a 09 09 09 09 09 70 74 ol(s));.......pt
2900: 72 2d 2d 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 r--;......}.....
2910: 09 65 6c 73 65 20 69 66 28 30 20 3d 3d 20 6b 29 .else if(0 == k)
2920: 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 69 66 ......{.......if
2930: 28 21 70 53 74 61 72 74 4f 66 46 72 6f 6d 29 0d (!pStartOfFrom).
2940: 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 70 ......{........p
2950: 53 74 61 72 74 4f 66 46 72 6f 6d 20 3d 20 70 74 StartOfFrom = pt
2960: 72 20 2d 20 31 3b 0d 0a 09 09 09 09 09 09 6b 65 r - 1;........ke
2970: 79 77 6f 72 64 20 3d 20 22 77 68 65 72 65 22 3b yword = "where";
2980: 0d 0a 09 09 09 09 09 09 66 69 65 6c 64 73 2e 41 ........fields.A
2990: 64 64 28 43 53 74 72 69 6e 67 28 70 53 74 61 72 dd(CString(pStar
29a0: 74 4f 66 46 69 65 6c 64 2c 20 70 74 72 20 2d 20 tOfField, ptr -
29b0: 70 53 74 61 72 74 4f 66 46 69 65 6c 64 20 2d 20 pStartOfField -
29c0: 73 69 7a 65 6f 66 28 22 66 72 6f 6d 22 29 29 29 sizeof("from")))
29d0: 3b 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09 09 09 ;.......}.......
29e0: 65 6c 73 65 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 else.......{....
29f0: 09 09 09 09 44 57 4f 52 44 20 66 72 6f 6d 4c 65 ....DWORD fromLe
2a00: 6e 20 3d 20 70 74 72 20 2d 20 70 53 74 61 72 74 n = ptr - pStart
2a10: 4f 66 46 72 6f 6d 20 2d 20 73 69 7a 65 6f 66 28 OfFrom - sizeof(
2a20: 22 77 68 65 72 65 22 29 3b 0d 0a 09 09 09 09 09 "where");.......
2a30: 09 6d 65 6d 63 70 79 28 73 74 72 46 72 6f 6d 2e .memcpy(strFrom.
2a40: 47 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 GetBufferSetLeng
2a50: 74 68 28 66 72 6f 6d 4c 65 6e 29 2c 20 70 53 74 th(fromLen), pSt
2a60: 61 72 74 4f 66 46 72 6f 6d 2c 20 66 72 6f 6d 4c artOfFrom, fromL
2a70: 65 6e 29 3b 0d 0a 09 09 09 09 09 09 73 74 72 57 en);........strW
2a80: 68 65 72 65 20 3d 20 70 74 72 20 2d 20 31 3b 0d here = ptr - 1;.
2a90: 0a 09 09 09 09 09 09 72 65 74 75 72 6e 3b 0d 0a .......return;..
2aa0: 09 09 09 09 09 7d 0d 0a 09 09 09 09 7d 0d 0a 09 .....}......}...
2ab0: 09 09 7d 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 73 ..}....}...}...s
2ac0: 74 72 46 72 6f 6d 20 3d 20 70 53 74 61 72 74 4f trFrom = pStartO
2ad0: 66 46 72 6f 6d 3b 0d 0a 7d 0d 0a 0d 0a 42 4f 4f fFrom;..}....BOO
2ae0: 4c 20 53 51 4c 69 74 65 44 61 74 61 50 72 6f 76 L SQLiteDataProv
2af0: 69 64 65 72 3a 3a 53 65 74 51 75 65 72 79 54 65 ider::SetQueryTe
2b00: 78 74 28 43 56 61 6c 75 65 2a 2a 20 70 70 50 61 xt(CValue** ppPa
2b10: 72 61 6d 73 29 0d 0a 7b 0d 0a 09 69 66 28 21 6d rams)..{...if(!m
2b20: 5f 70 44 61 74 61 42 61 73 65 29 0d 0a 09 09 43 _pDataBase)....C
2b30: 42 4c 4d 6f 64 75 6c 65 3a 3a 52 61 69 73 65 45 BLModule::RaiseE
2b40: 78 74 52 75 6e 74 69 6d 65 45 72 72 6f 72 28 22 xtRuntimeError("
2b50: cd e5 f3 f1 f2 e0 ed ee e2 eb e5 ed e0 20 e1 e0 ............. ..
2b60: e7 e0 20 e4 e0 ed ed fb f5 22 2c 20 46 41 4c 53 .. ......", FALS
2b70: 45 29 3b 0d 0a 09 43 53 74 72 69 6e 67 20 73 74 E);...CString st
2b80: 72 51 75 65 72 79 54 65 78 74 20 3d 20 70 70 50 rQueryText = ppP
2b90: 61 72 61 6d 73 5b 30 5d 2d 3e 47 65 74 53 74 72 arams[0]->GetStr
2ba0: 69 6e 67 28 29 3b 0d 0a 09 43 53 74 72 69 6e 67 ing();...CString
2bb0: 20 73 74 72 4b 65 79 46 69 65 6c 64 20 3d 20 70 strKeyField = p
2bc0: 70 50 61 72 61 6d 73 5b 31 5d 2d 3e 47 65 74 53 pParams[1]->GetS
2bd0: 74 72 69 6e 67 28 29 3b 0d 0a 09 43 53 74 72 69 tring();...CStri
2be0: 6e 67 20 73 74 72 49 44 46 69 65 6c 64 20 3d 20 ng strIDField =
2bf0: 70 70 50 61 72 61 6d 73 5b 32 5d 2d 3e 47 65 74 ppParams[2]->Get
2c00: 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 09 69 66 String();.....if
2c10: 28 73 74 72 4b 65 79 46 69 65 6c 64 2e 49 73 45 (strKeyField.IsE
2c20: 6d 70 74 79 28 29 29 0d 0a 09 09 43 42 4c 4d 6f mpty())....CBLMo
2c30: 64 75 6c 65 3a 3a 52 61 69 73 65 45 78 74 52 75 dule::RaiseExtRu
2c40: 6e 74 69 6d 65 45 72 72 6f 72 28 22 cd e5 20 e7 ntimeError(".. .
2c50: e0 e4 e0 ed fb 20 ea eb fe f7 e5 e2 fb e5 20 ef ..... ........ .
2c60: ee eb ff 22 2c 20 46 41 4c 53 45 29 3b 0d 0a 09 ...", FALSE);...
2c70: 43 53 74 72 69 6e 67 41 72 72 61 79 20 66 69 65 CStringArray fie
2c80: 6c 64 4e 61 6d 65 73 3b 0d 0a 09 43 41 72 72 61 ldNames;...CArra
2c90: 79 3c 74 79 70 65 73 4f 66 46 69 65 6c 64 73 2c y<typesOfFields,
2ca0: 20 74 79 70 65 73 4f 66 46 69 65 6c 64 73 3e 20 typesOfFields>
2cb0: 74 79 70 65 73 3b 0d 0a 09 44 57 4f 52 44 20 66 types;...DWORD f
2cc0: 69 65 6c 64 73 43 6f 75 6e 74 3b 0d 0a 09 2f 2f ieldsCount;...//
2cd0: 20 c4 eb ff 20 ed e0 f7 e0 eb e0 20 ef f0 ee e2 ... ...... ....
2ce0: e5 f0 e8 ec 2c 20 f7 f2 ee 20 e7 e0 ef f0 ee f1 ...., ... ......
2cf0: 20 f1 e8 ed f2 e0 ea f1 e8 f7 e5 f1 ea e8 20 ef ............. .
2d00: f0 e0 e2 e8 eb e5 ed 0d 0a 09 7b 0d 0a 09 09 61 ..........{....a
2d10: 75 74 6f 5f 70 74 72 3c 53 51 4c 69 74 65 51 75 uto_ptr<SQLiteQu
2d20: 65 72 79 3e 20 71 54 65 73 74 28 6d 5f 70 44 61 ery> qTest(m_pDa
2d30: 74 61 42 61 73 65 2d 3e 6e 65 77 51 75 65 72 79 taBase->newQuery
2d40: 28 29 29 3b 0d 0a 09 09 6d 5f 6d 65 74 61 50 61 ());....m_metaPa
2d50: 72 73 65 72 2e 70 72 6f 63 65 73 73 53 71 6c 28 rser.processSql(
2d60: 73 74 72 51 75 65 72 79 54 65 78 74 29 3b 0d 0a strQueryText);..
2d70: 09 09 71 54 65 73 74 2d 3e 70 72 65 70 61 72 65 ..qTest->prepare
2d80: 28 73 74 72 51 75 65 72 79 54 65 78 74 29 3b 0d (strQueryText);.
2d90: 0a 09 09 2f 2f 20 cf ee eb f3 f7 e8 ec 20 e8 ec ...// ....... ..
2da0: e5 ed e0 20 e8 20 f2 e8 ef fb 20 ea ee eb ee ed ... . .... .....
2db0: ee ea 20 e7 e0 ef f0 ee f1 e0 0d 0a 09 09 71 54 .. ...........qT
2dc0: 65 73 74 2d 3e 67 65 74 46 69 65 6c 64 73 28 66 est->getFields(f
2dd0: 69 65 6c 64 4e 61 6d 65 73 2c 20 74 79 70 65 73 ieldNames, types
2de0: 29 3b 0d 0a 09 09 66 69 65 6c 64 73 43 6f 75 6e );....fieldsCoun
2df0: 74 20 3d 20 66 69 65 6c 64 4e 61 6d 65 73 2e 47 t = fieldNames.G
2e00: 65 74 53 69 7a 65 28 29 3b 0d 0a 09 09 69 66 28 etSize();....if(
2e10: 21 66 69 65 6c 64 73 43 6f 75 6e 74 29 0d 0a 09 !fieldsCount)...
2e20: 09 09 43 42 4c 4d 6f 64 75 6c 65 3a 3a 52 61 69 ..CBLModule::Rai
2e30: 73 65 45 78 74 52 75 6e 74 69 6d 65 45 72 72 6f seExtRuntimeErro
2e40: 72 28 22 cf e5 f0 e5 e4 e0 ed 20 e7 e0 ef f0 ee r("....... .....
2e50: f1 20 ed e5 20 ed e0 20 e2 fb e1 ee f0 ea f3 22 . .. .. ......."
2e60: 2c 20 46 41 4c 53 45 29 3b 0d 0a 09 7d 0d 0a 09 , FALSE);...}...
2e70: 2f 2f 20 d2 e5 ef e5 f0 fc 20 ed e0 e4 ee 20 ed // ...... .... .
2e80: e0 e9 f2 e8 20 ed ee ec e5 f0 e0 20 ea eb fe f7 .... ...... ....
2e90: e5 e2 ee e3 ee 20 e8 20 e8 e4 20 ef ee eb ff 2e ..... . .. .....
2ea0: 0d 0a 09 43 44 57 6f 72 64 41 72 72 61 79 20 6e ...CDWordArray n
2eb0: 65 77 4b 65 79 46 69 65 6c 64 73 3b 0d 0a 09 69 ewKeyFields;...i
2ec0: 6e 74 20 6e 65 77 49 44 46 69 65 6c 64 20 3d 20 nt newIDField =
2ed0: 2d 31 3b 0d 0a 09 7b 0d 0a 09 09 43 53 74 72 69 -1;...{....CStri
2ee0: 6e 67 41 72 72 61 79 20 73 74 72 4b 65 79 46 69 ngArray strKeyFi
2ef0: 65 6c 64 73 3b 0d 0a 09 09 53 70 6c 69 74 53 74 elds;....SplitSt
2f00: 72 32 41 72 72 61 79 28 73 74 72 4b 65 79 46 69 r2Array(strKeyFi
2f10: 65 6c 64 2c 20 73 74 72 4b 65 79 46 69 65 6c 64 eld, strKeyField
2f20: 73 2c 20 27 2c 27 29 3b 0d 0a 09 09 43 4e 6f 43 s, ',');....CNoC
2f30: 61 73 65 4d 61 70 3c 69 6e 74 3e 20 6e 61 6d 65 aseMap<int> name
2f40: 73 54 6f 50 6f 73 3b 0d 0a 09 09 66 6f 72 28 44 sToPos;....for(D
2f50: 57 4f 52 44 20 69 64 78 20 3d 20 30 3b 20 69 64 WORD idx = 0; id
2f60: 78 20 3c 20 66 69 65 6c 64 73 43 6f 75 6e 74 3b x < fieldsCount;
2f70: 20 69 64 78 2b 2b 29 0d 0a 09 09 09 6e 61 6d 65 idx++).....name
2f80: 73 54 6f 50 6f 73 5b 66 69 65 6c 64 4e 61 6d 65 sToPos[fieldName
2f90: 73 5b 69 64 78 5d 5d 20 3d 20 69 64 78 3b 0d 0a s[idx]] = idx;..
2fa0: 09 09 66 6f 72 28 69 64 78 20 3d 20 30 3b 20 69 ..for(idx = 0; i
2fb0: 64 78 20 3c 20 73 74 72 4b 65 79 46 69 65 6c 64 dx < strKeyField
2fc0: 73 2e 47 65 74 53 69 7a 65 28 29 3b 20 69 64 78 s.GetSize(); idx
2fd0: 2b 2b 29 0d 0a 09 09 7b 0d 0a 09 09 09 43 53 74 ++)....{.....CSt
2fe0: 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 73 ring keyName = s
2ff0: 74 72 4b 65 79 46 69 65 6c 64 73 5b 69 64 78 5d trKeyFields[idx]
3000: 3b 0d 0a 09 09 09 6b 65 79 4e 61 6d 65 2e 54 72 ;.....keyName.Tr
3010: 69 6d 4c 65 66 74 28 74 72 69 6d 50 61 74 74 65 imLeft(trimPatte
3020: 72 6e 29 3b 0d 0a 09 09 09 6b 65 79 4e 61 6d 65 rn);.....keyName
3030: 2e 54 72 69 6d 52 69 67 68 74 28 74 72 69 6d 50 .TrimRight(trimP
3040: 61 74 74 65 72 6e 29 3b 0d 0a 09 09 09 53 51 4c attern);.....SQL
3050: 69 74 65 51 75 65 72 79 3a 3a 74 79 70 65 46 69 iteQuery::typeFi
3060: 65 6c 64 28 6b 65 79 4e 61 6d 65 29 3b 0d 0a 09 eld(keyName);...
3070: 09 09 69 6e 74 20 70 6f 73 3b 0d 0a 09 09 09 69 ..int pos;.....i
3080: 66 28 21 6e 61 6d 65 73 54 6f 50 6f 73 2e 4c 6f f(!namesToPos.Lo
3090: 6f 6b 75 70 28 6b 65 79 4e 61 6d 65 2c 20 70 6f okup(keyName, po
30a0: 73 29 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 43 s)).....{......C
30b0: 53 74 72 69 6e 67 20 6d 73 67 3b 0d 0a 09 09 09 String msg;.....
30c0: 09 6d 73 67 2e 46 6f 72 6d 61 74 28 22 ca eb fe .msg.Format("...
30d0: f7 e5 e2 ee e5 20 ef ee eb e5 20 27 25 73 27 20 ..... .... '%s'
30e0: ed e5 20 ed e0 e9 e4 e5 ed ee 20 e2 20 f1 ee f1 .. ....... . ...
30f0: f2 e0 e2 e5 20 ef ee eb e5 e9 20 e7 e0 ef f0 ee .... ..... .....
3100: f1 e0 22 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a ..", keyName);..
3110: 09 09 09 09 43 42 4c 4d 6f 64 75 6c 65 3a 3a 52 ....CBLModule::R
3120: 61 69 73 65 45 78 74 52 75 6e 74 69 6d 65 45 72 aiseExtRuntimeEr
3130: 72 6f 72 28 6d 73 67 2c 20 46 41 4c 53 45 29 3b ror(msg, FALSE);
3140: 0d 0a 09 09 09 7d 0d 0a 09 09 09 66 6f 72 28 44 .....}.....for(D
3150: 57 4f 52 44 20 6b 20 3d 20 30 3b 20 6b 20 3c 20 WORD k = 0; k <
3160: 6e 65 77 4b 65 79 46 69 65 6c 64 73 2e 47 65 74 newKeyFields.Get
3170: 53 69 7a 65 28 29 3b 20 6b 2b 2b 29 0d 0a 09 09 Size(); k++)....
3180: 09 7b 0d 0a 09 09 09 09 69 66 28 6e 65 77 4b 65 .{......if(newKe
3190: 79 46 69 65 6c 64 73 5b 6b 5d 20 3d 3d 20 70 6f yFields[k] == po
31a0: 73 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 s)......{.......
31b0: 43 53 74 72 69 6e 67 20 6d 73 67 3b 0d 0a 09 09 CString msg;....
31c0: 09 09 09 6d 73 67 2e 46 6f 72 6d 61 74 28 22 ca ...msg.Format(".
31d0: eb fe f7 e5 e2 ee e5 20 ef ee eb e5 20 27 25 73 ....... .... '%s
31e0: 27 20 ef ee e2 f2 ee f0 ff e5 f2 f1 ff 20 e2 20 ' ........... .
31f0: f1 ee f1 f2 e0 e2 e5 20 ea eb fe f7 e5 e2 fb f5 ....... ........
3200: 20 ef ee eb e5 e9 22 2c 20 6b 65 79 4e 61 6d 65 .....", keyName
3210: 29 3b 0d 0a 09 09 09 09 09 43 42 4c 4d 6f 64 75 );.......CBLModu
3220: 6c 65 3a 3a 52 61 69 73 65 45 78 74 52 75 6e 74 le::RaiseExtRunt
3230: 69 6d 65 45 72 72 6f 72 28 6d 73 67 2c 20 46 41 imeError(msg, FA
3240: 4c 53 45 29 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 LSE);......}....
3250: 09 7d 0d 0a 09 09 09 6e 65 77 4b 65 79 46 69 65 .}.....newKeyFie
3260: 6c 64 73 2e 41 64 64 28 70 6f 73 29 3b 0d 0a 09 lds.Add(pos);...
3270: 09 7d 0d 0a 09 09 69 66 28 21 6e 65 77 4b 65 79 .}....if(!newKey
3280: 46 69 65 6c 64 73 2e 47 65 74 53 69 7a 65 28 29 Fields.GetSize()
3290: 29 0d 0a 09 09 09 43 42 4c 4d 6f 64 75 6c 65 3a ).....CBLModule:
32a0: 3a 52 61 69 73 65 45 78 74 52 75 6e 74 69 6d 65 :RaiseExtRuntime
32b0: 45 72 72 6f 72 28 22 cd e5 20 e7 e0 e4 e0 ed ee Error(".. ......
32c0: 20 ed e8 20 ee e4 ed ee e3 ee 20 ea eb fe f7 e5 .. ...... .....
32d0: e2 ee e3 ee 20 ef ee eb ff 22 2c 20 46 41 4c 53 .... ....", FALS
32e0: 45 29 3b 0d 0a 09 09 69 66 28 21 73 74 72 49 44 E);....if(!strID
32f0: 46 69 65 6c 64 2e 49 73 45 6d 70 74 79 28 29 29 Field.IsEmpty())
3300: 0d 0a 09 09 7b 0d 0a 09 09 09 73 74 72 49 44 46 ....{.....strIDF
3310: 69 65 6c 64 2e 54 72 69 6d 4c 65 66 74 28 74 72 ield.TrimLeft(tr
3320: 69 6d 50 61 74 74 65 72 6e 29 3b 0d 0a 09 09 09 imPattern);.....
3330: 73 74 72 49 44 46 69 65 6c 64 2e 54 72 69 6d 52 strIDField.TrimR
3340: 69 67 68 74 28 74 72 69 6d 50 61 74 74 65 72 6e ight(trimPattern
3350: 29 3b 0d 0a 09 09 09 53 51 4c 69 74 65 51 75 65 );.....SQLiteQue
3360: 72 79 3a 3a 74 79 70 65 46 69 65 6c 64 28 73 74 ry::typeField(st
3370: 72 49 44 46 69 65 6c 64 29 3b 0d 0a 09 09 09 69 rIDField);.....i
3380: 66 28 21 6e 61 6d 65 73 54 6f 50 6f 73 2e 4c 6f f(!namesToPos.Lo
3390: 6f 6b 75 70 28 73 74 72 49 44 46 69 65 6c 64 2c okup(strIDField,
33a0: 20 6e 65 77 49 44 46 69 65 6c 64 29 29 0d 0a 09 newIDField))...
33b0: 09 09 7b 0d 0a 09 09 09 09 43 53 74 72 69 6e 67 ..{......CString
33c0: 20 6d 73 67 3b 0d 0a 09 09 09 09 6d 73 67 2e 46 msg;......msg.F
33d0: 6f 72 6d 61 74 28 22 c8 e4 e5 ed f2 e8 f4 e8 ea ormat(".........
33e0: e0 f6 e8 ee ed ed ee e5 20 ef ee eb e5 20 27 25 ........ .... '%
33f0: 73 27 20 ed e5 20 ed e0 e9 e4 e5 ed ee 20 e2 20 s' .. ....... .
3400: f1 ee f1 f2 e0 e2 e5 20 ef ee eb e5 e9 20 e7 e0 ....... ..... ..
3410: ef f0 ee f1 e0 22 2c 20 73 74 72 49 44 46 69 65 .....", strIDFie
3420: 6c 64 29 3b 0d 0a 09 09 09 09 43 42 4c 4d 6f 64 ld);......CBLMod
3430: 75 6c 65 3a 3a 52 61 69 73 65 45 78 74 52 75 6e ule::RaiseExtRun
3440: 74 69 6d 65 45 72 72 6f 72 28 6d 73 67 2c 20 46 timeError(msg, F
3450: 41 4c 53 45 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 ALSE);.....}....
3460: 7d 0d 0a 09 7d 0d 0a 09 2f 2f 20 d0 e0 e7 ee e1 }...}...// .....
3470: fa e5 ec 20 e7 e0 ef f0 ee f1 20 ed e0 20 ef ee ... ...... .. ..
3480: eb ff 2c 20 e8 f1 f2 ee f7 ed e8 ea 20 e8 20 f3 .., ........ . .
3490: f1 eb ee e2 e8 ff 0d 0a 09 43 53 74 72 69 6e 67 .........CString
34a0: 41 72 72 61 79 20 66 69 65 6c 64 73 45 78 70 72 Array fieldsExpr
34b0: 65 73 73 69 6f 6e 73 2c 20 66 69 65 6c 64 41 6c essions, fieldAl
34c0: 69 61 73 65 73 3b 0d 0a 09 43 53 74 72 69 6e 67 iases;...CString
34d0: 20 66 72 6f 6d 2c 20 77 68 65 72 65 3b 0d 0a 09 from, where;...
34e0: 73 70 6c 69 74 51 75 65 72 79 28 73 74 72 51 75 splitQuery(strQu
34f0: 65 72 79 54 65 78 74 2c 20 66 69 65 6c 64 73 45 eryText, fieldsE
3500: 78 70 72 65 73 73 69 6f 6e 73 2c 20 66 72 6f 6d xpressions, from
3510: 2c 20 77 68 65 72 65 29 3b 0d 0a 09 2f 2f 20 ca , where);...// .
3520: e0 e6 e4 ee e5 20 ef ee eb e5 20 ed e0 e4 ee 20 ..... .... ....
3530: f0 e0 e7 e4 e5 eb e8 f2 fc 20 ed e0 20 e2 fb f0 ......... .. ...
3540: e0 e6 e5 ed e8 e5 20 e8 20 e0 eb e8 e0 f1 0d 0a ...... . .......
3550: 09 66 6f 72 28 44 57 4f 52 44 20 69 64 78 20 3d .for(DWORD idx =
3560: 20 30 2c 20 6d 69 64 78 20 3d 20 66 69 65 6c 64 0, midx = field
3570: 73 45 78 70 72 65 73 73 69 6f 6e 73 2e 47 65 74 sExpressions.Get
3580: 53 69 7a 65 28 29 3b 20 69 64 78 20 3c 20 6d 69 Size(); idx < mi
3590: 64 78 3b 20 69 64 78 2b 2b 29 0d 0a 09 7b 0d 0a dx; idx++)...{..
35a0: 09 09 43 53 74 72 69 6e 67 20 65 78 70 72 20 3d ..CString expr =
35b0: 20 66 69 65 6c 64 73 45 78 70 72 65 73 73 69 6f fieldsExpressio
35c0: 6e 73 5b 69 64 78 5d 2c 20 61 6c 69 61 73 3b 0d ns[idx], alias;.
35d0: 0a 09 09 65 78 70 72 2e 54 72 69 6d 4c 65 66 74 ...expr.TrimLeft
35e0: 28 74 72 69 6d 50 61 74 74 65 72 6e 29 3b 0d 0a (trimPattern);..
35f0: 09 09 65 78 70 72 2e 54 72 69 6d 52 69 67 68 74 ..expr.TrimRight
3600: 28 74 72 69 6d 50 61 74 74 65 72 6e 29 3b 0d 0a (trimPattern);..
3610: 09 09 4c 50 43 53 54 52 20 73 74 61 72 74 20 3d ..LPCSTR start =
3620: 20 65 78 70 72 2c 20 70 74 72 20 3d 20 73 74 61 expr, ptr = sta
3630: 72 74 20 2b 20 65 78 70 72 2e 47 65 74 4c 65 6e rt + expr.GetLen
3640: 67 74 68 28 29 20 2d 20 31 3b 0d 0a 09 09 69 66 gth() - 1;....if
3650: 28 2a 70 74 72 20 3d 3d 20 27 5d 27 29 0d 0a 09 (*ptr == ']')...
3660: 09 7b 0d 0a 09 09 09 77 68 69 6c 65 28 2a 2d 2d .{.....while(*--
3670: 70 74 72 20 21 3d 20 27 5b 27 29 3b 0d 0a 09 09 ptr != '[');....
3680: 09 4c 50 43 53 54 52 20 70 41 73 20 3d 20 2d 2d .LPCSTR pAs = --
3690: 70 74 72 3b 0d 0a 09 09 09 77 68 69 6c 65 28 70 ptr;.....while(p
36a0: 41 73 20 3e 20 73 74 61 72 74 20 2b 20 32 20 26 As > start + 2 &
36b0: 26 20 28 2a 70 41 73 20 3d 3d 20 27 20 27 20 7c & (*pAs == ' ' |
36c0: 7c 20 2a 70 41 73 20 3d 3d 20 27 5c 74 27 20 7c | *pAs == '\t' |
36d0: 7c 20 2a 70 41 73 20 3d 3d 20 27 5c 72 27 20 7c | *pAs == '\r' |
36e0: 7c 20 2a 70 41 73 20 3d 3d 20 27 5c 6e 27 29 29 | *pAs == '\n'))
36f0: 0d 0a 09 09 09 09 70 41 73 2d 2d 3b 0d 0a 09 09 ......pAs--;....
3700: 09 69 66 28 70 41 73 5b 30 5d 20 7c 20 30 78 32 .if(pAs[0] | 0x2
3710: 30 20 3d 3d 20 27 73 27 20 26 26 20 70 41 73 5b 0 == 's' && pAs[
3720: 2d 31 5d 20 7c 20 30 78 32 30 20 3d 3d 20 27 61 -1] | 0x20 == 'a
3730: 27 20 26 26 0d 0a 09 09 09 09 28 70 41 73 5b 2d ' &&......(pAs[-
3740: 32 5d 20 3d 3d 20 27 20 27 20 7c 7c 20 70 41 73 2] == ' ' || pAs
3750: 5b 2d 32 5d 20 3d 3d 20 27 5c 74 27 20 7c 7c 20 [-2] == '\t' ||
3760: 70 41 73 5b 2d 32 5d 20 3d 3d 20 27 5c 6e 27 29 pAs[-2] == '\n')
3770: 29 0d 0a 09 09 09 09 70 74 72 20 3d 20 70 41 73 )......ptr = pAs
3780: 20 2d 20 31 3b 0d 0a 09 09 09 61 6c 69 61 73 20 - 1;.....alias
3790: 3d 20 70 74 72 3b 0d 0a 09 09 09 65 78 70 72 2e = ptr;.....expr.
37a0: 47 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 GetBufferSetLeng
37b0: 74 68 28 70 74 72 20 2d 20 73 74 61 72 74 29 3b th(ptr - start);
37c0: 0d 0a 09 09 7d 0d 0a 09 09 66 69 65 6c 64 73 45 ....}....fieldsE
37d0: 78 70 72 65 73 73 69 6f 6e 73 5b 69 64 78 5d 20 xpressions[idx]
37e0: 3d 20 65 78 70 72 3b 0d 0a 09 09 66 69 65 6c 64 = expr;....field
37f0: 41 6c 69 61 73 65 73 2e 41 64 64 28 61 6c 69 61 Aliases.Add(alia
3800: 73 29 3b 0d 0a 09 7d 0d 0a 0d 0a 09 6d 5f 6d 65 s);...}.....m_me
3810: 74 61 50 61 72 73 65 72 2e 72 65 73 65 74 28 29 taParser.reset()
3820: 3b 0d 0a 09 0d 0a 09 43 4e 6f 43 61 73 65 4d 61 ;......CNoCaseMa
3830: 70 3c 69 6e 74 3e 20 75 73 65 64 46 69 65 6c 64 p<int> usedField
3840: 73 3b 0d 0a 09 69 66 28 6d 5f 66 69 65 6c 64 73 s;...if(m_fields
3850: 49 6e 66 6f 29 0d 0a 09 7b 0d 0a 09 09 66 6f 72 Info)...{....for
3860: 28 44 57 4f 52 44 20 69 64 78 20 3d 20 30 3b 20 (DWORD idx = 0;
3870: 69 64 78 20 3c 20 66 69 65 6c 64 73 49 6e 66 6f idx < fieldsInfo
3880: 43 6f 75 6e 74 28 29 3b 20 69 64 78 2b 2b 29 0d Count(); idx++).
3890: 0a 09 09 7b 0d 0a 09 09 09 69 66 28 30 20 21 3d ...{.....if(0 !=
38a0: 20 28 6d 5f 66 69 65 6c 64 73 49 6e 66 6f 5b 69 (m_fieldsInfo[i
38b0: 64 78 5d 2e 66 6c 61 67 73 20 26 20 66 69 65 6c dx].flags & fiel
38c0: 64 5f 69 6e 66 6f 3a 3a 69 6e 55 73 65 29 29 0d d_info::inUse)).
38d0: 0a 09 09 09 09 75 73 65 64 46 69 65 6c 64 73 5b .....usedFields[
38e0: 6d 5f 66 69 65 6c 64 73 49 6e 66 6f 5b 69 64 78 m_fieldsInfo[idx
38f0: 5d 2e 6e 61 6d 65 4f 66 51 75 65 72 79 43 6f 6c ].nameOfQueryCol
3900: 75 6d 6e 5d 20 3d 20 30 3b 0d 0a 09 09 7d 0d 0a umn] = 0;....}..
3910: 09 7d 0d 0a 0d 0a 09 63 6c 65 61 72 51 75 65 72 .}.....clearQuer
3920: 69 65 73 44 61 74 61 28 29 3b 0d 0a 0d 0a 09 2f iesData();...../
3930: 2f 20 c7 e0 ef ee eb ed e8 ec 20 66 69 65 6c 64 / ........ field
3940: 73 49 6e 66 6f 0d 0a 09 6d 5f 66 69 65 6c 64 73 sInfo...m_fields
3950: 49 6e 66 6f 43 6f 75 6e 74 20 3d 20 66 69 65 6c InfoCount = fiel
3960: 64 73 43 6f 75 6e 74 3b 0d 0a 09 6d 5f 66 69 65 dsCount;...m_fie
3970: 6c 64 73 49 6e 66 6f 20 3d 20 6e 65 77 20 66 69 ldsInfo = new fi
3980: 65 6c 64 5f 69 6e 66 6f 5b 66 69 65 6c 64 73 43 eld_info[fieldsC
3990: 6f 75 6e 74 5d 3b 0d 0a 09 66 69 65 6c 64 5f 69 ount];...field_i
39a0: 6e 66 6f 2a 20 70 46 49 20 3d 20 6d 5f 66 69 65 nfo* pFI = m_fie
39b0: 6c 64 73 49 6e 66 6f 3b 0d 0a 0d 0a 09 2f 2f 20 ldsInfo;.....//
39c0: c8 ed f4 f3 20 ee 20 ef ee eb ff f5 20 f3 eb ee .... . ..... ...
39d0: e6 e8 ec 20 f2 e0 ea 3a 0d 0a 09 2f 2f 20 d1 ed ... ...:...// ..
39e0: e0 f7 e0 eb e0 20 ea eb fe f7 e5 e2 fb e5 20 ef ..... ........ .
39f0: ee eb ff 20 e2 20 ed f3 e6 ed ee ec 20 ef ee f0 ... . ...... ...
3a00: ff e4 ea e5 2c 20 e7 e0 f2 e5 ec 20 e8 e4 2d ef ...., ..... ..-.
3a10: ee eb e5 2c 20 e5 f1 eb e8 20 ee ed ee 20 e5 f1 ..., .... ... ..
3a20: f2 fc 0d 0a 09 2f 2f 20 e7 e0 f2 e5 ec 20 ee f1 .....// ..... ..
3a30: f2 e0 eb fc ed fb e5 20 ef ee eb ff 2e 20 dd f2 ....... ..... ..
3a40: ee 20 ed f3 e6 ed ee 20 e4 eb ff 20 f2 ee e3 ee . ..... ... ....
3a50: 2c 20 f7 f2 ee 20 e1 fb 20 ef f0 e8 20 e8 e7 ec , ... .. ... ...
3a60: e5 ed e5 ed e8 e8 20 f1 ee f1 f2 e0 e2 e0 0d 0a ...... .........
3a70: 09 2f 2f 20 ea ee eb ee ed ee ea 20 e7 e0 ef f0 .// ....... ....
3a80: ee f1 e0 20 ea eb fe f7 e5 e2 fb e5 20 e8 20 e8 ... ........ . .
3a90: e4 20 ef ee eb ff 20 ee f1 f2 e0 e2 e0 eb e8 f1 . .... .........
3aa0: fc 20 ed e0 20 f2 e5 f5 20 e6 e5 20 ef ee e7 e8 . .. ... .. ....
3ab0: f6 e8 ff f5 20 e2 20 e7 e0 ef f0 ee f1 e5 2e 0d .... . .........
3ac0: 0a 09 2f 2f 20 d1 ed e0 f7 e0 eb e0 20 f0 e0 e7 ..// ....... ...
3ad0: ec e5 f1 f2 e8 ec 20 ea eb fe f7 e5 e2 fb e5 20 ...... ........
3ae0: ef ee eb ff 0d 0a 09 6d 5f 6b 65 79 46 69 65 6c .......m_keyFiel
3af0: 64 43 6f 75 6e 74 20 3d 20 6e 65 77 4b 65 79 46 dCount = newKeyF
3b00: 69 65 6c 64 73 2e 47 65 74 53 69 7a 65 28 29 3b ields.GetSize();
3b10: 0d 0a 09 6d 5f 6b 65 79 50 61 72 61 6d 4e 61 6d ...m_keyParamNam
3b20: 65 73 20 3d 20 6e 65 77 20 43 53 74 72 69 6e 67 es = new CString
3b30: 5b 6d 5f 6b 65 79 46 69 65 6c 64 43 6f 75 6e 74 [m_keyFieldCount
3b40: 5d 3b 0d 0a 09 69 6e 74 20 6e 49 44 46 69 65 6c ];...int nIDFiel
3b50: 64 41 64 64 65 64 20 3d 20 2d 31 3b 0d 0a 09 66 dAdded = -1;...f
3b60: 6f 72 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 or(idx = 0; idx
3b70: 3c 20 6d 5f 6b 65 79 46 69 65 6c 64 43 6f 75 6e < m_keyFieldCoun
3b80: 74 3b 20 69 64 78 2b 2b 29 0d 0a 09 7b 0d 0a 09 t; idx++)...{...
3b90: 09 44 57 4f 52 44 20 70 6f 73 20 3d 20 6e 65 77 .DWORD pos = new
3ba0: 4b 65 79 46 69 65 6c 64 73 5b 69 64 78 5d 3b 0d KeyFields[idx];.
3bb0: 0a 09 09 70 46 49 2d 3e 74 79 70 65 20 3d 20 74 ...pFI->type = t
3bc0: 79 70 65 73 5b 70 6f 73 5d 3b 0d 0a 09 09 70 46 ypes[pos];....pF
3bd0: 49 2d 3e 65 78 70 72 65 73 73 69 6f 6e 20 3d 20 I->expression =
3be0: 66 69 65 6c 64 73 45 78 70 72 65 73 73 69 6f 6e fieldsExpression
3bf0: 73 5b 70 6f 73 5d 3b 0d 0a 09 09 70 46 49 2d 3e s[pos];....pFI->
3c00: 61 6c 69 61 73 20 3d 20 66 69 65 6c 64 41 6c 69 alias = fieldAli
3c10: 61 73 65 73 5b 70 6f 73 5d 3b 0d 0a 09 09 70 46 ases[pos];....pF
3c20: 49 2d 3e 6e 61 6d 65 4f 66 51 75 65 72 79 43 6f I->nameOfQueryCo
3c30: 6c 75 6d 6e 20 3d 20 66 69 65 6c 64 4e 61 6d 65 lumn = fieldName
3c40: 73 5b 70 6f 73 5d 3b 0d 0a 09 09 70 46 49 2d 3e s[pos];....pFI->
3c50: 66 6c 61 67 73 20 3d 20 66 69 65 6c 64 5f 69 6e flags = field_in
3c60: 66 6f 3a 3a 6b 65 79 46 69 65 6c 64 20 7c 20 66 fo::keyField | f
3c70: 69 65 6c 64 5f 69 6e 66 6f 3a 3a 69 6e 55 73 65 ield_info::inUse
3c80: 3b 0d 0a 09 09 6d 5f 66 69 65 6c 64 42 79 4e 61 ;....m_fieldByNa
3c90: 6d 65 5b 70 46 49 2d 3e 6e 61 6d 65 4f 66 51 75 me[pFI->nameOfQu
3ca0: 65 72 79 43 6f 6c 75 6d 6e 5d 20 3d 20 70 46 49 eryColumn] = pFI
3cb0: 3b 0d 0a 09 09 66 69 65 6c 64 73 45 78 70 72 65 ;....fieldsExpre
3cc0: 73 73 69 6f 6e 73 5b 70 6f 73 5d 2e 45 6d 70 74 ssions[pos].Empt
3cd0: 79 28 29 3b 0d 0a 09 09 6d 5f 6b 65 79 50 61 72 y();....m_keyPar
3ce0: 61 6d 4e 61 6d 65 73 5b 69 64 78 5d 2e 46 6f 72 amNames[idx].For
3cf0: 6d 61 74 28 22 25 73 25 69 22 2c 20 6b 65 79 50 mat("%s%i", keyP
3d00: 61 72 61 6d 50 61 74 74 65 72 6e 2c 20 69 64 78 aramPattern, idx
3d10: 29 3b 09 2f 2f 20 c8 ec e5 ed e0 20 53 51 4c 2d );.// ..... SQL-
3d20: ef e0 f0 e0 ec e5 f2 f0 ee e2 20 e4 eb ff 20 ea .......... ... .
3d30: eb fe f7 e5 e9 0d 0a 09 09 70 46 49 2b 2b 3b 0d .........pFI++;.
3d40: 0a 09 09 69 66 28 6e 65 77 49 44 46 69 65 6c 64 ...if(newIDField
3d50: 20 3d 3d 20 70 6f 73 29 0d 0a 09 09 09 6e 49 44 == pos).....nID
3d60: 46 69 65 6c 64 41 64 64 65 64 20 3d 20 69 64 78 FieldAdded = idx
3d70: 3b 0d 0a 09 7d 0d 0a 09 2f 2f 20 d2 e5 ef e5 f0 ;...}...// .....
3d80: fc 20 e8 e4 2d ef ee eb e5 2c 20 e5 f1 eb e8 20 . ..-...., ....
3d90: ee ed ee 20 e5 f1 f2 fc 20 e8 20 e5 f9 e5 20 ed ... .... . ... .
3da0: e5 20 e4 ee e1 e0 e2 eb e5 ed ee 0d 0a 09 69 66 . ............if
3db0: 28 6e 65 77 49 44 46 69 65 6c 64 20 3e 3d 20 30 (newIDField >= 0
3dc0: 20 26 26 20 6e 49 44 46 69 65 6c 64 41 64 64 65 && nIDFieldAdde
3dd0: 64 20 3c 20 30 29 0d 0a 09 7b 0d 0a 09 09 70 46 d < 0)...{....pF
3de0: 49 2d 3e 74 79 70 65 20 3d 20 74 79 70 65 73 5b I->type = types[
3df0: 6e 65 77 49 44 46 69 65 6c 64 5d 3b 0d 0a 09 09 newIDField];....
3e00: 70 46 49 2d 3e 65 78 70 72 65 73 73 69 6f 6e 20 pFI->expression
3e10: 3d 20 66 69 65 6c 64 73 45 78 70 72 65 73 73 69 = fieldsExpressi
3e20: 6f 6e 73 5b 6e 65 77 49 44 46 69 65 6c 64 5d 3b ons[newIDField];
3e30: 0d 0a 09 09 70 46 49 2d 3e 61 6c 69 61 73 20 3d ....pFI->alias =
3e40: 20 66 69 65 6c 64 41 6c 69 61 73 65 73 5b 6e 65 fieldAliases[ne
3e50: 77 49 44 46 69 65 6c 64 5d 3b 0d 0a 09 09 70 46 wIDField];....pF
3e60: 49 2d 3e 6e 61 6d 65 4f 66 51 75 65 72 79 43 6f I->nameOfQueryCo
3e70: 6c 75 6d 6e 20 3d 20 66 69 65 6c 64 4e 61 6d 65 lumn = fieldName
3e80: 73 5b 6e 65 77 49 44 46 69 65 6c 64 5d 3b 0d 0a s[newIDField];..
3e90: 09 09 70 46 49 2d 3e 66 6c 61 67 73 20 3d 20 66 ..pFI->flags = f
3ea0: 69 65 6c 64 5f 69 6e 66 6f 3a 3a 69 64 46 69 65 ield_info::idFie
3eb0: 6c 64 20 7c 20 66 69 65 6c 64 5f 69 6e 66 6f 3a ld | field_info:
3ec0: 3a 69 6e 55 73 65 3b 0d 0a 09 09 6d 5f 66 69 65 :inUse;....m_fie
3ed0: 6c 64 42 79 4e 61 6d 65 5b 70 46 49 2d 3e 6e 61 ldByName[pFI->na
3ee0: 6d 65 4f 66 51 75 65 72 79 43 6f 6c 75 6d 6e 5d meOfQueryColumn]
3ef0: 20 3d 20 70 46 49 3b 0d 0a 09 09 66 69 65 6c 64 = pFI;....field
3f00: 73 45 78 70 72 65 73 73 69 6f 6e 73 5b 6e 65 77 sExpressions[new
3f10: 49 44 46 69 65 6c 64 5d 2e 45 6d 70 74 79 28 29 IDField].Empty()
3f20: 3b 0d 0a 09 09 70 46 49 2b 2b 3b 0d 0a 09 09 6e ;....pFI++;....n
3f30: 49 44 46 69 65 6c 64 41 64 64 65 64 20 3d 20 69 IDFieldAdded = i
3f40: 64 78 3b 0d 0a 09 7d 0d 0a 09 2f 2f 20 d2 e5 ef dx;...}...// ...
3f50: e5 f0 fc 20 ee f1 f2 e0 eb fc ed fb e5 20 ef ee ... ......... ..
3f60: eb ff 0d 0a 09 66 6f 72 28 69 64 78 20 3d 20 30 .....for(idx = 0
3f70: 3b 20 69 64 78 20 3c 20 66 69 65 6c 64 73 43 6f ; idx < fieldsCo
3f80: 75 6e 74 20 3b 20 69 64 78 2b 2b 29 0d 0a 09 7b unt ; idx++)...{
3f90: 0d 0a 09 09 69 66 28 21 66 69 65 6c 64 73 45 78 ....if(!fieldsEx
3fa0: 70 72 65 73 73 69 6f 6e 73 5b 69 64 78 5d 2e 49 pressions[idx].I
3fb0: 73 45 6d 70 74 79 28 29 29 0d 0a 09 09 7b 0d 0a sEmpty())....{..
3fc0: 09 09 09 70 46 49 2d 3e 74 79 70 65 20 3d 20 74 ...pFI->type = t
3fd0: 79 70 65 73 5b 69 64 78 5d 3b 0d 0a 09 09 09 70 ypes[idx];.....p
3fe0: 46 49 2d 3e 65 78 70 72 65 73 73 69 6f 6e 20 3d FI->expression =
3ff0: 20 66 69 65 6c 64 73 45 78 70 72 65 73 73 69 6f fieldsExpressio
4000: 6e 73 5b 69 64 78 5d 3b 0d 0a 09 09 09 70 46 49 ns[idx];.....pFI
4010: 2d 3e 61 6c 69 61 73 20 3d 20 66 69 65 6c 64 41 ->alias = fieldA
4020: 6c 69 61 73 65 73 5b 69 64 78 5d 3b 0d 0a 09 09 liases[idx];....
4030: 09 70 46 49 2d 3e 6e 61 6d 65 4f 66 51 75 65 72 .pFI->nameOfQuer
4040: 79 43 6f 6c 75 6d 6e 20 3d 20 66 69 65 6c 64 4e yColumn = fieldN
4050: 61 6d 65 73 5b 69 64 78 5d 3b 0d 0a 09 09 09 70 ames[idx];.....p
4060: 46 49 2d 3e 66 6c 61 67 73 20 3d 20 30 3b 0d 0a FI->flags = 0;..
4070: 09 09 09 6d 5f 66 69 65 6c 64 42 79 4e 61 6d 65 ...m_fieldByName
4080: 5b 70 46 49 2d 3e 6e 61 6d 65 4f 66 51 75 65 72 [pFI->nameOfQuer
4090: 79 43 6f 6c 75 6d 6e 5d 20 3d 20 70 46 49 3b 0d yColumn] = pFI;.
40a0: 0a 09 09 09 70 46 49 2b 2b 3b 0d 0a 09 09 7d 0d ....pFI++;....}.
40b0: 0a 09 7d 0d 0a 09 6d 5f 69 64 46 69 65 6c 64 50 ..}...m_idFieldP
40c0: 6f 73 20 3d 20 6e 49 44 46 69 65 6c 64 41 64 64 os = nIDFieldAdd
40d0: 65 64 3b 0d 0a 0d 0a 09 66 72 6f 6d 2e 54 72 69 ed;.....from.Tri
40e0: 6d 4c 65 66 74 28 74 72 69 6d 50 61 74 74 65 72 mLeft(trimPatter
40f0: 6e 29 3b 0d 0a 09 66 72 6f 6d 2e 54 72 69 6d 52 n);...from.TrimR
4100: 69 67 68 74 28 74 72 69 6d 50 61 74 74 65 72 6e ight(trimPattern
4110: 29 3b 0d 0a 09 77 68 65 72 65 2e 54 72 69 6d 4c );...where.TrimL
4120: 65 66 74 28 74 72 69 6d 50 61 74 74 65 72 6e 29 eft(trimPattern)
4130: 3b 0d 0a 09 77 68 65 72 65 2e 54 72 69 6d 52 69 ;...where.TrimRi
4140: 67 68 74 28 74 72 69 6d 50 61 74 74 65 72 6e 29 ght(trimPattern)
4150: 3b 0d 0a 0d 0a 09 6d 5f 66 72 6f 6d 2e 46 6f 72 ;.....m_from.For
4160: 6d 61 74 28 22 5c 72 5c 6e 20 66 72 6f 6d 5c 72 mat("\r\n from\r
4170: 5c 6e 25 73 5c 72 5c 6e 20 22 2c 20 66 72 6f 6d \n%s\r\n ", from
4180: 29 3b 0d 0a 09 69 66 28 21 77 68 65 72 65 2e 49 );...if(!where.I
4190: 73 45 6d 70 74 79 28 29 29 0d 0a 09 09 6d 5f 77 sEmpty())....m_w
41a0: 68 65 72 65 2e 46 6f 72 6d 61 74 28 22 28 25 73 here.Format("(%s
41b0: 29 22 2c 20 77 68 65 72 65 29 3b 0d 0a 0d 0a 09 )", where);.....
41c0: 69 66 28 75 73 65 64 46 69 65 6c 64 73 2e 47 65 if(usedFields.Ge
41d0: 74 43 6f 75 6e 74 28 29 29 0d 0a 09 7b 0d 0a 09 tCount())...{...
41e0: 09 66 6f 72 28 44 57 4f 52 44 20 69 64 78 20 3d .for(DWORD idx =
41f0: 20 30 3b 20 69 64 78 20 3c 20 66 69 65 6c 64 73 0; idx < fields
4200: 49 6e 66 6f 43 6f 75 6e 74 28 29 3b 20 69 64 78 InfoCount(); idx
4210: 2b 2b 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 6e 74 ++)....{.....int
4220: 20 69 3b 0d 0a 09 09 09 69 66 28 75 73 65 64 46 i;.....if(usedF
4230: 69 65 6c 64 73 2e 4c 6f 6f 6b 75 70 28 6d 5f 66 ields.Lookup(m_f
4240: 69 65 6c 64 73 49 6e 66 6f 5b 69 64 78 5d 2e 6e ieldsInfo[idx].n
4250: 61 6d 65 4f 66 51 75 65 72 79 43 6f 6c 75 6d 6e ameOfQueryColumn
4260: 2c 20 69 29 29 0d 0a 09 09 09 09 6d 5f 66 69 65 , i))......m_fie
4270: 6c 64 73 49 6e 66 6f 5b 69 64 78 5d 2e 66 6c 61 ldsInfo[idx].fla
4280: 67 73 20 7c 3d 20 66 69 65 6c 64 5f 69 6e 66 6f gs |= field_info
4290: 3a 3a 69 6e 55 73 65 3b 0d 0a 09 09 7d 0d 0a 09 ::inUse;....}...
42a0: 7d 0d 0a 09 52 65 73 65 74 44 61 74 61 28 29 3b }...ResetData();
42b0: 0d 0a 09 72 65 74 75 72 6e 20 54 52 55 45 3b 0d ...return TRUE;.
42c0: 0a 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c ...}....void SQL
42d0: 69 74 65 44 61 74 61 50 72 6f 76 69 64 65 72 3a iteDataProvider:
42e0: 3a 63 6c 65 61 72 52 6f 77 73 28 29 0d 0a 7b 0d :clearRows()..{.
42f0: 0a 09 2f 2f 20 dd f2 ee 20 ed e0 20 f1 eb f3 f7 ..// ... .. ....
4300: e0 e9 2c 20 e5 f1 eb e8 20 d2 cf 20 ed e5 e4 ee .., .... .. ....
4310: f4 e5 f2 f7 e8 eb ee 20 f1 f2 f0 ee ea e8 2c 20 ....... ......,
4320: ef ee eb f3 f7 e5 ed ed fb e5 20 e7 e0 ef f0 ee .......... .....
4330: f1 ee ec 0d 0a 09 53 51 4c 69 74 65 44 61 74 61 ......SQLiteData
4340: 52 6f 77 2a 2a 20 70 70 52 6f 77 73 20 3d 20 28 Row** ppRows = (
4350: 53 51 4c 69 74 65 44 61 74 61 52 6f 77 2a 2a 29 SQLiteDataRow**)
4360: 6d 5f 72 6f 77 73 2e 47 65 74 44 61 74 61 28 29 m_rows.GetData()
4370: 3b 0d 0a 09 66 6f 72 28 44 57 4f 52 44 20 63 20 ;...for(DWORD c
4380: 3d 20 6d 5f 72 6f 77 73 2e 47 65 74 53 69 7a 65 = m_rows.GetSize
4390: 28 29 3b 20 63 2d 2d 3b 20 29 0d 0a 09 09 64 65 (); c--; )....de
43a0: 6c 65 74 65 20 2a 70 70 52 6f 77 73 2b 2b 3b 0d lete *ppRows++;.
43b0: 0a 09 6d 5f 72 6f 77 73 2e 52 65 6d 6f 76 65 41 ..m_rows.RemoveA
43c0: 6c 6c 28 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 ll();..}....void
43d0: 20 53 51 4c 69 74 65 44 61 74 61 50 72 6f 76 69 SQLiteDataProvi
43e0: 64 65 72 3a 3a 63 6c 65 61 72 51 75 65 72 69 65 der::clearQuerie
43f0: 73 44 61 74 61 28 29 0d 0a 7b 0d 0a 09 63 6c 65 sData()..{...cle
4400: 61 72 52 6f 77 73 28 29 3b 0d 0a 09 66 6f 72 28 arRows();...for(
4410: 44 57 4f 52 44 20 69 64 78 20 3d 20 30 3b 20 69 DWORD idx = 0; i
4420: 64 78 20 3c 20 71 4c 61 73 74 3b 20 69 64 78 2b dx < qLast; idx+
4430: 2b 29 0d 0a 09 7b 0d 0a 09 09 64 65 6c 65 74 65 +)...{....delete
4440: 20 6d 5f 71 75 65 72 69 65 73 5b 69 64 78 5d 3b m_queries[idx];
4450: 0d 0a 09 09 6d 5f 71 75 65 72 69 65 73 5b 69 64 ....m_queries[id
4460: 78 5d 20 3d 20 30 3b 0d 0a 09 7d 0d 0a 09 6d 5f x] = 0;...}...m_
4470: 73 71 6c 50 61 72 61 6d 73 2e 64 69 72 74 79 51 sqlParams.dirtyQ
4480: 75 65 72 69 65 73 20 3d 20 30 78 46 46 46 46 46 ueries = 0xFFFFF
4490: 46 46 46 3b 0d 0a 09 0d 0a 09 6d 5f 6b 65 79 46 FFF;......m_keyF
44a0: 69 65 6c 64 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a ieldCount = 0;..
44b0: 09 6d 5f 63 6f 75 6e 74 4f 66 43 6f 6c 75 6d 6e .m_countOfColumn
44c0: 73 20 3d 20 30 3b 0d 0a 09 64 65 6c 65 74 65 20 s = 0;...delete
44d0: 5b 5d 20 6d 5f 71 75 65 72 79 46 69 65 6c 64 73 [] m_queryFields
44e0: 4e 61 6d 65 73 3b 09 2f 2f 20 cf f0 ee f1 f2 ee Names;.// ......
44f0: 20 e8 ec e5 ed e0 20 ea ee eb ee ed ee ea 20 f2 ..... ....... .
4500: e5 ea f3 f9 e5 e3 ee 20 e7 e0 ef f0 ee f1 e0 0d ....... ........
4510: 0a 09 6d 5f 71 75 65 72 79 46 69 65 6c 64 73 4e ..m_queryFieldsN
4520: 61 6d 65 73 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 64 ames = NULL;...d
4530: 65 6c 65 74 65 20 5b 5d 20 6d 5f 6b 65 79 50 61 elete [] m_keyPa
4540: 72 61 6d 4e 61 6d 65 73 3b 0d 0a 09 6d 5f 6b 65 ramNames;...m_ke
4550: 79 50 61 72 61 6d 4e 61 6d 65 73 20 3d 20 4e 55 yParamNames = NU
4560: 4c 4c 3b 0d 0a 09 6d 5f 69 64 46 69 65 6c 64 50 LL;...m_idFieldP
4570: 6f 73 20 3d 20 2d 31 3b 09 09 09 09 2f 2f 20 cd os = -1;....// .
4580: ee ec e5 f0 20 e8 e4 2d ef ee eb ff 20 e2 20 f1 .... ..-.... . .
4590: ef e8 f1 ea e5 20 e2 f1 e5 f5 20 ef ee eb e5 e9 ..... .... .....
45a0: 0d 0a 09 6d 5f 66 69 65 6c 64 42 79 4e 61 6d 65 ...m_fieldByName
45b0: 2e 52 65 6d 6f 76 65 41 6c 6c 28 29 3b 0d 0a 09 .RemoveAll();...
45c0: 6d 5f 73 65 6c 65 63 74 2e 45 6d 70 74 79 28 29 m_select.Empty()
45d0: 3b 0d 0a 09 6d 5f 66 72 6f 6d 2e 45 6d 70 74 79 ;...m_from.Empty
45e0: 28 29 3b 0d 0a 09 6d 5f 77 68 65 72 65 2e 45 6d ();...m_where.Em
45f0: 70 74 79 28 29 3b 0d 0a 09 6d 5f 6c 61 73 74 51 pty();...m_lastQ
4600: 53 43 6f 6c 75 6d 6e 20 3d 20 4e 55 4c 4c 3b 0d SColumn = NULL;.
4610: 0a 09 0d 0a 09 64 65 6c 65 74 65 20 5b 5d 20 6d .....delete [] m
4620: 5f 66 69 65 6c 64 73 49 6e 66 6f 3b 09 09 2f 2f _fieldsInfo;..//
4630: 20 cc e0 f1 f1 e8 e2 20 f1 20 ee ef e8 f1 e0 ed ...... . ......
4640: e8 e5 ec 20 e2 f1 e5 f5 20 ef ee eb e5 e9 20 e7 ... .... ..... .
4650: e0 ef f0 ee f1 e0 0d 0a 09 6d 5f 66 69 65 6c 64 .........m_field
4660: 73 49 6e 66 6f 43 6f 75 6e 74 20 3d 20 30 3b 0d sInfoCount = 0;.
4670: 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c 69 74 .}....void SQLit
4680: 65 44 61 74 61 50 72 6f 76 69 64 65 72 3a 3a 63 eDataProvider::c
4690: 6c 65 61 72 41 6c 6c 28 29 0d 0a 7b 0d 0a 09 63 learAll()..{...c
46a0: 6c 65 61 72 51 75 65 72 69 65 73 44 61 74 61 28 learQueriesData(
46b0: 29 3b 0d 0a 09 69 66 28 6d 5f 70 44 61 74 61 42 );...if(m_pDataB
46c0: 61 73 65 29 0d 0a 09 7b 0d 0a 09 09 6d 5f 70 44 ase)...{....m_pD
46d0: 61 74 61 42 61 73 65 2d 3e 44 65 63 72 52 65 66 ataBase->DecrRef
46e0: 28 29 3b 0d 0a 09 09 6d 5f 70 44 61 74 61 42 61 ();....m_pDataBa
46f0: 73 65 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 7d 0d 0a se = NULL;...}..
4700: 7d 0d 0a 0d 0a 53 51 4c 69 74 65 51 75 65 72 79 }....SQLiteQuery
4710: 2a 20 53 51 4c 69 74 65 44 61 74 61 50 72 6f 76 * SQLiteDataProv
4720: 69 64 65 72 3a 3a 67 65 74 51 75 65 72 79 28 71 ider::getQuery(q
4730: 54 79 70 65 73 20 74 79 70 65 29 0d 0a 7b 0d 0a Types type)..{..
4740: 09 53 51 4c 69 74 65 51 75 65 72 79 2a 20 70 51 .SQLiteQuery* pQ
4750: 75 65 72 79 20 3d 20 6d 5f 71 75 65 72 69 65 73 uery = m_queries
4760: 5b 74 79 70 65 5d 3b 0d 0a 09 69 66 28 21 70 51 [type];...if(!pQ
4770: 75 65 72 79 29 0d 0a 09 7b 0d 0a 09 09 61 75 74 uery)...{....aut
4780: 6f 5f 70 74 72 3c 53 51 4c 69 74 65 51 75 65 72 o_ptr<SQLiteQuer
4790: 79 3e 20 71 75 65 72 79 28 6d 5f 70 44 61 74 61 y> query(m_pData
47a0: 42 61 73 65 2d 3e 6e 65 77 51 75 65 72 79 28 29 Base->newQuery()
47b0: 29 3b 0d 0a 09 09 71 75 65 72 79 2d 3e 73 65 74 );....query->set
47c0: 44 65 62 75 67 28 6d 5f 64 65 62 75 67 29 3b 0d Debug(m_debug);.
47d0: 0a 09 09 69 66 28 6d 5f 64 65 62 75 67 29 0d 0a ...if(m_debug)..
47e0: 09 09 7b 0d 0a 09 09 09 73 74 61 74 69 63 20 63 ..{.....static c
47f0: 6f 6e 73 74 20 4c 50 43 53 54 52 20 6e 61 6d 65 onst LPCSTR name
4800: 73 5b 5d 20 3d 20 7b 22 f1 eb e5 e4 fe f9 e8 e5 s[] = {"........
4810: 20 e7 e0 ef e8 f1 e8 22 2c 20 22 ef f0 e5 e4 fb ......", ".....
4820: e4 f3 f9 e8 e5 20 e7 e0 ef e8 f1 e8 22 2c 20 22 ..... ......", "
4830: ef e5 f0 e2 fb e5 20 e7 e0 ef e8 f1 e8 22 2c 0d ...... ......",.
4840: 0a 09 09 09 09 22 ef ee f1 eb e5 e4 ed e8 e5 20 .....".........
4850: e7 e0 ef e8 f1 e8 22 2c 20 22 e7 e0 ef e8 f1 fc ......", "......
4860: 20 ef ee 20 69 64 22 2c 20 22 ee e1 ed ee e2 eb .. id", "......
4870: e5 ed e8 e5 20 f1 f2 f0 ee ea e8 22 7d 3b 0d 0a .... ......"};..
4880: 09 09 09 44 6f 4d 73 67 4c 69 6e 65 28 22 cf ee ...DoMsgLine("..
4890: f1 f2 e0 e2 f9 e8 e5 20 e4 e0 ed ed fb f5 20 53 ....... ...... S
48a0: 51 4c 69 74 65 3a 20 d4 ee f0 ec e8 f0 ee e2 e0 QLite: .........
48b0: ed e8 e5 20 e7 e0 ef f0 ee f1 e0 20 27 25 73 27 ... ....... '%s'
48c0: 22 2c 20 6d 6d 4e 6f 6e 65 2c 20 6e 61 6d 65 73 ", mmNone, names
48d0: 5b 74 79 70 65 5d 29 3b 0d 0a 09 09 7d 0d 0a 09 [type]);....}...
48e0: 09 2f 2f 20 d4 ee f0 ec e8 f0 f3 e5 ec 20 f2 e5 .// ......... ..
48f0: ea f1 f2 20 e7 e0 ef f0 ee f1 e0 0d 0a 09 09 69 ... ...........i
4900: 66 28 6d 5f 73 65 6c 65 63 74 2e 49 73 45 6d 70 f(m_select.IsEmp
4910: 74 79 28 29 29 09 2f 2f 20 cd e0 e4 ee 20 ef e5 ty()).// .... ..
4920: f0 e5 f1 f2 f0 ee e8 f2 fc 20 f1 ef e8 f1 ee ea ......... ......
4930: 20 ef ee eb e5 e9 0d 0a 09 09 7b 0d 0a 09 09 09 .........{.....
4940: 44 57 4f 52 44 20 63 6f 75 6e 74 4f 66 46 69 65 DWORD countOfFie
4950: 6c 64 73 49 6e 51 75 65 72 79 20 3d 20 30 3b 0d ldsInQuery = 0;.
4960: 0a 09 09 09 66 6f 72 28 44 57 4f 52 44 20 69 64 ....for(DWORD id
4970: 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 66 69 65 x = 0; idx < fie
4980: 6c 64 73 49 6e 66 6f 43 6f 75 6e 74 28 29 3b 20 ldsInfoCount();
4990: 69 64 78 2b 2b 29 0d 0a 09 09 09 7b 0d 0a 09 09 idx++).....{....
49a0: 09 09 69 66 28 66 69 65 6c 64 49 6e 66 6f 28 69 ..if(fieldInfo(i
49b0: 64 78 29 2e 66 6c 61 67 73 20 26 20 66 69 65 6c dx).flags & fiel
49c0: 64 5f 69 6e 66 6f 3a 3a 69 6e 55 73 65 29 0d 0a d_info::inUse)..
49d0: 09 09 09 09 09 63 6f 75 6e 74 4f 66 46 69 65 6c .....countOfFiel
49e0: 64 73 49 6e 51 75 65 72 79 2b 2b 3b 0d 0a 09 09 dsInQuery++;....
49f0: 09 7d 0d 0a 09 09 09 69 66 28 63 6f 75 6e 74 4f .}.....if(countO
4a00: 66 46 69 65 6c 64 73 49 6e 51 75 65 72 79 20 21 fFieldsInQuery !
4a10: 3d 20 6d 5f 63 6f 75 6e 74 4f 66 43 6f 6c 75 6d = m_countOfColum
4a20: 6e 73 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 6d ns).....{......m
4a30: 5f 63 6f 75 6e 74 4f 66 43 6f 6c 75 6d 6e 73 20 _countOfColumns
4a40: 3d 20 63 6f 75 6e 74 4f 66 46 69 65 6c 64 73 49 = countOfFieldsI
4a50: 6e 51 75 65 72 79 3b 0d 0a 09 09 09 09 64 65 6c nQuery;......del
4a60: 65 74 65 20 5b 5d 20 6d 5f 71 75 65 72 79 46 69 ete [] m_queryFi
4a70: 65 6c 64 73 4e 61 6d 65 73 3b 0d 0a 09 09 09 09 eldsNames;......
4a80: 6d 5f 71 75 65 72 79 46 69 65 6c 64 73 4e 61 6d m_queryFieldsNam
4a90: 65 73 20 3d 20 6e 65 77 20 4c 50 43 53 54 52 5b es = new LPCSTR[
4aa0: 6d 5f 63 6f 75 6e 74 4f 66 43 6f 6c 75 6d 6e 73 m_countOfColumns
4ab0: 5d 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 6d 5f 73 ];.....}.....m_s
4ac0: 65 6c 65 63 74 20 3d 20 22 73 65 6c 65 63 74 5c elect = "select\
4ad0: 72 5c 6e 22 3b 0d 0a 09 09 09 44 57 4f 52 44 20 r\n";.....DWORD
4ae0: 70 6f 73 20 3d 20 30 3b 0d 0a 09 09 09 66 6f 72 pos = 0;.....for
4af0: 28 69 64 78 20 3d 20 30 3b 20 69 64 78 20 3c 20 (idx = 0; idx <
4b00: 66 69 65 6c 64 73 49 6e 66 6f 43 6f 75 6e 74 28 fieldsInfoCount(
4b10: 29 3b 20 69 64 78 2b 2b 29 0d 0a 09 09 09 7b 0d ); idx++).....{.
4b20: 0a 09 09 09 09 63 6f 6e 73 74 20 66 69 65 6c 64 .....const field
4b30: 5f 69 6e 66 6f 26 20 66 69 20 3d 20 66 69 65 6c _info& fi = fiel
4b40: 64 49 6e 66 6f 28 69 64 78 29 3b 0d 0a 09 09 09 dInfo(idx);.....
4b50: 09 69 66 28 66 69 2e 66 6c 61 67 73 20 26 20 66 .if(fi.flags & f
4b60: 69 65 6c 64 5f 69 6e 66 6f 3a 3a 69 6e 55 73 65 ield_info::inUse
4b70: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 6d )......{.......m
4b80: 5f 73 65 6c 65 63 74 20 2b 3d 20 66 69 2e 65 78 _select += fi.ex
4b90: 70 72 65 73 73 69 6f 6e 20 2b 20 66 69 2e 61 6c pression + fi.al
4ba0: 69 61 73 20 2b 20 22 2c 5c 72 5c 6e 22 3b 0d 0a ias + ",\r\n";..
4bb0: 09 09 09 09 09 6d 5f 66 69 65 6c 64 73 49 6e 66 .....m_fieldsInf
4bc0: 6f 5b 69 64 78 5d 2e 70 6f 73 49 6e 51 75 65 72 o[idx].posInQuer
4bd0: 79 20 3d 20 70 6f 73 3b 0d 0a 09 09 09 09 09 6d y = pos;.......m
4be0: 5f 71 75 65 72 79 46 69 65 6c 64 73 4e 61 6d 65 _queryFieldsName
4bf0: 73 5b 70 6f 73 5d 20 3d 20 66 69 2e 6e 61 6d 65 s[pos] = fi.name
4c00: 4f 66 51 75 65 72 79 43 6f 6c 75 6d 6e 3b 0d 0a OfQueryColumn;..
4c10: 09 09 09 09 09 70 6f 73 2b 2b 3b 0d 0a 09 09 09 .....pos++;.....
4c20: 09 7d 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 .}......else....
4c30: 09 09 09 6d 5f 66 69 65 6c 64 73 49 6e 66 6f 5b ...m_fieldsInfo[
4c40: 69 64 78 5d 2e 70 6f 73 49 6e 51 75 65 72 79 20 idx].posInQuery
4c50: 3d 20 2d 31 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 = -1;.....}.....
4c60: 6d 5f 73 65 6c 65 63 74 2e 47 65 74 42 75 66 66 m_select.GetBuff
4c70: 65 72 53 65 74 4c 65 6e 67 74 68 28 6d 5f 73 65 erSetLength(m_se
4c80: 6c 65 63 74 2e 47 65 74 4c 65 6e 67 74 68 28 29 lect.GetLength()
4c90: 20 2d 20 33 29 3b 0d 0a 09 09 7d 0d 0a 0d 0a 09 - 3);....}.....
4ca0: 09 43 53 74 72 69 6e 67 20 6d 61 69 6e 53 71 6c .CString mainSql
4cb0: 51 75 65 72 79 28 6d 5f 73 65 6c 65 63 74 20 2b Query(m_select +
4cc0: 20 6d 5f 66 72 6f 6d 29 2c 20 73 74 72 53 71 6c m_from), strSql
4cd0: 3b 0d 0a 09 09 69 66 28 71 44 6f 77 6e 20 3d 3d ;....if(qDown ==
4ce0: 20 74 79 70 65 20 7c 7c 20 71 55 70 20 3d 3d 20 type || qUp ==
4cf0: 74 79 70 65 29 0d 0a 09 09 7b 0d 0a 09 09 09 66 type)....{.....f
4d00: 6f 72 28 44 57 4f 52 44 20 6b 20 3d 20 6b 65 79 or(DWORD k = key
4d10: 46 69 65 6c 64 73 43 6f 75 6e 74 28 29 3b 20 3b FieldsCount(); ;
4d20: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 6b 2d 2d ).....{......k--
4d30: 3b 0d 0a 09 09 09 09 73 74 72 53 71 6c 20 2b 3d ;......strSql +=
4d40: 20 6d 61 69 6e 53 71 6c 51 75 65 72 79 20 2b 20 mainSqlQuery +
4d50: 22 20 77 68 65 72 65 5c 72 5c 6e 22 3b 0d 0a 09 " where\r\n";...
4d60: 09 09 09 69 66 28 21 6d 5f 77 68 65 72 65 2e 49 ...if(!m_where.I
4d70: 73 45 6d 70 74 79 28 29 29 0d 0a 09 09 09 09 09 sEmpty()).......
4d80: 73 74 72 53 71 6c 20 2b 3d 20 6d 5f 77 68 65 72 strSql += m_wher
4d90: 65 20 2b 20 22 5c 72 5c 6e 20 61 6e 64 20 5c 72 e + "\r\n and \r
4da0: 5c 6e 22 3b 0d 0a 09 09 09 09 66 6f 72 28 44 57 \n";......for(DW
4db0: 4f 52 44 20 69 20 3d 20 30 3b 20 69 20 3c 20 6b ORD i = 0; i < k
4dc0: 20 3b 20 69 2b 2b 29 0d 0a 09 09 09 09 09 73 74 ; i++).......st
4dd0: 72 53 71 6c 20 2b 3d 20 66 69 65 6c 64 49 6e 66 rSql += fieldInf
4de0: 6f 28 69 29 2e 65 78 70 72 65 73 73 69 6f 6e 20 o(i).expression
4df0: 2b 20 22 20 3d 20 22 20 2b 20 6b 65 79 53 51 4c + " = " + keySQL
4e00: 50 61 72 61 6d 4e 61 6d 65 28 69 29 20 2b 20 22 ParamName(i) + "
4e10: 20 61 6e 64 5c 72 5c 6e 22 3b 0d 0a 09 09 09 09 and\r\n";......
4e20: 0d 0a 09 09 09 09 73 74 72 53 71 6c 20 2b 3d 20 ......strSql +=
4e30: 66 69 65 6c 64 49 6e 66 6f 28 6b 29 2e 65 78 70 fieldInfo(k).exp
4e40: 72 65 73 73 69 6f 6e 20 20 2b 20 28 71 44 6f 77 ression + (qDow
4e50: 6e 20 3d 3d 20 74 79 70 65 20 3f 20 22 20 3e 20 n == type ? " >
4e60: 22 20 3a 20 22 20 3c 20 22 29 20 2b 20 6b 65 79 " : " < ") + key
4e70: 53 51 4c 50 61 72 61 6d 4e 61 6d 65 28 6b 29 3b SQLParamName(k);
4e80: 0d 0a 09 09 09 09 69 66 28 6b 29 0d 0a 09 09 09 ......if(k).....
4e90: 09 09 73 74 72 53 71 6c 20 2b 3d 20 22 5c 72 5c ..strSql += "\r\
4ea0: 6e 20 75 6e 69 6f 6e 20 61 6c 6c 20 5c 72 5c 6e n union all \r\n
4eb0: 22 3b 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 ";......else....
4ec0: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 7d 0d ...break;.....}.
4ed0: 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 ...}....else....
4ee0: 7b 0d 0a 09 09 09 73 74 72 53 71 6c 20 3d 20 6d {.....strSql = m
4ef0: 61 69 6e 53 71 6c 51 75 65 72 79 3b 0d 0a 09 09 ainSqlQuery;....
4f00: 09 69 66 28 71 49 44 20 3d 3d 20 74 79 70 65 29 .if(qID == type)
4f10: 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 73 74 72 53 .....{......strS
4f20: 71 6c 20 2b 3d 20 22 20 77 68 65 72 65 5c 72 5c ql += " where\r\
4f30: 6e 22 3b 0d 0a 09 09 09 09 69 66 28 21 6d 5f 77 n";......if(!m_w
4f40: 68 65 72 65 2e 49 73 45 6d 70 74 79 28 29 29 0d here.IsEmpty()).
4f50: 0a 09 09 09 09 09 73 74 72 53 71 6c 20 2b 3d 20 ......strSql +=
4f60: 6d 5f 77 68 65 72 65 20 2b 20 22 5c 72 5c 6e 20 m_where + "\r\n
4f70: 61 6e 64 20 5c 72 5c 6e 22 3b 0d 0a 09 09 09 09 and \r\n";......
4f80: 73 74 72 53 71 6c 20 2b 3d 20 66 69 65 6c 64 49 strSql += fieldI
4f90: 6e 66 6f 28 69 64 46 69 65 6c 64 50 6f 73 28 29 nfo(idFieldPos()
4fa0: 29 2e 65 78 70 72 65 73 73 69 6f 6e 20 2b 20 22 ).expression + "
4fb0: 20 3d 20 22 20 2b 20 69 64 50 61 72 61 6d 4e 61 = " + idParamNa
4fc0: 6d 65 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c me;.....}.....el
4fd0: 73 65 20 69 66 28 71 43 75 72 52 6f 77 20 3d 3d se if(qCurRow ==
4fe0: 20 74 79 70 65 29 0d 0a 09 09 09 7b 0d 0a 09 09 type).....{....
4ff0: 09 09 73 74 72 53 71 6c 20 2b 3d 20 22 20 77 68 ..strSql += " wh
5000: 65 72 65 5c 72 5c 6e 22 3b 0d 0a 09 09 09 09 69 ere\r\n";......i
5010: 66 28 21 6d 5f 77 68 65 72 65 2e 49 73 45 6d 70 f(!m_where.IsEmp
5020: 74 79 28 29 29 0d 0a 09 09 09 09 09 73 74 72 53 ty()).......strS
5030: 71 6c 20 2b 3d 20 6d 5f 77 68 65 72 65 20 2b 20 ql += m_where +
5040: 22 5c 72 5c 6e 20 61 6e 64 20 5c 72 5c 6e 22 3b "\r\n and \r\n";
5050: 0d 0a 09 09 09 09 66 6f 72 28 44 57 4f 52 44 20 ......for(DWORD
5060: 69 64 78 20 3d 20 30 2c 20 6d 69 64 78 20 3d 20 idx = 0, midx =
5070: 6b 65 79 46 69 65 6c 64 73 43 6f 75 6e 74 28 29 keyFieldsCount()
5080: 20 2d 31 20 3b 20 69 64 78 20 3c 20 6d 69 64 78 -1 ; idx < midx
5090: 20 3b 20 69 64 78 2b 2b 29 0d 0a 09 09 09 09 09 ; idx++).......
50a0: 73 74 72 53 71 6c 20 2b 3d 20 66 69 65 6c 64 49 strSql += fieldI
50b0: 6e 66 6f 28 69 64 78 29 2e 65 78 70 72 65 73 73 nfo(idx).express
50c0: 69 6f 6e 20 2b 20 22 20 3d 20 22 20 2b 20 6b 65 ion + " = " + ke
50d0: 79 53 51 4c 50 61 72 61 6d 4e 61 6d 65 28 69 64 ySQLParamName(id
50e0: 78 29 20 2b 20 22 20 61 6e 64 5c 72 5c 6e 22 3b x) + " and\r\n";
50f0: 0d 0a 09 09 09 09 73 74 72 53 71 6c 20 2b 3d 20 ......strSql +=
5100: 66 69 65 6c 64 49 6e 66 6f 28 69 64 78 29 2e 65 fieldInfo(idx).e
5110: 78 70 72 65 73 73 69 6f 6e 20 2b 20 22 20 3d 20 xpression + " =
5120: 22 20 2b 20 6b 65 79 53 51 4c 50 61 72 61 6d 4e " + keySQLParamN
5130: 61 6d 65 28 69 64 78 29 3b 0d 0a 09 09 09 7d 0d ame(idx);.....}.
5140: 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a ....else.....{..
5150: 09 09 09 09 69 66 28 21 6d 5f 77 68 65 72 65 2e ....if(!m_where.
5160: 49 73 45 6d 70 74 79 28 29 29 0d 0a 09 09 09 09 IsEmpty())......
5170: 09 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c .strSql = strSql
5180: 20 2b 20 22 20 77 68 65 72 65 5c 72 5c 6e 22 20 + " where\r\n"
5190: 2b 20 6d 5f 77 68 65 72 65 3b 0d 0a 09 09 09 7d + m_where;.....}
51a0: 0d 0a 09 09 7d 0d 0a 09 09 69 66 28 71 49 44 20 ....}....if(qID
51b0: 21 3d 20 74 79 70 65 20 26 26 20 71 43 75 72 52 != type && qCurR
51c0: 6f 77 20 21 3d 20 74 79 70 65 29 0d 0a 09 09 7b ow != type)....{
51d0: 0d 0a 09 09 09 73 74 72 53 71 6c 20 2b 3d 20 22 .....strSql += "
51e0: 5c 72 5c 6e 20 6f 72 64 65 72 20 62 79 20 5c 72 \r\n order by \r
51f0: 5c 6e 22 3b 0d 0a 09 09 09 43 53 74 72 69 6e 67 \n";.....CString
5200: 20 64 69 72 65 63 74 69 6f 6e 28 71 55 70 20 3d direction(qUp =
5210: 3d 20 74 79 70 65 20 7c 7c 20 71 42 6f 74 74 6f = type || qBotto
5220: 6d 20 3d 3d 20 74 79 70 65 20 3f 20 22 20 64 65 m == type ? " de
5230: 73 63 22 20 3a 20 22 20 61 73 63 22 29 3b 0d 0a sc" : " asc");..
5240: 09 09 09 66 6f 72 28 44 57 4f 52 44 20 69 64 78 ...for(DWORD idx
5250: 20 3d 20 30 2c 20 6d 69 64 78 20 3d 20 6b 65 79 = 0, midx = key
5260: 46 69 65 6c 64 73 43 6f 75 6e 74 28 29 3b 20 69 FieldsCount(); i
5270: 64 78 20 3c 20 6d 69 64 78 20 3b 20 69 64 78 2b dx < midx ; idx+
5280: 2b 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 73 74 +).....{......st
5290: 72 53 71 6c 20 2b 3d 20 66 69 65 6c 64 49 6e 66 rSql += fieldInf
52a0: 6f 28 69 64 78 29 2e 65 78 70 72 65 73 73 69 6f o(idx).expressio
52b0: 6e 20 2b 20 64 69 72 65 63 74 69 6f 6e 3b 0d 0a n + direction;..
52c0: 09 09 09 09 69 66 28 69 64 78 20 3c 20 6d 69 64 ....if(idx < mid
52d0: 78 20 2d 20 31 29 0d 0a 09 09 09 09 09 73 74 72 x - 1).......str
52e0: 53 71 6c 20 2b 3d 20 22 2c 5c 72 5c 6e 22 3b 0d Sql += ",\r\n";.
52f0: 0a 09 09 09 7d 0d 0a 09 09 09 73 74 72 53 71 6c ....}.....strSql
5300: 20 3d 20 73 74 72 53 71 6c 20 2b 20 22 5c 72 5c = strSql + "\r\
5310: 6e 20 6c 69 6d 69 74 20 22 20 2b 20 72 6f 77 43 n limit " + rowC
5320: 6f 75 6e 74 50 61 72 61 6d 4e 61 6d 65 3b 0d 0a ountParamName;..
5330: 09 09 7d 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 09 ..}....else.....
5340: 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 20 strSql = strSql
5350: 2b 20 22 5c 72 5c 6e 20 6c 69 6d 69 74 20 31 22 + "\r\n limit 1"
5360: 3b 0d 0a 09 09 71 75 65 72 79 2d 3e 70 72 65 70 ;....query->prep
5370: 61 72 65 28 73 74 72 53 71 6c 29 3b 0d 0a 09 09 are(strSql);....
5380: 70 51 75 65 72 79 20 3d 20 6d 5f 71 75 65 72 69 pQuery = m_queri
5390: 65 73 5b 74 79 70 65 5d 20 3d 20 71 75 65 72 79 es[type] = query
53a0: 2e 72 65 6c 65 61 73 65 28 29 3b 0d 0a 09 7d 0d .release();...}.
53b0: 0a 09 6d 5f 73 71 6c 50 61 72 61 6d 73 2e 61 70 ..m_sqlParams.ap
53c0: 70 6c 79 50 61 72 61 6d 73 54 6f 51 75 65 72 79 plyParamsToQuery
53d0: 28 70 51 75 65 72 79 2c 20 74 79 70 65 29 3b 0d (pQuery, type);.
53e0: 0a 09 72 65 74 75 72 6e 20 70 51 75 65 72 79 3b ..return pQuery;
53f0: 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c 69 ..}....void SQLi
5400: 74 65 44 61 74 61 50 72 6f 76 69 64 65 72 3a 3a teDataProvider::
5410: 62 69 6e 64 4b 65 79 56 61 6c 75 65 73 28 53 51 bindKeyValues(SQ
5420: 4c 69 74 65 51 75 65 72 79 2a 20 70 51 75 65 72 LiteQuery* pQuer
5430: 79 2c 20 53 51 4c 69 74 65 44 61 74 61 52 6f 77 y, SQLiteDataRow
5440: 2a 20 70 52 6f 77 29 0d 0a 7b 0d 0a 09 69 66 28 * pRow)..{...if(
5450: 21 70 52 6f 77 29 0d 0a 09 09 72 65 74 75 72 6e !pRow)....return
5460: 3b 0d 0a 09 66 6f 72 28 44 57 4f 52 44 20 69 64 ;...for(DWORD id
5470: 78 20 3d 20 30 2c 20 6d 69 64 78 20 3d 20 6b 65 x = 0, midx = ke
5480: 79 46 69 65 6c 64 73 43 6f 75 6e 74 28 29 3b 20 yFieldsCount();
5490: 69 64 78 20 3c 20 6d 69 64 78 20 3b 20 69 64 78 idx < midx ; idx
54a0: 2b 2b 29 0d 0a 09 7b 0d 0a 09 09 70 51 75 65 72 ++)...{....pQuer
54b0: 79 2d 3e 73 65 74 53 71 6c 50 61 72 61 6d 28 43 y->setSqlParam(C
54c0: 56 61 6c 75 65 28 6b 65 79 53 51 4c 50 61 72 61 Value(keySQLPara
54d0: 6d 4e 61 6d 65 28 69 64 78 29 29 2c 0d 0a 09 09 mName(idx)),....
54e0: 09 70 52 6f 77 2d 3e 6d 5f 70 56 61 6c 75 65 73 .pRow->m_pValues
54f0: 5b 69 64 78 5d 2c 20 6d 6f 64 69 66 69 63 61 74 [idx], modificat
5500: 6f 72 42 79 54 79 70 65 28 66 69 65 6c 64 49 6e orByType(fieldIn
5510: 66 6f 28 69 64 78 29 2e 74 79 70 65 29 29 3b 0d fo(idx).type));.
5520: 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 ..}..}....void S
5530: 51 4c 69 74 65 44 61 74 61 50 72 6f 76 69 64 65 QLiteDataProvide
5540: 72 3a 3a 51 75 65 72 79 46 69 65 6c 64 28 4c 50 r::QueryField(LP
5550: 43 53 54 52 20 73 7a 46 69 65 6c 64 4e 61 6d 65 CSTR szFieldName
5560: 29 0d 0a 7b 0d 0a 09 66 69 65 6c 64 5f 69 6e 66 )..{...field_inf
5570: 6f 2a 20 70 46 49 3b 0d 0a 09 69 66 28 6d 5f 66 o* pFI;...if(m_f
5580: 69 65 6c 64 42 79 4e 61 6d 65 2e 4c 6f 6f 6b 75 ieldByName.Looku
5590: 70 28 73 7a 46 69 65 6c 64 4e 61 6d 65 2c 20 70 p(szFieldName, p
55a0: 46 49 29 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 30 FI))...{....if(0
55b0: 20 3d 3d 20 28 70 46 49 2d 3e 66 6c 61 67 73 20 == (pFI->flags
55c0: 26 20 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 69 6e & field_info::in
55d0: 55 73 65 29 29 0d 0a 09 09 7b 0d 0a 09 09 09 70 Use))....{.....p
55e0: 46 49 2d 3e 66 6c 61 67 73 20 7c 3d 20 66 69 65 FI->flags |= fie
55f0: 6c 64 5f 69 6e 66 6f 3a 3a 69 6e 55 73 65 3b 0d ld_info::inUse;.
5600: 0a 09 09 09 73 65 74 43 6f 6c 75 6d 6e 73 43 68 ....setColumnsCh
5610: 61 6e 67 65 64 28 29 3b 0d 0a 09 09 7d 0d 0a 09 anged();....}...
5620: 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c }..}....void SQL
5630: 69 74 65 44 61 74 61 50 72 6f 76 69 64 65 72 3a iteDataProvider:
5640: 3a 52 65 6c 65 61 73 65 46 69 65 6c 64 28 4c 50 :ReleaseField(LP
5650: 43 53 54 52 20 73 7a 46 69 65 6c 64 4e 61 6d 65 CSTR szFieldName
5660: 29 0d 0a 7b 0d 0a 09 66 69 65 6c 64 5f 69 6e 66 )..{...field_inf
5670: 6f 2a 20 70 46 49 3b 0d 0a 09 69 66 28 6d 5f 66 o* pFI;...if(m_f
5680: 69 65 6c 64 42 79 4e 61 6d 65 2e 4c 6f 6f 6b 75 ieldByName.Looku
5690: 70 28 73 7a 46 69 65 6c 64 4e 61 6d 65 2c 20 70 p(szFieldName, p
56a0: 46 49 29 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 30 FI))...{....if(0
56b0: 20 21 3d 20 28 70 46 49 2d 3e 66 6c 61 67 73 20 != (pFI->flags
56c0: 26 20 28 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 6b & (field_info::k
56d0: 65 79 46 69 65 6c 64 20 7c 20 66 69 65 6c 64 5f eyField | field_
56e0: 69 6e 66 6f 3a 3a 69 64 46 69 65 6c 64 20 7c 20 info::idField |
56f0: 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 4e 6f 41 75 field_info::NoAu
5700: 74 6f 44 65 6c 65 74 65 29 29 29 0d 0a 09 09 09 toDelete))).....
5710: 72 65 74 75 72 6e 3b 0d 0a 09 09 69 66 28 30 20 return;....if(0
5720: 21 3d 20 28 70 46 49 2d 3e 66 6c 61 67 73 20 26 != (pFI->flags &
5730: 20 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 69 6e 55 field_info::inU
5740: 73 65 29 29 0d 0a 09 09 7b 0d 0a 09 09 09 70 46 se))....{.....pF
5750: 49 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 66 69 65 I->flags &= ~fie
5760: 6c 64 5f 69 6e 66 6f 3a 3a 69 6e 55 73 65 3b 0d ld_info::inUse;.
5770: 0a 09 09 09 73 65 74 43 6f 6c 75 6d 6e 73 43 68 ....setColumnsCh
5780: 61 6e 67 65 64 28 29 3b 0d 0a 09 09 7d 0d 0a 09 anged();....}...
5790: 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64 20 53 51 4c }..}....void SQL
57a0: 69 74 65 44 61 74 61 50 72 6f 76 69 64 65 72 3a iteDataProvider:
57b0: 3a 73 65 74 46 6c 61 67 4f 6e 46 69 65 6c 64 73 :setFlagOnFields
57c0: 28 63 6f 6e 73 74 20 43 53 74 72 69 6e 67 26 20 (const CString&
57d0: 73 74 72 46 69 65 6c 64 73 2c 20 69 6e 74 20 66 strFields, int f
57e0: 6c 61 67 29 0d 0a 7b 0d 0a 09 43 53 74 72 69 6e lag)..{...CStrin
57f0: 67 20 6e 6f 74 46 6f 75 6e 64 3b 0d 0a 09 43 53 g notFound;...CS
5800: 74 72 69 6e 67 41 72 72 61 79 20 66 69 65 6c 64 tringArray field
5810: 73 3b 0d 0a 09 53 70 6c 69 74 53 74 72 32 41 72 s;...SplitStr2Ar
5820: 72 61 79 28 73 74 72 46 69 65 6c 64 73 2c 20 66 ray(strFields, f
5830: 69 65 6c 64 73 2c 20 27 2c 27 29 3b 0d 0a 09 44 ields, ',');...D
5840: 57 4f 52 44 20 64 4e 6f 74 46 6f 75 6e 64 20 3d WORD dNotFound =
5850: 20 30 3b 0d 0a 09 66 6f 72 28 44 57 4f 52 44 20 0;...for(DWORD
5860: 69 64 78 20 3d 20 30 2c 20 6d 69 64 78 20 3d 20 idx = 0, midx =
5870: 66 69 65 6c 64 73 2e 47 65 74 53 69 7a 65 28 29 fields.GetSize()
5880: 3b 20 69 64 78 20 3c 20 6d 69 64 78 3b 20 69 64 ; idx < midx; id
5890: 78 2b 2b 29 0d 0a 09 7b 0d 0a 09 09 43 53 74 72 x++)...{....CStr
58a0: 69 6e 67 20 73 74 72 46 69 65 6c 64 20 3d 20 66 ing strField = f
58b0: 69 65 6c 64 73 5b 69 64 78 5d 3b 0d 0a 09 09 73 ields[idx];....s
58c0: 74 72 46 69 65 6c 64 2e 54 72 69 6d 4c 65 66 74 trField.TrimLeft
58d0: 28 74 72 69 6d 50 61 74 74 65 72 6e 29 3b 0d 0a (trimPattern);..
58e0: 09 09 73 74 72 46 69 65 6c 64 2e 54 72 69 6d 52 ..strField.TrimR
58f0: 69 67 68 74 28 74 72 69 6d 50 61 74 74 65 72 6e ight(trimPattern
5900: 29 3b 0d 0a 09 09 66 69 65 6c 64 5f 69 6e 66 6f );....field_info
5910: 2a 20 70 46 49 3b 0d 0a 09 09 69 66 28 6d 5f 66 * pFI;....if(m_f
5920: 69 65 6c 64 42 79 4e 61 6d 65 2e 4c 6f 6f 6b 75 ieldByName.Looku
5930: 70 28 73 74 72 46 69 65 6c 64 2c 20 70 46 49 29 p(strField, pFI)
5940: 29 0d 0a 09 09 09 70 46 49 2d 3e 66 6c 61 67 73 ).....pFI->flags
5950: 20 7c 3d 20 66 6c 61 67 3b 0d 0a 09 09 65 6c 73 |= flag;....els
5960: 65 0d 0a 09 09 7b 0d 0a 09 09 09 64 4e 6f 74 46 e....{.....dNotF
5970: 6f 75 6e 64 2b 2b 3b 0d 0a 09 09 09 6e 6f 74 46 ound++;.....notF
5980: 6f 75 6e 64 20 2b 3d 20 73 74 72 46 69 65 6c 64 ound += strField
5990: 20 2b 20 27 2c 27 3b 0d 0a 09 09 7d 0d 0a 09 7d + ',';....}...}
59a0: 0d 0a 09 69 66 28 64 4e 6f 74 46 6f 75 6e 64 29 ...if(dNotFound)
59b0: 0d 0a 09 7b 0d 0a 09 09 6e 6f 74 46 6f 75 6e 64 ...{....notFound
59c0: 2e 47 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e .GetBufferSetLen
59d0: 67 74 68 28 6e 6f 74 46 6f 75 6e 64 2e 47 65 74 gth(notFound.Get
59e0: 4c 65 6e 67 74 68 28 29 20 2d 20 31 29 3b 0d 0a Length() - 1);..
59f0: 09 09 43 53 74 72 69 6e 67 20 6d 73 67 3b 0d 0a ..CString msg;..
5a00: 09 09 6d 73 67 2e 46 6f 72 6d 61 74 28 64 4e 6f ..msg.Format(dNo
5a10: 74 46 6f 75 6e 64 20 3d 3d 20 31 20 3f 20 22 cf tFound == 1 ? ".
5a20: ee eb e5 20 25 73 20 ed e5 20 ed e0 e9 e4 e5 ed ... %s .. ......
5a30: ee 22 20 3a 20 22 cf ee eb ff 20 25 73 20 ed e5 ." : ".... %s ..
5a40: 20 ed e0 e9 e4 e5 ed fb 22 2c 20 6e 6f 74 46 6f .......", notFo
5a50: 75 6e 64 29 3b 0d 0a 09 09 43 42 4c 4d 6f 64 75 und);....CBLModu
5a60: 6c 65 3a 3a 52 61 69 73 65 45 78 74 52 75 6e 74 le::RaiseExtRunt
5a70: 69 6d 65 45 72 72 6f 72 28 6d 73 67 2c 20 46 41 imeError(msg, FA
5a80: 4c 53 45 29 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a LSE);...}..}....
5a90: 76 6f 69 64 20 53 51 4c 69 74 65 44 61 74 61 50 void SQLiteDataP
5aa0: 72 6f 76 69 64 65 72 3a 3a 73 65 74 43 6f 6c 75 rovider::setColu
5ab0: 6d 6e 73 43 68 61 6e 67 65 64 28 29 0d 0a 7b 0d mnsChanged()..{.
5ac0: 0a 09 69 66 28 6d 5f 73 65 6c 65 63 74 2e 49 73 ..if(m_select.Is
5ad0: 45 6d 70 74 79 28 29 29 0d 0a 09 09 72 65 74 75 Empty())....retu
5ae0: 72 6e 3b 0d 0a 09 6d 5f 73 65 6c 65 63 74 2e 45 rn;...m_select.E
5af0: 6d 70 74 79 28 29 3b 0d 0a 09 66 6f 72 28 44 57 mpty();...for(DW
5b00: 4f 52 44 20 69 64 78 20 3d 20 30 3b 20 69 64 78 ORD idx = 0; idx
5b10: 20 3c 20 71 4c 61 73 74 3b 20 69 64 78 2b 2b 29 < qLast; idx++)
5b20: 0d 0a 09 7b 0d 0a 09 09 64 65 6c 65 74 65 20 6d ...{....delete m
5b30: 5f 71 75 65 72 69 65 73 5b 69 64 78 5d 3b 0d 0a _queries[idx];..
5b40: 09 09 6d 5f 71 75 65 72 69 65 73 5b 69 64 78 5d ..m_queries[idx]
5b50: 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 7d 0d 0a 09 6d = NULL;...}...m
5b60: 5f 73 71 6c 50 61 72 61 6d 73 2e 64 69 72 74 79 _sqlParams.dirty
5b70: 51 75 65 72 69 65 73 20 3d 20 30 78 46 46 46 46 Queries = 0xFFFF
5b80: 46 46 46 46 3b 0d 0a 09 4f 6e 46 69 65 6c 64 73 FFFF;...OnFields
5b90: 43 68 61 6e 67 65 64 28 29 3b 0d 0a 7d 0d 0a 0d Changed();..}...
5ba0: 0a 42 4f 4f 4c 20 53 51 4c 69 74 65 44 61 74 61 .BOOL SQLiteData
5bb0: 50 72 6f 76 69 64 65 72 3a 3a 47 65 74 51 75 65 Provider::GetQue
5bc0: 72 79 54 65 78 74 28 43 56 61 6c 75 65 26 20 72 ryText(CValue& r
5bd0: 65 74 56 61 6c 2c 20 43 56 61 6c 75 65 2a 2a 20 etVal, CValue**
5be0: 70 70 50 61 72 61 6d 73 29 0d 0a 7b 0d 0a 09 42 ppParams)..{...B
5bf0: 4f 4f 4c 20 62 41 6c 6c 20 3d 20 70 70 50 61 72 OOL bAll = ppPar
5c00: 61 6d 73 5b 30 5d 2d 3e 47 65 74 4e 75 6d 65 72 ams[0]->GetNumer
5c10: 69 63 28 29 20 21 3d 20 30 3b 0d 0a 09 43 53 74 ic() != 0;...CSt
5c20: 72 69 6e 67 20 74 65 78 74 3b 0d 0a 09 69 66 28 ring text;...if(
5c30: 66 69 65 6c 64 73 49 6e 66 6f 43 6f 75 6e 74 28 fieldsInfoCount(
5c40: 29 29 0d 0a 09 7b 0d 0a 09 09 74 65 78 74 20 3d ))...{....text =
5c50: 20 22 73 65 6c 65 63 74 5c 72 5c 6e 22 3b 0d 0a "select\r\n";..
5c60: 09 09 66 6f 72 28 44 57 4f 52 44 20 69 64 78 20 ..for(DWORD idx
5c70: 3d 20 30 3b 20 69 64 78 20 3c 20 66 69 65 6c 64 = 0; idx < field
5c80: 73 49 6e 66 6f 43 6f 75 6e 74 28 29 3b 20 69 64 sInfoCount(); id
5c90: 78 2b 2b 29 0d 0a 09 09 7b 0d 0a 09 09 09 63 6f x++)....{.....co
5ca0: 6e 73 74 20 66 69 65 6c 64 5f 69 6e 66 6f 26 20 nst field_info&
5cb0: 66 69 20 3d 20 66 69 65 6c 64 49 6e 66 6f 28 69 fi = fieldInfo(i
5cc0: 64 78 29 3b 0d 0a 09 09 09 69 66 28 62 41 6c 6c dx);.....if(bAll
5cd0: 20 7c 7c 20 30 20 21 3d 20 28 66 69 2e 66 6c 61 || 0 != (fi.fla
5ce0: 67 73 20 26 20 66 69 65 6c 64 5f 69 6e 66 6f 3a gs & field_info:
5cf0: 3a 69 6e 55 73 65 29 29 0d 0a 09 09 09 09 74 65 :inUse))......te
5d00: 78 74 20 2b 3d 20 66 69 2e 65 78 70 72 65 73 73 xt += fi.express
5d10: 69 6f 6e 20 2b 20 66 69 2e 61 6c 69 61 73 20 2b ion + fi.alias +
5d20: 20 22 2c 5c 72 5c 6e 22 3b 0d 0a 09 09 7d 0d 0a ",\r\n";....}..
5d30: 09 09 74 65 78 74 2e 47 65 74 42 75 66 66 65 72 ..text.GetBuffer
5d40: 53 65 74 4c 65 6e 67 74 68 28 74 65 78 74 2e 47 SetLength(text.G
5d50: 65 74 4c 65 6e 67 74 68 28 29 20 2d 20 33 29 3b etLength() - 3);
5d60: 0d 0a 09 09 74 65 78 74 20 2b 3d 20 6d 5f 66 72 ....text += m_fr
5d70: 6f 6d 3b 0d 0a 09 09 69 66 28 21 6d 5f 77 68 65 om;....if(!m_whe
5d80: 72 65 2e 49 73 45 6d 70 74 79 28 29 29 0d 0a 09 re.IsEmpty())...
5d90: 09 09 74 65 78 74 20 3d 20 74 65 78 74 20 2b 20 ..text = text +
5da0: 22 20 77 68 65 72 65 5c 72 5c 6e 22 20 2b 20 6d " where\r\n" + m
5db0: 5f 77 68 65 72 65 3b 0d 0a 09 7d 0d 0a 09 72 65 _where;...}...re
5dc0: 74 56 61 6c 20 3d 20 74 65 78 74 3b 0d 0a 09 72 tVal = text;...r
5dd0: 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 7d 0d 0a eturn TRUE;..}..
5de0: 0d 0a 76 6f 69 64 20 44 61 74 61 50 72 6f 76 69 ..void DataProvi
5df0: 64 65 72 52 65 73 75 6c 74 4c 6f 61 64 65 72 3a derResultLoader:
5e00: 3a 61 64 64 56 61 6c 75 65 73 28 43 56 61 6c 75 :addValues(CValu
5e10: 65 2a 2a 20 70 70 56 61 6c 75 65 73 29 0d 0a 7b e** ppValues)..{
5e20: 0d 0a 09 53 51 4c 69 74 65 44 61 74 61 52 6f 77 ...SQLiteDataRow
5e30: 2a 20 70 52 6f 77 20 3d 20 6e 65 77 20 53 51 4c * pRow = new SQL
5e40: 69 74 65 44 61 74 61 52 6f 77 28 6d 5f 70 50 72 iteDataRow(m_pPr
5e50: 6f 76 69 64 65 72 29 3b 0d 0a 09 43 56 61 6c 75 ovider);...CValu
5e60: 65 2a 20 70 56 61 6c 44 73 74 20 3d 20 70 52 6f e* pValDst = pRo
5e70: 77 2d 3e 6d 5f 70 56 61 6c 75 65 73 3b 0d 0a 09 w->m_pValues;...
5e80: 66 6f 72 28 44 57 4f 52 44 20 63 20 3d 20 6d 5f for(DWORD c = m_
5e90: 63 6f 75 6e 74 3b 20 63 2d 2d 3b 20 70 56 61 6c count; c--; pVal
5ea0: 44 73 74 2b 2b 2c 20 70 70 56 61 6c 75 65 73 2b Dst++, ppValues+
5eb0: 2b 29 0d 0a 09 7b 0d 0a 09 09 70 56 61 6c 44 73 +)...{....pValDs
5ec0: 74 2d 3e 43 56 61 6c 75 65 3a 3a 43 56 61 6c 75 t->CValue::CValu
5ed0: 65 28 2a 2a 70 70 56 61 6c 75 65 73 29 3b 0d 0a e(**ppValues);..
5ee0: 09 09 70 56 61 6c 44 73 74 2d 3e 6d 5f 6c 65 6e ..pValDst->m_len
5ef0: 67 74 68 20 3d 20 28 2a 70 70 56 61 6c 75 65 73 gth = (*ppValues
5f00: 29 2d 3e 6d 5f 6c 65 6e 67 74 68 3b 0d 0a 09 09 )->m_length;....
5f10: 70 56 61 6c 44 73 74 2d 3e 6d 5f 70 72 65 63 20 pValDst->m_prec
5f20: 3d 20 28 2a 70 70 56 61 6c 75 65 73 29 2d 3e 6d = (*ppValues)->m
5f30: 5f 70 72 65 63 3b 0d 0a 09 7d 0d 0a 09 6d 5f 70 _prec;...}...m_p
5f40: 44 65 73 74 69 6e 61 74 69 6f 6e 2d 3e 41 64 64 Destination->Add
5f50: 28 70 52 6f 77 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f (pRow);..}....vo
5f60: 69 64 20 51 75 69 63 6b 53 65 61 72 63 68 52 65 id QuickSearchRe
5f70: 73 75 6c 74 4c 6f 61 64 65 72 3a 3a 61 64 64 56 sultLoader::addV
5f80: 61 6c 75 65 73 28 43 56 61 6c 75 65 2a 2a 20 70 alues(CValue** p
5f90: 70 56 61 6c 75 65 73 29 0d 0a 7b 0d 0a 09 43 53 pValues)..{...CS
5fa0: 74 72 69 6e 67 20 73 74 72 20 3d 20 70 70 56 61 tring str = ppVa
5fb0: 6c 75 65 73 5b 6d 5f 74 65 73 74 46 69 65 6c 64 lues[m_testField
5fc0: 5d 2d 3e 46 6f 72 6d 61 74 28 29 3b 0d 0a 09 69 ]->Format();...i
5fd0: 66 28 70 70 56 61 6c 75 65 73 5b 6d 5f 74 65 73 f(ppValues[m_tes
5fe0: 74 46 69 65 6c 64 5d 2d 3e 74 79 70 65 20 3d 3d tField]->type ==
5ff0: 20 74 79 70 65 4e 75 6d 62 65 72 29 0d 0a 09 09 typeNumber)....
6000: 73 74 72 2e 54 72 69 6d 4c 65 66 74 28 29 3b 0d str.TrimLeft();.
6010: 0a 09 44 57 4f 52 44 20 6c 65 6e 20 3d 20 30 3b ..DWORD len = 0;
6020: 0d 0a 09 66 6f 72 28 4c 50 43 53 54 52 20 70 31 ...for(LPCSTR p1
6030: 20 3d 20 6d 5f 70 61 74 74 65 72 6e 2c 20 70 32 = m_pattern, p2
6040: 20 3d 20 73 74 72 2c 20 70 53 74 61 72 74 20 3d = str, pStart =
6050: 20 70 31 3b 3b 29 0d 0a 09 7b 0d 0a 09 09 44 57 p1;;)...{....DW
6060: 4f 52 44 20 73 31 20 3d 20 43 4e 6f 43 61 73 65 ORD s1 = CNoCase
6070: 4d 61 70 42 61 73 65 3a 3a 6d 5f 6c 6f 74 61 62 MapBase::m_lotab
6080: 6c 65 5b 6e 63 6d 5f 73 79 6d 62 3a 3a 73 79 6d le[ncm_symb::sym
6090: 62 6f 6c 28 70 31 29 5d 3b 0d 0a 09 09 44 57 4f bol(p1)];....DWO
60a0: 52 44 20 73 32 20 3d 20 43 4e 6f 43 61 73 65 4d RD s2 = CNoCaseM
60b0: 61 70 42 61 73 65 3a 3a 6d 5f 6c 6f 74 61 62 6c apBase::m_lotabl
60c0: 65 5b 6e 63 6d 5f 73 79 6d 62 3a 3a 73 79 6d 62 e[ncm_symb::symb
60d0: 6f 6c 28 70 32 29 5d 3b 0d 0a 09 09 69 66 28 73 ol(p2)];....if(s
60e0: 31 20 21 3d 20 73 32 20 7c 7c 20 21 73 31 29 0d 1 != s2 || !s1).
60f0: 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 70 31 ....break;....p1
6100: 2b 2b 3b 0d 0a 09 09 70 32 2b 2b 3b 0d 0a 09 09 ++;....p2++;....
6110: 6c 65 6e 2b 2b 3b 0d 0a 09 7d 0d 0a 09 69 66 28 len++;...}...if(
6120: 6c 65 6e 20 3e 20 6d 5f 6d 61 78 53 79 6d 62 6f len > m_maxSymbo
6130: 6c 73 29 0d 0a 09 7b 0d 0a 09 09 6d 5f 6d 61 78 ls)...{....m_max
6140: 53 79 6d 62 6f 6c 73 20 3d 20 6c 65 6e 3b 0d 0a Symbols = len;..
6150: 09 09 66 6f 72 28 44 57 4f 52 44 20 69 20 3d 20 ..for(DWORD i =
6160: 30 3b 20 69 20 3c 20 6d 5f 6b 65 79 73 43 6f 75 0; i < m_keysCou
6170: 6e 74 3b 20 69 2b 2b 29 0d 0a 09 09 09 6d 5f 70 nt; i++).....m_p
6180: 42 65 73 74 4b 65 79 5b 69 5d 20 3d 20 2a 70 70 BestKey[i] = *pp
6190: 56 61 6c 75 65 73 5b 69 5d 3b 0d 0a 09 09 69 66 Values[i];....if
61a0: 28 6c 65 6e 20 3d 3d 20 6d 5f 70 61 74 74 65 72 (len == m_patter
61b0: 6e 2e 47 65 74 4c 65 6e 67 74 68 28 29 29 0d 0a n.GetLength())..
61c0: 09 09 09 74 68 72 6f 77 20 31 3b 0d 0a 09 7d 0d ...throw 1;...}.
61d0: 0a 7d 0d 0a .}..