Hex Artifact Content Вы: nobody
Вход

Artifact e925da1faccbaba8421ca6b12ac50cf03c813364:


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                                      .}..