Hex Artifact Content Вы: nobody
Вход

Artifact bbea1a71d46057c0ab565b908ec0a993766d375f:


0000: 2f 2f 20 76 74 61 62 5f 69 6e 66 6f 2e 63 70 70  // vtab_info.cpp
0010: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 53 74 64 41  ..#include "StdA
0020: 66 78 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20  fx.h"..#include 
0030: 22 76 74 61 62 5f 69 6e 66 6f 2e 68 22 0d 0a 23  "vtab_info.h"..#
0040: 69 6e 63 6c 75 64 65 20 22 75 74 65 78 2e 68 22  include "utex.h"
0050: 0d 0a 23 69 6e 63 6c 75 64 65 20 22 72 65 66 65  ..#include "refe
0060: 72 65 6e 63 65 74 61 62 69 6e 66 6f 2e 68 22 0d  rencetabinfo.h".
0070: 0a 23 69 6e 63 6c 75 64 65 20 22 6a 6f 75 72 6e  .#include "journ
0080: 61 6c 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20  al.h"..#include 
0090: 22 64 6f 63 68 65 61 64 65 72 73 2e 68 22 0d 0a  "docheaders.h"..
00a0: 23 69 6e 63 6c 75 64 65 20 22 64 6f 63 74 61 62  #include "doctab
00b0: 6c 65 73 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65  les.h"..#include
00c0: 20 22 72 65 67 69 73 74 65 72 2e 68 22 0d 0a 23   "register.h"..#
00d0: 69 6e 63 6c 75 64 65 20 22 69 6e 64 65 78 5f 73  include "index_s
00e0: 65 6c 65 63 74 6f 72 2e 68 22 0d 0a 23 69 6e 63  elector.h"..#inc
00f0: 6c 75 64 65 20 22 6c 6f 6e 67 73 74 72 72 65 61  lude "longstrrea
0100: 64 65 72 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65  der.h"..#include
0110: 20 22 73 79 73 74 61 62 73 2e 68 22 0d 0a 23 69   "systabs.h"..#i
0120: 6e 63 6c 75 64 65 20 22 63 61 6c 63 6a 6f 75 72  nclude "calcjour
0130: 6e 61 6c 2e 68 22 0d 0a 0d 0a 43 4e 6f 43 61 73  nal.h"....CNoCas
0140: 65 4d 61 70 3c 43 56 74 61 62 49 6e 66 6f 2a 3e  eMap<CVtabInfo*>
0150: 20 43 56 74 61 62 49 6e 66 6f 3a 3a 6d 5f 61 6c   CVtabInfo::m_al
0160: 6c 54 61 62 73 3b 0d 0a 43 53 74 72 69 6e 67 20  lTabs;..CString 
0170: 43 56 74 61 62 49 6e 66 6f 3a 3a 6d 5f 6c 61 73  CVtabInfo::m_las
0180: 74 45 72 72 6f 72 3b 0d 0a 73 74 72 75 63 74 20  tError;..struct 
0190: 74 61 62 5f 64 65 6c 65 74 65 72 7b 20 76 6f 69  tab_deleter{ voi
01a0: 64 20 6f 70 65 72 61 74 6f 72 28 29 28 43 56 74  d operator()(CVt
01b0: 61 62 49 6e 66 6f 2a 20 70 54 61 62 29 7b 64 65  abInfo* pTab){de
01c0: 6c 65 74 65 20 70 54 61 62 3b 7d 7d 3b 0d 0a 0d  lete pTab;}};...
01d0: 0a 44 57 4f 52 44 20 74 61 62 6c 65 5f 72 65 61  .DWORD table_rea
01e0: 64 65 72 3a 3a 61 6c 6c 52 65 61 64 65 72 43 6f  der::allReaderCo
01f0: 75 6e 74 20 3d 20 30 3b 0d 0a 42 4f 4f 4c 20 74  unt = 0;..BOOL t
0200: 61 62 6c 65 5f 72 65 61 64 65 72 3a 3a 62 57 65  able_reader::bWe
0210: 4f 70 65 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20  OpenTransaction 
0220: 3d 20 46 41 4c 53 45 3b 0d 0a 42 4f 4f 4c 20 74  = FALSE;..BOOL t
0230: 61 62 6c 65 5f 72 65 61 64 65 72 3a 3a 62 4e 65  able_reader::bNe
0240: 65 64 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  edTransaction = 
0250: 46 41 4c 53 45 3b 0d 0a 0d 0a 76 6f 69 64 20 43  FALSE;....void C
0260: 56 74 61 62 49 6e 66 6f 3a 3a 64 6f 6e 65 57 6f  VtabInfo::doneWo
0270: 72 6b 28 29 0d 0a 7b 0d 0a 09 6d 5f 61 6c 6c 54  rk()..{...m_allT
0280: 61 62 73 2e 46 6f 72 45 61 63 68 56 61 6c 75 65  abs.ForEachValue
0290: 28 74 61 62 5f 64 65 6c 65 74 65 72 28 29 29 3b  (tab_deleter());
02a0: 0d 0a 7d 0d 0a 0d 0a 4e 4f 54 48 52 4f 57 20 73  ..}....NOTHROW s
02b0: 74 61 74 69 63 20 76 6f 69 64 20 54 72 61 63 65  tatic void Trace
02c0: 43 6f 6e 73 74 72 61 69 6e 74 73 28 73 71 6c 69  Constraints(sqli
02d0: 74 65 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 2a 20  te3_index_info* 
02e0: 70 49 6e 66 6f 2c 20 63 6f 6e 73 74 20 43 56 74  pInfo, const CVt
02f0: 61 62 49 6e 66 6f 2a 20 70 56 54 61 62 29 0d 0a  abInfo* pVTab)..
0300: 7b 0d 0a 09 69 66 28 21 62 44 6f 54 72 61 63 65  {...if(!bDoTrace
0310: 29 0d 0a 09 09 72 65 74 75 72 6e 3b 0d 0a 09 43  )....return;...C
0320: 53 74 72 69 6e 67 20 74 65 78 74 3b 0d 0a 09 74  String text;...t
0330: 65 78 74 2e 46 6f 72 6d 61 74 28 22 cf ee e4 e1  ext.Format("....
0340: ee f0 20 e8 ed e4 e5 ea f1 e0 20 e4 eb ff 20 f2  .. ....... ... .
0350: e0 e1 eb e8 f6 fb 20 25 73 3a 5c 72 5c 6e 5c 74  ...... %s:\r\n\t
0360: ce e3 f0 e0 ed e8 f7 e5 ed e8 ff 3a 20 22 2c 20  ...........: ", 
0370: 28 4c 50 43 53 54 52 29 70 56 54 61 62 2d 3e 74  (LPCSTR)pVTab->t
0380: 61 62 6c 65 4e 61 6d 65 28 29 29 3b 0d 0a 09 43  ableName());...C
0390: 54 61 62 6c 65 45 78 2a 20 70 54 61 62 6c 65 20  TableEx* pTable 
03a0: 3d 20 70 56 54 61 62 2d 3e 74 61 62 6c 65 28 29  = pVTab->table()
03b0: 3b 0d 0a 0d 0a 09 73 71 6c 69 74 65 33 5f 69 6e  ;.....sqlite3_in
03c0: 64 65 78 5f 69 6e 66 6f 3a 3a 73 71 6c 69 74 65  dex_info::sqlite
03d0: 33 5f 69 6e 64 65 78 5f 63 6f 6e 73 74 72 61 69  3_index_constrai
03e0: 6e 74 2a 20 70 43 20 3d 20 70 49 6e 66 6f 2d 3e  nt* pC = pInfo->
03f0: 61 43 6f 6e 73 74 72 61 69 6e 74 3b 0d 0a 09 66  aConstraint;...f
0400: 6f 72 28 69 6e 74 20 69 20 3d 20 30 2c 20 63 20  or(int i = 0, c 
0410: 3d 20 70 49 6e 66 6f 2d 3e 6e 43 6f 6e 73 74 72  = pInfo->nConstr
0420: 61 69 6e 74 20 3b 20 69 20 3c 20 63 20 3b 20 69  aint ; i < c ; i
0430: 2b 2b 2c 20 70 43 2b 2b 29 0d 0a 09 7b 0d 0a 09  ++, pC++)...{...
0440: 09 69 66 28 21 70 43 2d 3e 75 73 61 62 6c 65 29  .if(!pC->usable)
0450: 0d 0a 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0d 0a  .....continue;..
0460: 09 09 74 65 78 74 20 2b 3d 20 70 56 54 61 62 2d  ..text += pVTab-
0470: 3e 66 69 65 6c 64 28 70 43 2d 3e 69 43 6f 6c 75  >field(pC->iColu
0480: 6d 6e 29 2e 6e 61 6d 65 28 29 3b 0d 0a 09 09 0d  mn).name();.....
0490: 0a 09 09 73 77 69 74 63 68 28 70 43 2d 3e 6f 70  ...switch(pC->op
04a0: 29 0d 0a 09 09 7b 0d 0a 09 09 63 61 73 65 20 53  )....{....case S
04b0: 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53  QLITE_INDEX_CONS
04c0: 54 52 41 49 4e 54 5f 45 51 3a 0d 0a 09 09 09 74  TRAINT_EQ:.....t
04d0: 65 78 74 20 2b 3d 20 27 3d 27 3b 0d 0a 09 09 09  ext += '=';.....
04e0: 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 53  break;....case S
04f0: 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53  QLITE_INDEX_CONS
0500: 54 52 41 49 4e 54 5f 47 54 3a 0d 0a 09 09 09 74  TRAINT_GT:.....t
0510: 65 78 74 20 2b 3d 20 27 3e 27 3b 0d 0a 09 09 09  ext += '>';.....
0520: 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 53  break;....case S
0530: 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e 53  QLITE_INDEX_CONS
0540: 54 52 41 49 4e 54 5f 4c 45 3a 0d 0a 09 09 09 74  TRAINT_LE:.....t
0550: 65 78 74 20 2b 3d 20 22 3c 3d 22 3b 0d 0a 09 09  ext += "<=";....
0560: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20  .break;....case 
0570: 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e  SQLITE_INDEX_CON
0580: 53 54 52 41 49 4e 54 5f 4c 54 3a 0d 0a 09 09 09  STRAINT_LT:.....
0590: 74 65 78 74 20 2b 3d 20 27 3c 27 3b 0d 0a 09 09  text += '<';....
05a0: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20  .break;....case 
05b0: 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f 4e  SQLITE_INDEX_CON
05c0: 53 54 52 41 49 4e 54 5f 47 45 3a 0d 0a 09 09 09  STRAINT_GE:.....
05d0: 74 65 78 74 20 2b 3d 20 22 3e 3d 22 3b 0d 0a 09  text += ">=";...
05e0: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65  ..break;....case
05f0: 20 53 51 4c 49 54 45 5f 49 4e 44 45 58 5f 43 4f   SQLITE_INDEX_CO
0600: 4e 53 54 52 41 49 4e 54 5f 4d 41 54 43 48 3a 0d  NSTRAINT_MATCH:.
0610: 0a 09 09 09 74 65 78 74 20 2b 3d 20 22 20 6d 61  ....text += " ma
0620: 74 63 68 22 3b 0d 0a 09 09 09 62 72 65 61 6b 3b  tch";.....break;
0630: 0d 0a 09 09 7d 0d 0a 09 09 74 65 78 74 20 2b 3d  ....}....text +=
0640: 20 22 3b 20 22 3b 0d 0a 09 7d 0d 0a 09 69 66 28   "; ";...}...if(
0650: 70 49 6e 66 6f 2d 3e 6e 4f 72 64 65 72 42 79 29  pInfo->nOrderBy)
0660: 0d 0a 09 7b 0d 0a 09 09 74 65 78 74 20 2b 3d 20  ...{....text += 
0670: 22 5c 72 5c 6e 5c 74 d3 ef ee f0 ff e4 ee f7 e8  "\r\n\t.........
0680: f2 fc 3a 20 22 3b 0d 0a 09 09 6f 72 64 65 72 62  ..: ";....orderb
0690: 79 5f 70 74 72 20 70 4f 72 64 65 72 42 79 20 3d  y_ptr pOrderBy =
06a0: 20 70 49 6e 66 6f 2d 3e 61 4f 72 64 65 72 42 79   pInfo->aOrderBy
06b0: 3b 0d 0a 09 09 66 6f 72 28 69 6e 74 20 69 20 3d  ;....for(int i =
06c0: 20 30 3b 20 69 20 3c 20 70 49 6e 66 6f 2d 3e 6e   0; i < pInfo->n
06d0: 4f 72 64 65 72 42 79 3b 20 69 2b 2b 2c 20 70 4f  OrderBy; i++, pO
06e0: 72 64 65 72 42 79 2b 2b 29 0d 0a 09 09 7b 0d 0a  rderBy++)....{..
06f0: 09 09 09 74 65 78 74 20 2b 3d 20 70 56 54 61 62  ...text += pVTab
0700: 2d 3e 66 69 65 6c 64 28 70 4f 72 64 65 72 42 79  ->field(pOrderBy
0710: 2d 3e 69 43 6f 6c 75 6d 6e 29 2e 6e 61 6d 65 28  ->iColumn).name(
0720: 29 3b 0d 0a 09 09 09 0d 0a 09 09 09 69 66 28 70  );..........if(p
0730: 4f 72 64 65 72 42 79 2d 3e 64 65 73 63 29 0d 0a  OrderBy->desc)..
0740: 09 09 09 09 74 65 78 74 20 2b 3d 20 22 20 64 65  ....text += " de
0750: 73 63 22 3b 0d 0a 09 09 09 74 65 78 74 20 2b 3d  sc";.....text +=
0760: 20 22 2c 20 22 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d   ", ";....}...}.
0770: 0a 09 44 6f 4d 73 67 4c 69 6e 65 28 22 25 73 22  ..DoMsgLine("%s"
0780: 2c 20 6d 6d 4e 6f 6e 65 2c 20 74 65 78 74 29 3b  , mmNone, text);
0790: 0d 0a 7d 0d 0a 0d 0a 4e 4f 54 48 52 4f 57 20 73  ..}....NOTHROW s
07a0: 74 61 74 69 63 20 76 6f 69 64 20 54 72 61 63 65  tatic void Trace
07b0: 49 6e 64 65 78 28 73 71 6c 69 74 65 33 5f 69 6e  Index(sqlite3_in
07c0: 64 65 78 5f 69 6e 66 6f 2a 20 70 49 64 78 2c 20  dex_info* pIdx, 
07d0: 42 4f 4f 4c 20 62 46 72 6f 6d 43 61 73 68 2c 20  BOOL bFromCash, 
07e0: 63 6f 6e 73 74 20 43 56 74 61 62 49 6e 66 6f 2a  const CVtabInfo*
07f0: 20 70 56 54 61 62 29 0d 0a 7b 0d 0a 09 69 66 28   pVTab)..{...if(
0800: 21 62 44 6f 54 72 61 63 65 29 0d 0a 09 09 72 65  !bDoTrace)....re
0810: 74 75 72 6e 3b 0d 0a 09 43 53 74 72 69 6e 67 20  turn;...CString 
0820: 74 65 78 74 3b 0d 0a 09 69 66 28 70 49 64 78 2d  text;...if(pIdx-
0830: 3e 69 64 78 4e 75 6d 20 3e 3d 20 30 29 0d 0a 09  >idxNum >= 0)...
0840: 7b 0d 0a 09 09 43 49 6e 64 65 78 45 78 2a 20 70  {....CIndexEx* p
0850: 49 6e 64 65 78 20 3d 20 70 56 54 61 62 2d 3e 74  Index = pVTab->t
0860: 61 62 6c 65 28 29 2d 3e 69 6e 64 65 78 28 70 49  able()->index(pI
0870: 64 78 2d 3e 69 64 78 4e 75 6d 29 3b 0d 0a 09 09  dx->idxNum);....
0880: 74 65 78 74 2e 46 6f 72 6d 61 74 28 22 5c 74 c2  text.Format("\t.
0890: fb e1 f0 e0 ed 20 e8 ed e4 e5 ea f1 20 25 73 3a  ..... ...... %s:
08a0: 20 25 73 22 2c 20 70 49 6e 64 65 78 2d 3e 70 5f   %s", pIndex->p_
08b0: 31 30 2d 3e 73 7a 4e 61 6d 65 2c 20 70 49 6e 64  10->szName, pInd
08c0: 65 78 2d 3e 70 5f 31 30 2d 3e 73 7a 49 64 78 45  ex->p_10->szIdxE
08d0: 78 70 72 29 3b 0d 0a 09 7d 0d 0a 09 65 6c 73 65  xpr);...}...else
08e0: 0d 0a 09 09 74 65 78 74 20 3d 20 22 5c 74 c8 ed  ....text = "\t..
08f0: e4 e5 ea f1 20 ed e5 20 e2 fb e1 f0 e0 ed 2e 22  .... .. ......."
0900: 3b 0d 0a 09 44 6f 4d 73 67 4c 69 6e 65 28 62 46  ;...DoMsgLine(bF
0910: 72 6f 6d 43 61 73 68 20 3f 20 22 5c 74 cd e0 e9  romCash ? "\t...
0920: e4 e5 ed ee 20 e2 20 ea fd f8 e5 22 20 3a 20 22  .... . ...." : "
0930: 5c 74 c2 20 ea fd f8 e5 20 ed e5 20 ed e0 e9 e4  \t. .... .. ....
0940: e5 ed ee 22 29 3b 0d 0a 09 44 6f 4d 73 67 4c 69  ...");...DoMsgLi
0950: 6e 65 28 22 25 73 22 2c 20 6d 6d 4e 6f 6e 65 2c  ne("%s", mmNone,
0960: 20 74 65 78 74 29 3b 0d 0a 09 69 66 28 70 49 64   text);...if(pId
0970: 78 2d 3e 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d  x->orderByConsum
0980: 65 64 29 0d 0a 09 09 44 6f 4d 73 67 4c 69 6e 65  ed)....DoMsgLine
0990: 28 22 5c 74 cf ee ef e0 e4 e0 e5 f2 20 e2 20 f1  ("\t........ . .
09a0: ee f0 f2 e8 f0 ee e2 ea f3 22 29 3b 0d 0a 09 44  .........");...D
09b0: 6f 4d 73 67 4c 69 6e 65 28 22 5c 74 d1 f2 ee e8  oMsgLine("\t....
09c0: ec ee f1 f2 fc 3a 20 25 69 22 2c 20 6d 6d 4e 6f  .....: %i", mmNo
09d0: 6e 65 2c 20 28 69 6e 74 29 70 49 64 78 2d 3e 65  ne, (int)pIdx->e
09e0: 73 74 69 6d 61 74 65 64 43 6f 73 74 29 3b 0d 0a  stimatedCost);..
09f0: 7d 0d 0a 0d 0a 0d 0a 69 6e 74 20 43 56 74 61 62  }......int CVtab
0a00: 49 6e 66 6f 3a 3a 62 65 73 74 49 6e 64 65 78 28  Info::bestIndex(
0a10: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e  sqlite3_index_in
0a20: 66 6f 2a 20 70 49 64 78 29 20 63 6f 6e 73 74 0d  fo* pIdx) const.
0a30: 0a 7b 0d 0a 09 2f 2f 62 44 6f 54 72 61 63 65 20  .{...//bDoTrace 
0a40: 3d 20 54 52 55 45 3b 0d 0a 09 54 72 61 63 65 43  = TRUE;...TraceC
0a50: 6f 6e 73 74 72 61 69 6e 74 73 28 70 49 64 78 2c  onstraints(pIdx,
0a60: 20 74 68 69 73 29 3b 0d 0a 0d 0a 0d 0a 09 42 4f   this);.......BO
0a70: 4f 4c 20 66 72 6f 6d 43 61 73 68 20 3d 20 54 52  OL fromCash = TR
0a80: 55 45 3b 0d 0a 09 0d 0a 09 43 53 74 72 69 6e 67  UE;......CString
0a90: 20 63 61 73 68 4b 65 79 3b 0d 0a 09 69 66 28 21   cashKey;...if(!
0aa0: 73 74 72 61 74 43 61 73 68 2e 67 65 74 46 72 6f  stratCash.getFro
0ab0: 6d 43 61 73 68 28 70 49 64 78 2c 20 63 61 73 68  mCash(pIdx, cash
0ac0: 4b 65 79 29 29 0d 0a 09 7b 0d 0a 09 09 69 6e 64  Key))...{....ind
0ad0: 65 78 5f 73 65 6c 65 63 74 6f 72 20 69 64 78 5f  ex_selector idx_
0ae0: 75 73 61 67 65 3b 0d 0a 09 09 63 6f 6e 73 74 20  usage;....const 
0af0: 69 64 78 5f 6e 6f 64 65 2a 20 70 42 65 73 74 20  idx_node* pBest 
0b00: 3d 20 69 64 78 5f 75 73 61 67 65 2e 62 65 73 74  = idx_usage.best
0b10: 49 6e 64 65 78 28 70 49 64 78 2c 20 2a 74 68 69  Index(pIdx, *thi
0b20: 73 29 3b 0d 0a 09 09 46 69 6c 74 65 72 4d 61 63  s);....FilterMac
0b30: 68 69 6e 65 3a 3a 62 75 69 6c 64 28 2a 74 68 69  hine::build(*thi
0b40: 73 2c 20 70 49 64 78 2c 20 70 42 65 73 74 29 3b  s, pIdx, pBest);
0b50: 0d 0a 09 09 69 66 28 70 42 65 73 74 29 0d 0a 09  ....if(pBest)...
0b60: 09 7b 0d 0a 09 09 09 69 66 28 70 42 65 73 74 2d  .{.....if(pBest-
0b70: 3e 69 6e 64 65 78 4e 75 6d 20 3d 3d 20 2d 31 29  >indexNum == -1)
0b80: 09 2f 2f 20 72 65 63 4e 6f 0d 0a 09 09 09 09 70  .// recNo......p
0b90: 49 64 78 2d 3e 65 73 74 69 6d 61 74 65 64 43 6f  Idx->estimatedCo
0ba0: 73 74 20 3d 20 31 3b 0d 0a 09 09 09 65 6c 73 65  st = 1;.....else
0bb0: 0d 0a 09 09 09 09 70 49 64 78 2d 3e 65 73 74 69  ......pIdx->esti
0bc0: 6d 61 74 65 64 43 6f 73 74 20 3d 20 64 6f 75 62  matedCost = doub
0bd0: 6c 65 28 6c 6f 67 52 6f 77 43 6f 75 6e 74 20 2a  le(logRowCount *
0be0: 20 70 42 65 73 74 2d 3e 66 75 6c 6c 4c 65 6e 49   pBest->fullLenI
0bf0: 6e 49 64 78 29 20 2f 20 28 70 42 65 73 74 2d 3e  nIdx) / (pBest->
0c00: 75 73 65 64 4c 65 6e 4f 66 49 6e 64 65 78 20 2b  usedLenOfIndex +
0c10: 20 70 42 65 73 74 2d 3e 6f 72 64 65 72 42 79 4c   pBest->orderByL
0c20: 65 6e 29 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73  en);....}....els
0c30: 65 0d 0a 09 09 09 70 49 64 78 2d 3e 65 73 74 69  e.....pIdx->esti
0c40: 6d 61 74 65 64 43 6f 73 74 20 3d 20 31 30 30 30  matedCost = 1000
0c50: 30 20 2d 20 6c 6f 67 52 6f 77 43 6f 75 6e 74 3b  0 - logRowCount;
0c60: 0d 0a 09 09 73 74 72 61 74 43 61 73 68 2e 61 64  ....stratCash.ad
0c70: 64 54 6f 43 61 73 68 28 63 61 73 68 4b 65 79 2c  dToCash(cashKey,
0c80: 20 70 49 64 78 29 3b 0d 0a 09 09 66 72 6f 6d 43   pIdx);....fromC
0c90: 61 73 68 20 3d 20 46 41 4c 53 45 3b 0d 0a 09 7d  ash = FALSE;...}
0ca0: 0d 0a 09 0d 0a 09 54 72 61 63 65 49 6e 64 65 78  ......TraceIndex
0cb0: 28 70 49 64 78 2c 20 66 72 6f 6d 43 61 73 68 2c  (pIdx, fromCash,
0cc0: 20 74 68 69 73 29 3b 0d 0a 09 0d 0a 09 72 65 74   this);......ret
0cd0: 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0d 0a  urn SQLITE_OK;..
0ce0: 7d 0d 0a 0d 0a 0d 0a 76 6f 69 64 20 43 56 74 61  }......void CVta
0cf0: 62 49 6e 66 6f 3a 3a 66 69 6c 6c 4e 61 6d 65 73  bInfo::fillNames
0d00: 46 72 6f 6d 4f 62 6a 73 28 43 4d 65 74 61 44 61  FromObjs(CMetaDa
0d10: 74 61 4f 62 6a 41 72 72 61 79 2a 20 61 72 72 2c  taObjArray* arr,
0d20: 20 43 4e 6f 43 61 73 65 4d 61 70 3c 43 53 74 72   CNoCaseMap<CStr
0d30: 69 6e 67 3e 26 20 61 6c 69 61 63 65 73 2c 20 43  ing>& aliaces, C
0d40: 44 57 6f 72 64 41 72 72 61 79 2a 20 6c 6f 6e 67  DWordArray* long
0d50: 53 74 72 29 0d 0a 7b 0d 0a 09 66 6f 72 28 69 6e  Str)..{...for(in
0d60: 74 20 69 20 3d 20 30 2c 20 63 20 3d 20 61 72 72  t i = 0, c = arr
0d70: 2d 3e 47 65 74 4e 49 74 65 6d 73 28 29 3b 20 69  ->GetNItems(); i
0d80: 3c 63 20 3b 20 69 2b 2b 29 0d 0a 09 7b 0d 0a 09  <c ; i++)...{...
0d90: 09 43 4d 65 74 61 44 61 74 61 4f 62 6a 2a 20 70  .CMetaDataObj* p
0da0: 4f 62 6a 20 3d 20 61 72 72 2d 3e 47 65 74 41 74  Obj = arr->GetAt
0db0: 28 69 29 3b 0d 0a 09 09 69 66 28 70 4f 62 6a 2d  (i);....if(pObj-
0dc0: 3e 49 73 54 79 70 65 64 4f 62 6a 28 29 29 0d 0a  >IsTypedObj())..
0dd0: 09 09 7b 0d 0a 09 09 09 69 66 28 6c 6f 6e 67 53  ..{.....if(longS
0de0: 74 72 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 63  tr).....{......c
0df0: 6f 6e 73 74 20 43 54 79 70 65 26 20 74 20 3d 20  onst CType& t = 
0e00: 28 28 43 4d 65 74 61 44 61 74 61 54 79 70 65 64  ((CMetaDataTyped
0e10: 4f 62 6a 2a 29 70 4f 62 6a 29 2d 3e 47 65 74 54  Obj*)pObj)->GetT
0e20: 79 70 65 28 29 3b 0d 0a 09 09 09 09 69 66 28 74  ype();......if(t
0e30: 2e 74 79 70 65 20 3d 3d 20 32 20 26 26 20 30 20  .type == 2 && 0 
0e40: 3d 3d 20 74 2e 6d 5f 6c 65 6e 67 74 68 29 0d 0a  == t.m_length)..
0e50: 09 09 09 09 09 6c 6f 6e 67 53 74 72 2d 3e 41 64  .....longStr->Ad
0e60: 64 28 70 4f 62 6a 2d 3e 6d 5f 49 44 29 3b 0d 0a  d(pObj->m_ID);..
0e70: 09 09 09 7d 0d 0a 09 09 09 61 6c 69 61 63 65 73  ...}.....aliaces
0e80: 5b 28 28 43 4d 65 74 61 44 61 74 61 54 79 70 65  [((CMetaDataType
0e90: 64 4f 62 6a 2a 29 70 4f 62 6a 29 2d 3e 47 65 74  dObj*)pObj)->Get
0ea0: 46 69 65 6c 64 4e 61 6d 65 28 29 5d 20 3d 20 70  FieldName()] = p
0eb0: 4f 62 6a 2d 3e 6d 5f 43 6f 64 65 3b 0d 0a 09 09  Obj->m_Code;....
0ec0: 7d 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64  }...}..}....void
0ed0: 20 43 56 74 61 62 49 6e 66 6f 3a 3a 66 69 6c 6c   CVtabInfo::fill
0ee0: 54 61 62 49 6e 66 6f 28 43 4e 6f 43 61 73 65 4d  TabInfo(CNoCaseM
0ef0: 61 70 3c 43 53 74 72 69 6e 67 3e 26 20 61 6c 69  ap<CString>& ali
0f00: 61 63 65 73 2c 20 43 44 57 6f 72 64 41 72 72 61  aces, CDWordArra
0f10: 79 2a 20 6c 6f 6e 67 53 74 72 29 0d 0a 7b 0d 0a  y* longStr)..{..
0f20: 09 6d 5f 70 68 69 73 49 6e 66 6f 20 3d 20 70 68  .m_phisInfo = ph
0f30: 69 73 69 63 61 6c 5f 69 6e 66 6f 3a 3a 62 75 69  isical_info::bui
0f40: 6c 64 49 6e 66 6f 28 6d 5f 70 54 61 62 6c 65 29  ldInfo(m_pTable)
0f50: 3b 0d 0a 09 6d 5f 70 46 69 65 6c 64 73 20 3d 20  ;...m_pFields = 
0f60: 6e 65 77 20 6f 6e 65 5f 66 69 65 6c 64 5b 6d 5f  new one_field[m_
0f70: 70 68 69 73 49 6e 66 6f 2d 3e 66 69 65 6c 64 73  phisInfo->fields
0f80: 43 6f 75 6e 74 28 29 20 2b 20 6d 5f 70 68 69 73  Count() + m_phis
0f90: 49 6e 66 6f 2d 3e 69 6e 64 65 78 65 73 43 6f 75  Info->indexesCou
0fa0: 6e 74 28 29 20 2b 20 31 20 2b 20 28 6c 6f 6e 67  nt() + 1 + (long
0fb0: 53 74 72 20 3f 20 6c 6f 6e 67 53 74 72 2d 3e 47  Str ? longStr->G
0fc0: 65 74 53 69 7a 65 28 29 20 3a 20 30 29 5d 3b 0d  etSize() : 0)];.
0fd0: 0a 09 6d 5f 70 46 69 65 6c 64 73 2d 3e 74 79 70  ..m_pFields->typ
0fe0: 65 20 3d 20 6f 6e 65 5f 66 69 65 6c 64 3a 3a 66  e = one_field::f
0ff0: 52 65 63 4e 6f 3b 0d 0a 09 6d 5f 70 46 69 65 6c  RecNo;...m_pFiel
1000: 64 73 2d 3e 6d 5f 6e 61 6d 65 20 3d 20 22 72 65  ds->m_name = "re
1010: 63 4e 6f 5b 72 6f 77 69 64 5d 22 3b 0d 0a 0d 0a  cNo[rowid]";....
1020: 09 2f 2f 20 c7 e0 ef ee eb ed e8 ec 20 f4 e8 e7  .// ........ ...
1030: e8 f7 e5 f1 ea e8 e5 20 ef ee eb ff 0d 0a 09 6f  ....... .......o
1040: 6e 65 5f 66 69 65 6c 64 2a 20 70 4f 6e 65 46 69  ne_field* pOneFi
1050: 65 6c 64 20 3d 20 2b 2b 6d 5f 70 46 69 65 6c 64  eld = ++m_pField
1060: 73 3b 0d 0a 09 43 4e 6f 43 61 73 65 4d 61 70 3c  s;...CNoCaseMap<
1070: 69 6e 74 3e 20 61 6c 6c 46 69 65 6c 64 73 3b 0d  int> allFields;.
1080: 0a 0d 0a 09 43 53 74 72 69 6e 67 20 63 72 65 61  ....CString crea
1090: 74 65 2c 20 6e 61 6d 65 2c 20 66 6d 74 2c 20 66  te, name, fmt, f
10a0: 6c 64 4e 61 6d 65 3b 0d 0a 09 66 6f 72 28 44 57  ldName;...for(DW
10b0: 4f 52 44 20 69 20 3d 20 30 3b 20 69 20 3c 20 6d  ORD i = 0; i < m
10c0: 5f 70 68 69 73 49 6e 66 6f 2d 3e 66 69 65 6c 64  _phisInfo->field
10d0: 73 43 6f 75 6e 74 28 29 3b 20 69 2b 2b 29 0d 0a  sCount(); i++)..
10e0: 09 7b 0d 0a 09 09 43 46 69 65 6c 64 2a 20 70 46  .{....CField* pF
10f0: 69 65 6c 64 20 3d 20 6d 5f 70 54 61 62 6c 65 2d  ield = m_pTable-
1100: 3e 66 69 65 6c 64 28 69 29 3b 0d 0a 09 09 66 6c  >field(i);....fl
1110: 64 4e 61 6d 65 20 3d 20 70 46 69 65 6c 64 2d 3e  dName = pField->
1120: 73 7a 4e 61 6d 65 3b 0d 0a 09 09 69 66 28 21 61  szName;....if(!a
1130: 6c 69 61 63 65 73 2e 4c 6f 6f 6b 75 70 28 70 46  liaces.Lookup(pF
1140: 69 65 6c 64 2d 3e 73 7a 4e 61 6d 65 2c 20 6e 61  ield->szName, na
1150: 6d 65 29 29 0d 0a 09 09 09 6e 61 6d 65 20 3d 20  me)).....name = 
1160: 66 6c 64 4e 61 6d 65 3b 0d 0a 09 09 65 6c 73 65  fldName;....else
1170: 0d 0a 09 09 09 66 6c 64 4e 61 6d 65 20 3d 20 66  .....fldName = f
1180: 6c 64 4e 61 6d 65 20 2b 20 27 5b 27 20 2b 20 6e  ldName + '[' + n
1190: 61 6d 65 20 2b 20 27 5d 27 3b 0d 0a 09 09 6f 6e  ame + ']';....on
11a0: 65 5f 66 69 65 6c 64 3a 3a 66 54 79 70 65 20 74  e_field::fType t
11b0: 79 70 65 20 3d 20 6f 6e 65 5f 66 69 65 6c 64 3a  ype = one_field:
11c0: 3a 66 46 69 65 6c 64 3b 0d 0a 0d 0a 09 09 77 68  :fField;......wh
11d0: 69 6c 65 28 61 6c 6c 46 69 65 6c 64 73 2e 49 73  ile(allFields.Is
11e0: 45 78 69 73 74 28 6e 61 6d 65 29 29 0d 0a 09 09  Exist(name))....
11f0: 09 6e 61 6d 65 20 2b 3d 20 27 5f 27 3b 0d 0a 09  .name += '_';...
1200: 09 61 6c 6c 46 69 65 6c 64 73 5b 6e 61 6d 65 5d  .allFields[name]
1210: 20 3d 20 30 3b 0d 0a 0d 0a 09 09 63 72 65 61 74   = 0;......creat
1220: 65 20 3d 20 63 72 65 61 74 65 20 2b 20 22 2c 5b  e = create + ",[
1230: 22 20 2b 20 6e 61 6d 65 20 2b 20 22 5d 22 3b 0d  " + name + "]";.
1240: 0a 09 09 73 77 69 74 63 68 28 70 46 69 65 6c 64  ...switch(pField
1250: 2d 3e 54 79 70 65 43 46 69 65 6c 64 29 0d 0a 09  ->TypeCField)...
1260: 09 7b 0d 0a 09 09 63 61 73 65 20 31 3a 20 2f 2f  .{....case 1: //
1270: 20 63 68 61 72 0d 0a 09 09 09 66 6d 74 2e 46 6f   char.....fmt.Fo
1280: 72 6d 61 74 28 22 20 63 68 61 72 28 25 69 29 20  rmat(" char(%i) 
1290: 63 6f 6c 6c 61 74 65 20 5f 31 43 22 2c 20 70 46  collate _1C", pF
12a0: 69 65 6c 64 2d 3e 73 69 7a 65 43 46 69 65 6c 64  ield->sizeCField
12b0: 29 3b 0d 0a 09 09 09 63 72 65 61 74 65 20 2b 3d  );.....create +=
12c0: 20 66 6d 74 3b 0d 0a 09 09 09 62 72 65 61 6b 3b   fmt;.....break;
12d0: 0d 0a 09 09 63 61 73 65 20 32 3a 09 2f 2f 20 6e  ....case 2:.// n
12e0: 75 6d 65 72 69 63 0d 0a 09 09 09 66 6d 74 2e 46  umeric.....fmt.F
12f0: 6f 72 6d 61 74 28 22 20 6e 75 6d 65 72 69 63 28  ormat(" numeric(
1300: 25 69 2c 20 25 69 29 22 2c 20 70 46 69 65 6c 64  %i, %i)", pField
1310: 2d 3e 73 69 7a 65 43 46 69 65 6c 64 2c 20 70 46  ->sizeCField, pF
1320: 69 65 6c 64 2d 3e 70 72 65 63 43 46 69 65 6c 64  ield->precCField
1330: 29 3b 0d 0a 09 09 09 63 72 65 61 74 65 20 2b 3d  );.....create +=
1340: 20 66 6d 74 3b 0d 0a 09 09 09 7b 0d 0a 09 09 09   fmt;.....{.....
1350: 09 4c 50 43 53 54 52 20 70 52 65 61 64 20 3d 20  .LPCSTR pRead = 
1360: 70 46 69 65 6c 64 2d 3e 73 7a 4e 61 6d 65 3b 0d  pField->szName;.
1370: 0a 09 09 09 09 77 68 69 6c 65 28 2a 70 52 65 61  .....while(*pRea
1380: 64 20 26 26 20 2a 70 52 65 61 64 20 3e 20 27 39  d && *pRead > '9
1390: 27 29 0d 0a 09 09 09 09 09 70 52 65 61 64 2b 2b  ').......pRead++
13a0: 3b 0d 0a 09 09 09 09 69 66 28 2a 70 52 65 61 64  ;......if(*pRead
13b0: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 43  )......{.......C
13c0: 4d 65 74 61 44 61 74 61 4f 62 6a 2a 20 70 4f 62  MetaDataObj* pOb
13d0: 6a 20 3d 20 70 4d 65 74 61 44 61 74 61 43 6f 6e  j = pMetaDataCon
13e0: 74 2d 3e 46 69 6e 64 4f 62 6a 65 63 74 28 61 74  t->FindObject(at
13f0: 6f 6c 28 70 52 65 61 64 29 29 3b 0d 0a 09 09 09  ol(pRead));.....
1400: 09 09 69 66 28 70 4f 62 6a 20 26 26 20 70 4f 62  ..if(pObj && pOb
1410: 6a 2d 3e 49 73 54 79 70 65 64 4f 62 6a 28 29 20  j->IsTypedObj() 
1420: 26 26 20 21 28 28 43 4d 65 74 61 44 61 74 61 54  && !((CMetaDataT
1430: 79 70 65 64 4f 62 6a 2a 29 70 4f 62 6a 29 2d 3e  ypedObj*)pObj)->
1440: 47 65 74 54 79 70 65 28 29 2e 49 73 50 6f 73 69  GetType().IsPosi
1450: 74 69 76 65 4f 6e 6c 79 28 29 29 0d 0a 09 09 09  tiveOnly()).....
1460: 09 09 09 74 79 70 65 20 3d 20 6f 6e 65 5f 66 69  ...type = one_fi
1470: 65 6c 64 3a 3a 66 4e 75 6d 4e 65 67 61 74 65 46  eld::fNumNegateF
1480: 69 65 6c 64 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09  ield;......}....
1490: 09 7d 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09  .}.....break;...
14a0: 09 63 61 73 65 20 33 3a 09 2f 2f 20 64 61 74 65  .case 3:.// date
14b0: 0d 0a 09 09 09 63 72 65 61 74 65 20 2b 3d 20 22  .....create += "
14c0: 20 63 68 61 72 28 38 29 22 3b 0d 0a 09 09 09 62   char(8)";.....b
14d0: 72 65 61 6b 3b 0d 0a 09 09 64 65 66 61 75 6c 74  reak;....default
14e0: 3a 0d 0a 09 09 09 63 72 65 61 74 65 20 2b 3d 20  :.....create += 
14f0: 22 20 74 65 78 74 20 63 6f 6c 6c 61 74 65 20 5f  " text collate _
1500: 31 43 22 3b 0d 0a 09 09 7d 0d 0a 09 09 63 72 65  1C";....}....cre
1510: 61 74 65 20 2b 3d 20 22 20 6e 6f 74 20 6e 75 6c  ate += " not nul
1520: 6c 5c 72 5c 6e 22 3b 0d 0a 09 09 70 4f 6e 65 46  l\r\n";....pOneF
1530: 69 65 6c 64 2d 3e 74 79 70 65 20 3d 20 74 79 70  ield->type = typ
1540: 65 3b 0d 0a 09 09 70 4f 6e 65 46 69 65 6c 64 2d  e;....pOneField-
1550: 3e 70 6f 73 69 74 69 6f 6e 20 3d 20 69 3b 0d 0a  >position = i;..
1560: 09 09 70 4f 6e 65 46 69 65 6c 64 2d 3e 6d 5f 6e  ..pOneField->m_n
1570: 61 6d 65 20 3d 20 66 6c 64 4e 61 6d 65 3b 0d 0a  ame = fldName;..
1580: 09 09 70 4f 6e 65 46 69 65 6c 64 2b 2b 3b 0d 0a  ..pOneField++;..
1590: 09 7d 0d 0a 09 2f 2f 20 c7 e0 ef ee eb ed e8 ec  .}...// ........
15a0: 20 ef ee eb ff 20 e4 eb e8 ed ed fb f5 20 f1 f2   .... ....... ..
15b0: f0 ee ea 0d 0a 09 69 66 28 6c 6f 6e 67 53 74 72  ......if(longStr
15c0: 29 0d 0a 09 7b 0d 0a 09 09 66 6f 72 28 69 20 3d  )...{....for(i =
15d0: 20 30 3b 20 69 3c 6c 6f 6e 67 53 74 72 2d 3e 47   0; i<longStr->G
15e0: 65 74 53 69 7a 65 28 29 3b 20 69 2b 2b 29 0d 0a  etSize(); i++)..
15f0: 09 09 7b 0d 0a 09 09 09 44 57 4f 52 44 20 69 64  ..{.....DWORD id
1600: 20 3d 20 6c 6f 6e 67 53 74 72 2d 3e 47 65 74 41   = longStr->GetA
1610: 74 28 69 29 3b 0d 0a 09 09 09 43 4d 65 74 61 44  t(i);.....CMetaD
1620: 61 74 61 4f 62 6a 2a 20 70 4f 62 6a 20 3d 20 70  ataObj* pObj = p
1630: 4d 65 74 61 44 61 74 61 43 6f 6e 74 2d 3e 46 69  MetaDataCont->Fi
1640: 6e 64 4f 62 6a 65 63 74 28 69 64 29 3b 0d 0a 09  ndObject(id);...
1650: 09 09 44 57 4f 52 44 20 62 75 66 20 3d 20 30 78  ..DWORD buf = 0x
1660: 32 30 32 30 32 30 32 30 3b 0d 0a 09 09 09 63 68  20202020;.....ch
1670: 61 72 2a 20 70 74 72 20 3d 20 28 28 63 68 61 72  ar* ptr = ((char
1680: 2a 29 26 62 75 66 29 20 2b 20 33 3b 0d 0a 09 09  *)&buf) + 3;....
1690: 09 64 6f 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 44  .do.....{......D
16a0: 57 4f 52 44 20 6d 6f 64 20 3d 20 69 64 20 25 20  WORD mod = id % 
16b0: 33 36 3b 0d 0a 09 09 09 09 2a 70 74 72 2d 2d 20  36;......*ptr-- 
16c0: 3d 20 6d 6f 64 20 3c 20 31 30 20 3f 20 6d 6f 64  = mod < 10 ? mod
16d0: 20 2b 20 27 30 27 20 3a 20 6d 6f 64 20 2d 20 31   + '0' : mod - 1
16e0: 30 20 2b 20 27 41 27 3b 0d 0a 09 09 09 09 69 64  0 + 'A';......id
16f0: 20 2f 3d 20 33 36 3b 0d 0a 09 09 09 7d 77 68 69   /= 36;.....}whi
1700: 6c 65 28 69 64 29 3b 0d 0a 0d 0a 09 09 09 70 4f  le(id);.......pO
1710: 6e 65 46 69 65 6c 64 2d 3e 74 79 70 65 20 3d 20  neField->type = 
1720: 6f 6e 65 5f 66 69 65 6c 64 3a 3a 66 4c 6f 6e 67  one_field::fLong
1730: 53 74 72 3b 0d 0a 09 09 09 70 4f 6e 65 46 69 65  Str;.....pOneFie
1740: 6c 64 2d 3e 6d 5f 6e 61 6d 65 20 3d 20 70 4f 62  ld->m_name = pOb
1750: 6a 2d 3e 6d 5f 43 6f 64 65 3b 0d 0a 09 09 09 70  j->m_Code;.....p
1760: 4f 6e 65 46 69 65 6c 64 2d 3e 70 6f 73 69 74 69  OneField->positi
1770: 6f 6e 20 3d 20 62 75 66 3b 0d 0a 09 09 09 63 72  on = buf;.....cr
1780: 65 61 74 65 20 3d 20 63 72 65 61 74 65 20 2b 20  eate = create + 
1790: 22 2c 22 20 2b 20 70 4f 6e 65 46 69 65 6c 64 2d  "," + pOneField-
17a0: 3e 6d 5f 6e 61 6d 65 20 2b 20 22 20 74 65 78 74  >m_name + " text
17b0: 20 63 6f 6c 6c 61 74 65 20 5f 31 43 20 64 65 66   collate _1C def
17c0: 61 75 6c 74 20 6e 75 6c 6c 5c 72 5c 6e 22 3b 0d  ault null\r\n";.
17d0: 0a 09 09 09 70 4f 6e 65 46 69 65 6c 64 2b 2b 3b  ....pOneField++;
17e0: 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 0d 0a 09 43 53  ....}...}.....CS
17f0: 74 72 69 6e 67 20 69 64 78 4e 61 6d 65 3b 0d 0a  tring idxName;..
1800: 0d 0a 09 66 6f 72 28 69 20 3d 20 30 3b 20 69 20  ...for(i = 0; i 
1810: 3c 20 6d 5f 70 68 69 73 49 6e 66 6f 2d 3e 69 6e  < m_phisInfo->in
1820: 64 65 78 65 73 43 6f 75 6e 74 28 29 20 3b 20 69  dexesCount() ; i
1830: 2b 2b 29 0d 0a 09 7b 0d 0a 09 09 43 49 6e 64 65  ++)...{....CInde
1840: 78 45 78 2a 20 70 49 6e 64 65 78 20 3d 20 6d 5f  xEx* pIndex = m_
1850: 70 54 61 62 6c 65 2d 3e 69 6e 64 65 78 28 69 29  pTable->index(i)
1860: 3b 0d 0a 09 09 0d 0a 09 09 44 57 4f 52 44 20 6c  ;........DWORD l
1870: 65 6e 20 3d 20 30 2c 20 6e 43 6f 75 6e 74 20 3d  en = 0, nCount =
1880: 20 70 49 6e 64 65 78 2d 3e 66 69 65 6c 64 73 43   pIndex->fieldsC
1890: 6f 75 6e 74 28 29 3b 0d 0a 09 09 69 64 78 4e 61  ount();....idxNa
18a0: 6d 65 20 3d 20 22 69 64 78 22 3b 0d 0a 09 09 66  me = "idx";....f
18b0: 6f 72 28 44 57 4f 52 44 20 6a 20 3d 20 30 3b 20  or(DWORD j = 0; 
18c0: 6a 20 3c 20 6e 43 6f 75 6e 74 20 3b 20 6a 2b 2b  j < nCount ; j++
18d0: 29 0d 0a 09 09 7b 0d 0a 09 09 09 43 46 69 65 6c  )....{.....CFiel
18e0: 64 2a 20 70 46 69 65 6c 64 20 3d 20 70 49 6e 64  d* pField = pInd
18f0: 65 78 2d 3e 66 69 65 6c 64 28 6a 29 3b 0d 0a 0d  ex->field(j);...
1900: 0a 09 09 09 69 66 28 21 61 6c 69 61 63 65 73 2e  ....if(!aliaces.
1910: 4c 6f 6f 6b 75 70 28 70 46 69 65 6c 64 2d 3e 73  Lookup(pField->s
1920: 7a 4e 61 6d 65 2c 20 6e 61 6d 65 29 29 0d 0a 09  zName, name))...
1930: 09 09 09 6e 61 6d 65 20 3d 20 70 46 69 65 6c 64  ...name = pField
1940: 2d 3e 73 7a 4e 61 6d 65 3b 0d 0a 09 09 09 69 64  ->szName;.....id
1950: 78 4e 61 6d 65 20 3d 20 69 64 78 4e 61 6d 65 20  xName = idxName 
1960: 2b 20 27 5f 27 20 2b 20 6e 61 6d 65 3b 0d 0a 09  + '_' + name;...
1970: 09 09 6c 65 6e 20 2b 3d 20 70 46 69 65 6c 64 2d  ..len += pField-
1980: 3e 73 69 7a 65 43 46 69 65 6c 64 3b 0d 0a 09 09  >sizeCField;....
1990: 7d 0d 0a 09 09 66 6d 74 2e 46 6f 72 6d 61 74 28  }....fmt.Format(
19a0: 22 2c 20 25 73 20 63 68 61 72 28 25 69 29 20 63  ", %s char(%i) c
19b0: 6f 6c 6c 61 74 65 20 5f 31 43 20 64 65 66 61 75  ollate _1C defau
19c0: 6c 74 20 6e 75 6c 6c 5c 72 5c 6e 22 2c 20 69 64  lt null\r\n", id
19d0: 78 4e 61 6d 65 2c 20 6c 65 6e 29 3b 0d 0a 09 09  xName, len);....
19e0: 63 72 65 61 74 65 20 2b 3d 20 66 6d 74 3b 0d 0a  create += fmt;..
19f0: 09 09 70 4f 6e 65 46 69 65 6c 64 2d 3e 74 79 70  ..pOneField->typ
1a00: 65 20 3d 20 6f 6e 65 5f 66 69 65 6c 64 3a 3a 66  e = one_field::f
1a10: 56 69 72 74 49 64 78 3b 0d 0a 09 09 70 4f 6e 65  VirtIdx;....pOne
1a20: 46 69 65 6c 64 2d 3e 70 6f 73 69 74 69 6f 6e 20  Field->position 
1a30: 3d 20 69 3b 0d 0a 09 09 70 4f 6e 65 46 69 65 6c  = i;....pOneFiel
1a40: 64 2d 3e 6d 5f 6e 61 6d 65 20 3d 20 43 53 74 72  d->m_name = CStr
1a50: 69 6e 67 28 70 49 6e 64 65 78 2d 3e 73 7a 4e 61  ing(pIndex->szNa
1a60: 6d 65 29 20 2b 20 27 5b 27 20 2b 20 28 28 4c 50  me) + '[' + ((LP
1a70: 43 53 54 52 29 69 64 78 4e 61 6d 65 20 2b 20 31  CSTR)idxName + 1
1a80: 29 20 2b 20 27 5d 27 3b 0d 0a 09 09 70 4f 6e 65  ) + ']';....pOne
1a90: 46 69 65 6c 64 2b 2b 3b 0d 0a 09 7d 0d 0a 09 0d  Field++;...}....
1aa0: 0a 09 63 72 65 61 74 65 2e 53 65 74 41 74 28 30  ..create.SetAt(0
1ab0: 2c 20 27 20 27 29 3b 0d 0a 09 6d 5f 73 74 72 53  , ' ');...m_strS
1ac0: 71 6c 43 72 65 61 74 65 2e 46 6f 72 6d 61 74 28  qlCreate.Format(
1ad0: 22 63 72 65 61 74 65 20 74 61 62 6c 65 20 78 28  "create table x(
1ae0: 5c 72 5c 6e 25 73 29 22 2c 20 63 72 65 61 74 65  \r\n%s)", create
1af0: 29 3b 0d 0a 09 69 66 28 62 44 6f 54 72 61 63 65  );...if(bDoTrace
1b00: 29 0d 0a 09 09 44 6f 4d 73 67 4c 69 6e 65 28 22  )....DoMsgLine("
1b10: 25 73 22 2c 20 6d 6d 4e 6f 6e 65 2c 20 6d 5f 73  %s", mmNone, m_s
1b20: 74 72 53 71 6c 43 72 65 61 74 65 29 3b 0d 0a 09  trSqlCreate);...
1b30: 75 38 74 65 78 74 3a 3a 74 6f 55 74 66 38 28 6d  u8text::toUtf8(m
1b40: 5f 73 74 72 53 71 6c 43 72 65 61 74 65 29 3b 0d  _strSqlCreate);.
1b50: 0a 0d 0a 09 2f 2f 20 cf ee eb f3 f7 e8 ec 20 ef  ....// ....... .
1b60: f0 e8 e1 eb e8 e7 e8 f2 e5 eb fc ed ee e5 20 ea  .............. .
1b70: ee eb e8 f7 e5 f1 f2 e2 ee 20 f1 f2 f0 ee ea 2e  ......... ......
1b80: 0d 0a 09 43 53 74 6f 72 65 4f 62 6a 20 73 74 6f  ...CStoreObj sto
1b90: 72 65 28 6d 5f 70 54 61 62 6c 65 2c 20 4e 55 4c  re(m_pTable, NUL
1ba0: 4c 29 3b 0d 0a 09 73 74 6f 72 65 2e 47 6f 74 6f  L);...store.Goto
1bb0: 28 6e 61 76 4c 61 73 74 2c 20 30 29 3b 0d 0a 09  (navLast, 0);...
1bc0: 44 57 4f 52 44 20 61 70 70 72 6f 78 52 6f 77 43  DWORD approxRowC
1bd0: 6f 75 6e 74 20 3d 20 73 74 6f 72 65 2e 6d 5f 70  ount = store.m_p
1be0: 6f 73 3b 0d 0a 09 2f 2f 20 c2 fb f7 e8 f1 eb e8  os;...// .......
1bf0: ec 20 ef f0 e8 e1 eb e8 e7 e8 f2 e5 eb fc ed ee  . ..............
1c00: e5 20 e7 ed e0 f7 e5 ed e8 e5 20 6c 6f 67 32 20  . ........ log2 
1c10: ee f2 20 ea ee eb e8 f7 e5 f1 f2 e2 e0 20 f1 f2  .. .......... ..
1c20: f0 ee ea 2c 0d 0a 09 2f 2f 20 ea e0 ea 20 33 32  ...,...// ... 32
1c30: 20 2d 20 ea ee eb e8 f7 e5 f1 f2 e2 ee 20 e2 e5   - .......... ..
1c40: e4 f3 f9 e8 f5 20 ed f3 eb e5 e9 20 e2 20 e1 e8  ..... ..... . ..
1c50: f2 e0 f5 20 f7 e8 f1 eb e0 0d 0a 09 6c 6f 67 52  ... ........logR
1c60: 6f 77 43 6f 75 6e 74 20 3d 20 33 32 3b 0d 0a 09  owCount = 32;...
1c70: 44 57 4f 52 44 20 72 20 3d 20 61 70 70 72 6f 78  DWORD r = approx
1c80: 52 6f 77 43 6f 75 6e 74 3b 0d 0a 09 69 66 28 30  RowCount;...if(0
1c90: 20 3d 3d 20 28 72 20 26 20 30 78 46 46 46 46 30   == (r & 0xFFFF0
1ca0: 30 30 30 29 29 7b 6c 6f 67 52 6f 77 43 6f 75 6e  000)){logRowCoun
1cb0: 74 20 2d 3d 20 31 36 3b 20 72 20 3c 3c 3d 20 31  t -= 16; r <<= 1
1cc0: 36 3b 7d 0d 0a 09 69 66 28 30 20 3d 3d 20 28 72  6;}...if(0 == (r
1cd0: 20 26 20 30 78 46 46 30 30 30 30 30 30 29 29 7b   & 0xFF000000)){
1ce0: 6c 6f 67 52 6f 77 43 6f 75 6e 74 20 2d 3d 20 38  logRowCount -= 8
1cf0: 3b 20 72 20 3c 3c 3d 20 38 3b 7d 0d 0a 09 69 66  ; r <<= 8;}...if
1d00: 28 30 20 3d 3d 20 28 72 20 26 20 30 78 46 30 30  (0 == (r & 0xF00
1d10: 30 30 30 30 30 29 29 7b 6c 6f 67 52 6f 77 43 6f  00000)){logRowCo
1d20: 75 6e 74 20 2d 3d 20 34 3b 20 72 20 3c 3c 3d 20  unt -= 4; r <<= 
1d30: 34 3b 7d 0d 0a 09 69 66 28 30 20 3d 3d 20 28 72  4;}...if(0 == (r
1d40: 20 26 20 30 78 43 30 30 30 30 30 30 30 29 29 7b   & 0xC0000000)){
1d50: 6c 6f 67 52 6f 77 43 6f 75 6e 74 20 2d 3d 20 32  logRowCount -= 2
1d60: 3b 7d 0d 0a 7d 0d 0a 0d 0a 2f 2f 20 c8 ed f4 f0  ;}..}....// ....
1d70: e0 f1 f2 f0 f3 ea f2 f3 f0 e0 20 e4 eb ff 20 ef  .......... ... .
1d80: ee f1 f2 f0 ee e5 ed e8 ff 20 f6 e5 ef ee f7 ea  ......... ......
1d90: e8 20 ea eb e0 f1 f1 ee e2 2d ee e1 f0 e0 e1 ee  . .......-......
1da0: f2 f7 e8 ea ee e2 0d 0a 73 74 72 75 63 74 20 6e  ........struct n
1db0: 75 6c 6c 5f 6f 62 6a 65 63 74 7b 65 6e 75 6d 7b  ull_object{enum{
1dc0: 76 61 6c 20 3d 20 2d 31 7d 3b 7d 3b 0d 0a 74 65  val = -1};};..te
1dd0: 6d 70 6c 61 74 65 3c 69 6e 74 20 49 3e 20 73 74  mplate<int I> st
1de0: 72 75 63 74 20 70 72 65 76 5f 74 79 70 65 7b 74  ruct prev_type{t
1df0: 79 70 65 64 65 66 20 70 72 65 76 5f 74 79 70 65  ypedef prev_type
1e00: 3c 49 2d 31 3e 3a 3a 74 79 70 65 20 74 79 70 65  <I-1>::type type
1e10: 3b 7d 3b 0d 0a 74 65 6d 70 6c 61 74 65 3c 3e 20  ;};..template<> 
1e20: 73 74 72 75 63 74 20 70 72 65 76 5f 74 79 70 65  struct prev_type
1e30: 3c 5f 5f 4c 49 4e 45 5f 5f 3e 7b 20 74 79 70 65  <__LINE__>{ type
1e40: 64 65 66 20 6e 75 6c 6c 5f 6f 62 6a 65 63 74 20  def null_object 
1e50: 74 79 70 65 3b 20 7d 3b 0d 0a 0d 0a 23 64 65 66  type; };....#def
1e60: 69 6e 65 20 46 49 4e 44 5f 43 4c 41 53 53 28 63  ine FIND_CLASS(c
1e70: 6c 61 73 73 4e 61 6d 65 29 5c 0d 0a 73 74 72 75  lassName)\..stru
1e80: 63 74 20 63 6c 61 73 73 4e 61 6d 65 23 23 5f 66  ct className##_f
1e90: 64 5c 0d 0a 7b 5c 0d 0a 09 74 79 70 65 64 65 66  d\..{\...typedef
1ea0: 20 70 72 65 76 5f 74 79 70 65 3c 5f 5f 4c 49 4e   prev_type<__LIN
1eb0: 45 5f 5f 20 2d 20 31 3e 3a 3a 74 79 70 65 20 70  E__ - 1>::type p
1ec0: 72 65 76 3b 5c 0d 0a 09 74 79 70 65 64 65 66 20  rev;\...typedef 
1ed0: 63 6c 61 73 73 4e 61 6d 65 20 63 6c 61 73 73 54  className classT
1ee0: 79 70 65 3b 5c 0d 0a 09 65 6e 75 6d 7b 76 61 6c  ype;\...enum{val
1ef0: 20 3d 20 70 72 65 76 3a 3a 76 61 6c 20 2b 20 31   = prev::val + 1
1f00: 7d 3b 5c 0d 0a 7d 3b 5c 0d 0a 74 65 6d 70 6c 61  };\..};\..templa
1f10: 74 65 3c 3e 20 73 74 72 75 63 74 20 70 72 65 76  te<> struct prev
1f20: 5f 74 79 70 65 3c 5f 5f 4c 49 4e 45 5f 5f 3e 20  _type<__LINE__> 
1f30: 7b 74 79 70 65 64 65 66 20 63 6c 61 73 73 4e 61  {typedef classNa
1f40: 6d 65 23 23 5f 66 64 20 74 79 70 65 3b 7d 0d 0a  me##_fd type;}..
1f50: 0d 0a 73 74 72 75 63 74 20 66 69 72 73 74 5f 73  ..struct first_s
1f60: 74 72 69 6e 67 5f 68 61 73 68 0d 0a 7b 0d 0a 09  tring_hash..{...
1f70: 43 4e 6f 43 61 73 65 4d 61 70 3c 69 6e 74 3e 20  CNoCaseMap<int> 
1f80: 54 79 70 65 4e 75 6d 73 3b 0d 0a 09 74 65 6d 70  TypeNums;...temp
1f90: 6c 61 74 65 3c 74 79 70 65 6e 61 6d 65 20 54 3e  late<typename T>
1fa0: 0d 0a 09 5f 5f 66 6f 72 63 65 69 6e 6c 69 6e 65  ...__forceinline
1fb0: 20 66 69 72 73 74 5f 73 74 72 69 6e 67 5f 68 61   first_string_ha
1fc0: 73 68 28 54 2a 20 70 29 0d 0a 09 7b 0d 0a 09 09  sh(T* p)...{....
1fd0: 46 69 6c 6c 28 70 29 3b 0d 0a 09 7d 0d 0a 09 74  Fill(p);...}...t
1fe0: 65 6d 70 6c 61 74 65 3c 74 79 70 65 6e 61 6d 65  emplate<typename
1ff0: 20 54 3e 0d 0a 09 5f 5f 66 6f 72 63 65 69 6e 6c   T>...__forceinl
2000: 69 6e 65 20 76 6f 69 64 20 46 69 6c 6c 28 54 2a  ine void Fill(T*
2010: 29 0d 0a 09 7b 0d 0a 09 09 4c 50 43 53 54 52 20  )...{....LPCSTR 
2020: 70 31 2c 20 70 32 3b 0d 0a 09 09 54 3a 3a 63 6c  p1, p2;....T::cl
2030: 61 73 73 54 79 70 65 3a 3a 47 65 74 46 69 6e 64  assType::GetFind
2040: 49 6e 66 6f 28 70 31 2c 20 70 32 29 3b 0d 0a 09  Info(p1, p2);...
2050: 09 54 79 70 65 4e 75 6d 73 5b 70 31 5d 20 3d 20  .TypeNums[p1] = 
2060: 54 3a 3a 76 61 6c 3b 0d 0a 09 09 54 79 70 65 4e  T::val;....TypeN
2070: 75 6d 73 5b 70 32 5d 20 3d 20 54 3a 3a 76 61 6c  ums[p2] = T::val
2080: 3b 0d 0a 09 09 46 69 6c 6c 28 28 54 3a 3a 70 72  ;....Fill((T::pr
2090: 65 76 2a 29 4e 55 4c 4c 29 3b 0d 0a 09 7d 0d 0a  ev*)NULL);...}..
20a0: 09 74 65 6d 70 6c 61 74 65 3c 3e 20 76 6f 69 64  .template<> void
20b0: 20 46 69 6c 6c 3c 6e 75 6c 6c 5f 6f 62 6a 65 63   Fill<null_objec
20c0: 74 3e 28 6e 75 6c 6c 5f 6f 62 6a 65 63 74 2a 29  t>(null_object*)
20d0: 7b 7d 0d 0a 7d 3b 0d 0a 0d 0a 74 65 6d 70 6c 61  {}..};....templa
20e0: 74 65 3c 74 79 70 65 6e 61 6d 65 20 54 3e 0d 0a  te<typename T>..
20f0: 5f 5f 66 6f 72 63 65 69 6e 6c 69 6e 65 20 43 56  __forceinline CV
2100: 74 61 62 49 6e 66 6f 2a 20 5f 47 65 74 4f 62 6a  tabInfo* _GetObj
2110: 65 63 74 28 43 53 74 72 69 6e 67 41 72 72 61 79  ect(CStringArray
2120: 26 20 61 72 72 4f 66 4e 61 6d 65 73 2c 20 43 4e  & arrOfNames, CN
2130: 6f 43 61 73 65 4d 61 70 3c 43 56 74 61 62 49 6e  oCaseMap<CVtabIn
2140: 66 6f 2a 3e 26 20 61 6c 6c 4f 62 6a 65 63 74 73  fo*>& allObjects
2150: 2c 20 63 6f 6e 73 74 20 69 6e 74 20 69 54 79 70  , const int iTyp
2160: 65 4e 75 6d 2c 20 54 2a 20 70 3d 4e 55 4c 4c 29  eNum, T* p=NULL)
2170: 0d 0a 7b 0d 0a 09 69 66 28 54 3a 3a 76 61 6c 20  ..{...if(T::val 
2180: 3d 3d 20 69 54 79 70 65 4e 75 6d 29 0d 0a 09 7b  == iTypeNum)...{
2190: 0d 0a 09 09 43 53 74 72 69 6e 67 20 73 74 72 4e  ....CString strN
21a0: 61 6d 65 3b 0d 0a 09 09 74 79 70 65 64 65 66 20  ame;....typedef 
21b0: 54 3a 3a 63 6c 61 73 73 54 79 70 65 20 63 74 3b  T::classType ct;
21c0: 0d 0a 09 09 69 66 28 21 63 74 3a 3a 47 65 74 4e  ....if(!ct::GetN
21d0: 61 6d 65 46 72 6f 6d 28 61 72 72 4f 66 4e 61 6d  ameFrom(arrOfNam
21e0: 65 73 2c 20 73 74 72 4e 61 6d 65 29 29 0d 0a 09  es, strName))...
21f0: 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a  ..return NULL;..
2200: 09 09 73 74 72 4e 61 6d 65 2e 49 6e 73 65 72 74  ..strName.Insert
2210: 28 30 2c 20 63 74 3a 3a 47 65 74 50 72 65 66 69  (0, ct::GetPrefi
2220: 78 28 29 29 3b 0d 0a 09 09 43 56 74 61 62 49 6e  x());....CVtabIn
2230: 66 6f 2a 20 70 49 6e 66 6f 3b 0d 0a 09 09 69 66  fo* pInfo;....if
2240: 28 61 6c 6c 4f 62 6a 65 63 74 73 2e 4c 6f 6f 6b  (allObjects.Look
2250: 75 70 28 73 74 72 4e 61 6d 65 2c 20 70 49 6e 66  up(strName, pInf
2260: 6f 29 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 70  o)).....return p
2270: 49 6e 66 6f 3b 0d 0a 09 09 70 49 6e 66 6f 20 3d  Info;....pInfo =
2280: 20 6e 65 77 20 63 74 28 61 72 72 4f 66 4e 61 6d   new ct(arrOfNam
2290: 65 73 29 3b 0d 0a 09 09 69 66 28 21 70 49 6e 66  es);....if(!pInf
22a0: 6f 2d 3e 74 61 62 6c 65 28 29 29 0d 0a 09 09 7b  o->table())....{
22b0: 0d 0a 09 09 09 73 74 61 74 69 63 5f 63 61 73 74  .....static_cast
22c0: 3c 63 74 2a 3e 28 70 49 6e 66 6f 29 2d 3e 46 72  <ct*>(pInfo)->Fr
22d0: 65 65 28 29 3b 0d 0a 09 09 09 70 49 6e 66 6f 20  ee();.....pInfo 
22e0: 3d 20 4e 55 4c 4c 3b 0d 0a 09 09 7d 0d 0a 09 09  = NULL;....}....
22f0: 65 6c 73 65 0d 0a 09 09 09 61 6c 6c 4f 62 6a 65  else.....allObje
2300: 63 74 73 5b 73 74 72 4e 61 6d 65 5d 20 3d 20 70  cts[strName] = p
2310: 49 6e 66 6f 3b 0d 0a 09 09 72 65 74 75 72 6e 20  Info;....return 
2320: 70 49 6e 66 6f 3b 0d 0a 09 7d 0d 0a 09 65 6c 73  pInfo;...}...els
2330: 65 0d 0a 09 09 72 65 74 75 72 6e 20 5f 47 65 74  e....return _Get
2340: 4f 62 6a 65 63 74 28 61 72 72 4f 66 4e 61 6d 65  Object(arrOfName
2350: 73 2c 20 61 6c 6c 4f 62 6a 65 63 74 73 2c 20 69  s, allObjects, i
2360: 54 79 70 65 4e 75 6d 2c 20 28 54 3a 3a 70 72 65  TypeNum, (T::pre
2370: 76 2a 29 4e 55 4c 4c 29 3b 0d 0a 7d 0d 0a 74 65  v*)NULL);..}..te
2380: 6d 70 6c 61 74 65 3c 3e 0d 0a 5f 5f 66 6f 72 63  mplate<>..__forc
2390: 65 69 6e 6c 69 6e 65 20 43 56 74 61 62 49 6e 66  einline CVtabInf
23a0: 6f 2a 20 5f 47 65 74 4f 62 6a 65 63 74 3c 6e 75  o* _GetObject<nu
23b0: 6c 6c 5f 6f 62 6a 65 63 74 3e 28 43 53 74 72 69  ll_object>(CStri
23c0: 6e 67 41 72 72 61 79 26 20 61 72 72 4f 66 4e 61  ngArray& arrOfNa
23d0: 6d 65 73 2c 20 43 4e 6f 43 61 73 65 4d 61 70 3c  mes, CNoCaseMap<
23e0: 43 56 74 61 62 49 6e 66 6f 2a 3e 26 20 61 6c 6c  CVtabInfo*>& all
23f0: 4f 62 6a 65 63 74 73 2c 20 63 6f 6e 73 74 20 69  Objects, const i
2400: 6e 74 20 69 54 79 70 65 4e 75 6d 2c 20 6e 75 6c  nt iTypeNum, nul
2410: 6c 5f 6f 62 6a 65 63 74 2a 20 70 29 0d 0a 7b 0d  l_object* p)..{.
2420: 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a  ..return NULL;..
2430: 7d 0d 0a 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  }....///////////
2440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2480: 0a 2f 2f 20 cd c0 d7 c0 cb ce 20 ce cf c8 d1 c0  .// ...... .....
2490: cd c8 df 20 ca cb c0 d1 d1 ce c2 20 ce c1 da c5  ... ....... ....
24a0: ca d2 ce c2 20 d0 c0 c7 cb c8 d7 cd db d5 20 d2  .... ......... .
24b0: c0 c1 cb c8 d6 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f  ......./////////
24c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2500: 2f 0d 0a 46 49 4e 44 5f 43 4c 41 53 53 28 43 52  /..FIND_CLASS(CR
2510: 65 66 65 72 65 6e 63 65 54 61 62 49 6e 66 6f 29  eferenceTabInfo)
2520: 3b 0d 0a 46 49 4e 44 5f 43 4c 41 53 53 28 43 4a  ;..FIND_CLASS(CJ
2530: 6f 75 72 6e 49 6e 66 6f 29 3b 0d 0a 46 49 4e 44  ournInfo);..FIND
2540: 5f 43 4c 41 53 53 28 43 44 48 54 61 62 49 6e 66  _CLASS(CDHTabInf
2550: 6f 29 3b 0d 0a 46 49 4e 44 5f 43 4c 41 53 53 28  o);..FIND_CLASS(
2560: 43 44 54 54 61 62 49 6e 66 6f 29 3b 0d 0a 46 49  CDTTabInfo);..FI
2570: 4e 44 5f 43 4c 41 53 53 28 43 52 65 67 54 61 62  ND_CLASS(CRegTab
2580: 49 6e 66 6f 29 3b 0d 0a 46 49 4e 44 5f 43 4c 41  Info);..FIND_CLA
2590: 53 53 28 43 52 65 67 54 6f 74 61 6c 73 54 61 62  SS(CRegTotalsTab
25a0: 49 6e 66 6f 29 3b 0d 0a 46 49 4e 44 5f 43 4c 41  Info);..FIND_CLA
25b0: 53 53 28 43 43 6f 72 65 54 61 62 73 29 3b 0d 0a  SS(CCoreTabs);..
25c0: 46 49 4e 44 5f 43 4c 41 53 53 28 43 43 4a 54 61  FIND_CLASS(CCJTa
25d0: 62 49 6e 66 6f 29 3b 0d 0a 2f 2f 20 ca ce cd c5  bInfo);..// ....
25e0: d6 20 ce cf c8 d1 c0 cd c8 df 20 ca cb c0 d1 d1  . ........ .....
25f0: ce c2 20 ce c1 da c5 ca d2 ce c2 20 d0 c0 c7 cb  .. ........ ....
2600: c8 d7 cd db d5 20 d2 c0 c1 cb c8 d6 0d 0a 0d 0a  ..... ..........
2610: 74 79 70 65 64 65 66 20 70 72 65 76 5f 74 79 70  typedef prev_typ
2620: 65 3c 5f 5f 4c 49 4e 45 5f 5f 3e 3a 3a 74 79 70  e<__LINE__>::typ
2630: 65 20 6c 61 73 74 46 69 6e 64 54 79 70 65 3b 0d  e lastFindType;.
2640: 0a 0d 0a 43 56 74 61 62 49 6e 66 6f 2a 20 43 56  ...CVtabInfo* CV
2650: 74 61 62 49 6e 66 6f 3a 3a 74 61 62 49 6e 66 6f  tabInfo::tabInfo
2660: 46 6f 72 4e 61 6d 65 28 63 6f 6e 73 74 20 43 53  ForName(const CS
2670: 74 72 69 6e 67 26 20 73 74 72 55 73 65 72 4e 61  tring& strUserNa
2680: 6d 65 29 0d 0a 7b 0d 0a 09 73 74 61 74 69 63 20  me)..{...static 
2690: 66 69 72 73 74 5f 73 74 72 69 6e 67 5f 68 61 73  first_string_has
26a0: 68 20 66 73 68 28 28 6c 61 73 74 46 69 6e 64 54  h fsh((lastFindT
26b0: 79 70 65 2a 29 4e 55 4c 4c 29 3b 0d 0a 09 43 53  ype*)NULL);...CS
26c0: 74 72 69 6e 67 41 72 72 61 79 20 61 72 72 4f 66  tringArray arrOf
26d0: 4e 61 6d 65 73 3b 0d 0a 09 53 70 6c 69 74 53 74  Names;...SplitSt
26e0: 72 32 41 72 72 61 79 28 73 74 72 55 73 65 72 4e  r2Array(strUserN
26f0: 61 6d 65 2c 20 61 72 72 4f 66 4e 61 6d 65 73 29  ame, arrOfNames)
2700: 3b 0d 0a 09 69 66 28 21 61 72 72 4f 66 4e 61 6d  ;...if(!arrOfNam
2710: 65 73 2e 47 65 74 53 69 7a 65 28 29 29 0d 0a 09  es.GetSize())...
2720: 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09  .return NULL;...
2730: 69 6e 74 20 69 54 79 70 65 4e 75 6d 3b 0d 0a 09  int iTypeNum;...
2740: 69 66 28 21 66 73 68 2e 54 79 70 65 4e 75 6d 73  if(!fsh.TypeNums
2750: 2e 4c 6f 6f 6b 75 70 28 61 72 72 4f 66 4e 61 6d  .Lookup(arrOfNam
2760: 65 73 5b 30 5d 2c 20 69 54 79 70 65 4e 75 6d 29  es[0], iTypeNum)
2770: 29 0d 0a 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c  )....return NULL
2780: 3b 0d 0a 09 72 65 74 75 72 6e 20 5f 47 65 74 4f  ;...return _GetO
2790: 62 6a 65 63 74 3c 6c 61 73 74 46 69 6e 64 54 79  bject<lastFindTy
27a0: 70 65 3e 28 61 72 72 4f 66 4e 61 6d 65 73 2c 20  pe>(arrOfNames, 
27b0: 6d 5f 61 6c 6c 54 61 62 73 2c 20 69 54 79 70 65  m_allTabs, iType
27c0: 4e 75 6d 29 3b 0d 0a 7d 0d 0a 0d 0a 76 6f 69 64  Num);..}....void
27d0: 20 6f 6e 65 5f 66 69 65 6c 64 3a 3a 63 6f 6c 75   one_field::colu
27e0: 6d 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  mn(sqlite3_conte
27f0: 78 74 2a 20 70 43 74 78 2c 20 63 6f 6e 73 74 20  xt* pCtx, const 
2800: 63 75 72 73 6f 72 5f 64 61 74 61 26 20 63 75 72  cursor_data& cur
2810: 73 6f 72 2c 20 63 6f 6e 73 74 20 43 56 74 61 62  sor, const CVtab
2820: 49 6e 66 6f 26 20 74 61 62 6c 65 29 20 63 6f 6e  Info& table) con
2830: 73 74 0d 0a 7b 0d 0a 09 73 74 61 74 69 63 20 43  st..{...static C
2840: 53 74 72 69 6e 67 20 76 61 6c 3b 0d 0a 09 69 66  String val;...if
2850: 28 69 73 46 69 65 6c 64 28 29 29 0d 0a 09 7b 0d  (isField())...{.
2860: 0a 09 09 63 6f 6e 73 74 20 66 69 65 6c 64 5f 69  ...const field_i
2870: 6e 66 6f 26 20 66 69 20 3d 20 74 61 62 6c 65 2e  nfo& fi = table.
2880: 70 68 69 73 49 6e 66 6f 28 29 2e 66 69 65 6c 64  phisInfo().field
2890: 28 70 6f 73 69 74 69 6f 6e 29 3b 0d 0a 09 09 6d  (position);....m
28a0: 65 6d 63 70 79 28 76 61 6c 2e 47 65 74 42 75 66  emcpy(val.GetBuf
28b0: 66 65 72 53 65 74 4c 65 6e 67 74 68 28 66 69 2e  ferSetLength(fi.
28c0: 6c 65 6e 67 74 68 28 29 29 2c 20 63 75 72 73 6f  length()), curso
28d0: 72 2e 72 65 63 6f 72 64 2e 62 75 66 65 72 28 29  r.record.bufer()
28e0: 20 2b 20 66 69 2e 6f 66 66 73 65 74 49 6e 52 65   + fi.offsetInRe
28f0: 63 6f 72 64 28 29 2c 20 66 69 2e 6c 65 6e 67 74  cord(), fi.lengt
2900: 68 28 29 29 3b 0d 0a 09 09 69 66 28 66 69 2e 74  h());....if(fi.t
2910: 79 70 65 28 29 20 3d 3d 20 66 69 65 6c 64 5f 69  ype() == field_i
2920: 6e 66 6f 3a 3a 66 74 4e 75 6d 65 72 69 63 29 0d  nfo::ftNumeric).
2930: 0a 09 09 7b 0d 0a 09 09 09 69 66 28 66 69 2e 70  ...{.....if(fi.p
2940: 72 65 63 65 73 73 69 6f 6e 28 29 29 0d 0a 09 09  recession())....
2950: 09 09 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  ..sqlite3_result
2960: 5f 64 6f 75 62 6c 65 28 70 43 74 78 2c 20 61 74  _double(pCtx, at
2970: 6f 66 28 76 61 6c 29 29 3b 0d 0a 09 09 09 65 6c  of(val));.....el
2980: 73 65 0d 0a 09 09 09 09 73 71 6c 69 74 65 33 5f  se......sqlite3_
2990: 72 65 73 75 6c 74 5f 69 6e 74 28 70 43 74 78 2c  result_int(pCtx,
29a0: 20 61 74 6f 6c 28 76 61 6c 29 29 3b 0d 0a 09 09   atol(val));....
29b0: 7d 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a  }....else....{..
29c0: 09 09 09 75 38 74 65 78 74 3a 3a 74 6f 55 74 66  ...u8text::toUtf
29d0: 38 28 76 61 6c 29 3b 0d 0a 09 09 09 73 71 6c 69  8(val);.....sqli
29e0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
29f0: 70 43 74 78 2c 20 76 61 6c 2c 20 76 61 6c 2e 47  pCtx, val, val.G
2a00: 65 74 4c 65 6e 67 74 68 28 29 2c 20 53 51 4c 49  etLength(), SQLI
2a10: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0d 0a  TE_TRANSIENT);..
2a20: 09 09 7d 0d 0a 09 7d 0d 0a 09 65 6c 73 65 20 69  ..}...}...else i
2a30: 66 28 69 73 49 6e 64 65 78 28 29 29 0d 0a 09 7b  f(isIndex())...{
2a40: 0d 0a 09 09 63 6f 6e 73 74 20 69 6e 64 65 78 5f  ....const index_
2a50: 69 6e 66 6f 2a 20 70 49 6e 64 65 78 49 6e 66 6f  info* pIndexInfo
2a60: 20 3d 20 74 61 62 6c 65 2e 70 68 69 73 49 6e 66   = table.phisInf
2a70: 6f 28 29 2e 69 6e 64 65 78 28 70 6f 73 69 74 69  o().index(positi
2a80: 6f 6e 29 3b 0d 0a 09 09 4c 50 53 54 52 20 70 57  on);....LPSTR pW
2a90: 72 69 74 65 20 3d 20 76 61 6c 2e 47 65 74 42 75  rite = val.GetBu
2aa0: 66 66 65 72 53 65 74 4c 65 6e 67 74 68 28 70 49  fferSetLength(pI
2ab0: 6e 64 65 78 49 6e 66 6f 2d 3e 6b 65 79 53 69 7a  ndexInfo->keySiz
2ac0: 65 28 29 20 2b 20 31 30 29 3b 0d 0a 09 09 63 6f  e() + 10);....co
2ad0: 6e 73 74 20 69 64 78 5f 66 69 65 6c 64 5f 69 6e  nst idx_field_in
2ae0: 66 6f 2a 20 70 46 69 65 6c 64 49 6e 66 6f 20 3d  fo* pFieldInfo =
2af0: 20 70 49 6e 64 65 78 49 6e 66 6f 2d 3e 66 69 65   pIndexInfo->fie
2b00: 6c 64 73 28 29 3b 0d 0a 09 09 66 6f 72 28 44 57  lds();....for(DW
2b10: 4f 52 44 20 63 20 3d 20 70 49 6e 64 65 78 49 6e  ORD c = pIndexIn
2b20: 66 6f 2d 3e 66 69 65 6c 64 73 43 6f 75 6e 74 28  fo->fieldsCount(
2b30: 29 3b 20 63 2d 2d 3b 29 0d 0a 09 09 7b 0d 0a 09  ); c--;)....{...
2b40: 09 09 69 6e 74 20 6c 65 6e 20 3d 20 70 46 69 65  ..int len = pFie
2b50: 6c 64 49 6e 66 6f 2d 3e 69 6e 66 6f 28 29 2e 6c  ldInfo->info().l
2b60: 65 6e 67 74 68 28 29 3b 0d 0a 09 09 09 6d 65 6d  ength();.....mem
2b70: 63 70 79 28 70 57 72 69 74 65 2c 20 63 75 72 73  cpy(pWrite, curs
2b80: 6f 72 2e 72 65 63 6f 72 64 2e 62 75 66 65 72 28  or.record.bufer(
2b90: 29 20 2b 20 70 46 69 65 6c 64 49 6e 66 6f 2d 3e  ) + pFieldInfo->
2ba0: 69 6e 66 6f 28 29 2e 6f 66 66 73 65 74 49 6e 52  info().offsetInR
2bb0: 65 63 6f 72 64 28 29 2c 20 6c 65 6e 29 3b 0d 0a  ecord(), len);..
2bc0: 09 09 09 70 57 72 69 74 65 20 2b 3d 20 6c 65 6e  ...pWrite += len
2bd0: 3b 0d 0a 09 09 09 70 46 69 65 6c 64 49 6e 66 6f  ;.....pFieldInfo
2be0: 2b 2b 3b 0d 0a 09 09 7d 0d 0a 09 09 70 57 72 69  ++;....}....pWri
2bf0: 74 65 20 2b 3d 20 39 3b 0d 0a 09 09 6c 6f 6e 67  te += 9;....long
2c00: 20 76 20 3d 20 63 75 72 73 6f 72 2e 73 74 6f 72   v = cursor.stor
2c10: 65 2e 6d 5f 70 6f 73 3b 0d 0a 09 09 66 6f 72 28  e.m_pos;....for(
2c20: 63 20 3d 20 31 30 3b 20 63 2d 2d 3b 20 70 57 72  c = 10; c--; pWr
2c30: 69 74 65 2d 2d 29 0d 0a 09 09 7b 0d 0a 09 09 09  ite--)....{.....
2c40: 69 66 28 76 29 0d 0a 09 09 09 7b 0d 0a 09 09 09  if(v).....{.....
2c50: 09 2a 70 57 72 69 74 65 20 3d 20 28 76 20 25 20  .*pWrite = (v % 
2c60: 31 30 29 20 2b 20 27 30 27 3b 0d 0a 09 09 09 09  10) + '0';......
2c70: 76 20 2f 3d 20 31 30 3b 0d 0a 09 09 09 7d 0d 0a  v /= 10;.....}..
2c80: 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 2a 70 57  ...else......*pW
2c90: 72 69 74 65 20 3d 20 27 20 27 3b 0d 0a 09 09 7d  rite = ' ';....}
2ca0: 0d 0a 09 09 75 38 74 65 78 74 3a 3a 74 6f 55 74  ....u8text::toUt
2cb0: 66 38 28 76 61 6c 29 3b 0d 0a 09 09 73 71 6c 69  f8(val);....sqli
2cc0: 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28  te3_result_text(
2cd0: 70 43 74 78 2c 20 76 61 6c 2c 20 76 61 6c 2e 47  pCtx, val, val.G
2ce0: 65 74 4c 65 6e 67 74 68 28 29 2c 20 53 51 4c 49  etLength(), SQLI
2cf0: 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0d 0a  TE_TRANSIENT);..
2d00: 09 7d 0d 0a 09 65 6c 73 65 20 69 66 28 69 73 4c  .}...else if(isL
2d10: 6e 53 74 72 28 29 29 0d 0a 09 7b 0d 0a 09 09 4c  nStr())...{....L
2d20: 6f 6e 67 53 74 72 52 65 61 64 65 72 3a 3a 67 65  ongStrReader::ge
2d30: 74 28 29 2e 52 65 61 64 53 74 72 28 63 75 72 73  t().ReadStr(curs
2d40: 6f 72 2e 72 65 63 6f 72 64 2e 62 75 66 65 72 28  or.record.bufer(
2d50: 29 2c 20 70 6f 73 69 74 69 6f 6e 2c 20 76 61 6c  ), position, val
2d60: 29 3b 0d 0a 09 09 75 38 74 65 78 74 3a 3a 74 6f  );....u8text::to
2d70: 55 74 66 38 28 76 61 6c 29 3b 0d 0a 09 09 73 71  Utf8(val);....sq
2d80: 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 74 65 78  lite3_result_tex
2d90: 74 28 70 43 74 78 2c 20 76 61 6c 2c 20 76 61 6c  t(pCtx, val, val
2da0: 2e 47 65 74 4c 65 6e 67 74 68 28 29 2c 20 53 51  .GetLength(), SQ
2db0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
2dc0: 0d 0a 09 7d 0d 0a 09 65 6c 73 65 0d 0a 09 09 73  ...}...else....s
2dd0: 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75  qlite3_result_nu
2de0: 6c 6c 28 70 43 74 78 29 3b 0d 0a 7d 0d 0a        ll(pCtx);..}..