Hex Artifact Content Вы: nobody
Вход

Artifact db331eb73ffa25a169c5bba5ff1685edaad000a9:


0000: 2f 2f 20 70 68 69 73 69 63 61 6c 69 6e 66 6f 2e  // phisicalinfo.
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 70 68 69 73 69 63 61 6c 69 6e 66 6f  de "phisicalinfo
0040: 2e 68 22 0d 0a 0d 0a 70 68 69 73 69 63 61 6c 5f  .h"....phisical_
0050: 69 6e 66 6f 2a 20 70 68 69 73 69 63 61 6c 5f 69  info* phisical_i
0060: 6e 66 6f 3a 3a 62 75 69 6c 64 49 6e 66 6f 28 43  nfo::buildInfo(C
0070: 54 61 62 6c 65 45 78 2a 20 70 54 61 62 6c 65 29  TableEx* pTable)
0080: 0d 0a 7b 0d 0a 09 44 57 4f 52 44 20 6e 46 69 65  ..{...DWORD nFie
0090: 6c 64 73 20 3d 20 70 54 61 62 6c 65 2d 3e 66 69  lds = pTable->fi
00a0: 65 6c 64 73 43 6f 75 6e 74 28 29 2c 0d 0a 09 09  eldsCount(),....
00b0: 6e 49 6e 64 65 78 65 73 20 3d 20 70 54 61 62 6c  nIndexes = pTabl
00c0: 65 2d 3e 69 6e 64 65 78 65 73 43 6f 75 6e 74 28  e->indexesCount(
00d0: 29 3b 09 0d 0a 0d 0a 09 73 74 72 75 63 74 20 66  );......struct f
00e0: 69 65 6c 64 5f 73 74 6f 72 65 0d 0a 09 7b 0d 0a  ield_store...{..
00f0: 09 09 66 69 65 6c 64 5f 69 6e 66 6f 20 69 6e 66  ..field_info inf
0100: 6f 3b 0d 0a 09 09 43 53 74 72 69 6e 67 20 6e 61  o;....CString na
0110: 6d 65 3b 0d 0a 09 09 0d 0a 09 09 43 44 57 6f 72  me;........CDWor
0120: 64 41 72 72 61 79 20 69 6e 49 6e 64 65 78 65 73  dArray inIndexes
0130: 50 6f 73 3b 0d 0a 09 09 76 6f 69 64 20 6d 61 72  Pos;....void mar
0140: 6b 55 73 65 49 6e 49 6e 64 65 78 28 44 57 4f 52  kUseInIndex(DWOR
0150: 44 20 69 49 64 78 2c 20 44 57 4f 52 44 20 69 4e  D iIdx, DWORD iN
0160: 75 6d 49 6e 49 64 78 29 0d 0a 09 09 7b 0d 0a 09  umInIdx)....{...
0170: 09 09 69 6e 49 6e 64 65 78 65 73 50 6f 73 2e 41  ..inIndexesPos.A
0180: 64 64 28 4d 41 4b 45 4c 4f 4e 47 28 69 49 64 78  dd(MAKELONG(iIdx
0190: 2c 20 69 4e 75 6d 49 6e 49 64 78 29 29 3b 0d 0a  , iNumInIdx));..
01a0: 09 09 7d 0d 0a 09 7d 3b 0d 0a 09 0d 0a 09 73 74  ..}...};......st
01b0: 72 75 63 74 20 69 6e 64 65 78 5f 73 74 6f 72 65  ruct index_store
01c0: 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 44 20 6b 65  ...{....DWORD ke
01d0: 79 53 69 7a 65 3b 0d 0a 09 09 43 44 57 6f 72 64  ySize;....CDWord
01e0: 41 72 72 61 79 20 69 6e 63 6c 75 64 65 64 46 69  Array includedFi
01f0: 65 6c 64 73 3b 0d 0a 09 09 76 6f 69 64 20 73 65  elds;....void se
0200: 74 55 73 65 46 69 65 6c 64 28 44 57 4f 52 44 20  tUseField(DWORD 
0210: 6e 75 6d 2c 20 44 57 4f 52 44 20 66 6c 64 4e 75  num, DWORD fldNu
0220: 6d 2c 20 44 57 4f 52 44 20 66 6c 64 53 69 7a 65  m, DWORD fldSize
0230: 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 6e 63 6c 75  )....{.....inclu
0240: 64 65 64 46 69 65 6c 64 73 5b 6e 75 6d 5d 20 3d  dedFields[num] =
0250: 20 66 6c 64 4e 75 6d 3b 0d 0a 09 09 09 6b 65 79   fldNum;.....key
0260: 53 69 7a 65 20 2b 3d 20 66 6c 64 53 69 7a 65 3b  Size += fldSize;
0270: 0d 0a 09 09 7d 0d 0a 09 7d 3b 0d 0a 0d 0a 09 66  ....}...};.....f
0280: 69 65 6c 64 5f 73 74 6f 72 65 2a 20 70 46 69 65  ield_store* pFie
0290: 6c 64 53 74 6f 72 65 20 3d 20 6e 65 77 20 66 69  ldStore = new fi
02a0: 65 6c 64 5f 73 74 6f 72 65 5b 6e 46 69 65 6c 64  eld_store[nField
02b0: 73 5d 3b 0d 0a 09 69 6e 64 65 78 5f 73 74 6f 72  s];...index_stor
02c0: 65 2a 20 70 49 6e 64 65 78 53 74 6f 72 65 20 3d  e* pIndexStore =
02d0: 20 6e 65 77 20 69 6e 64 65 78 5f 73 74 6f 72 65   new index_store
02e0: 5b 6e 49 6e 64 65 78 65 73 5d 3b 0d 0a 0d 0a 09  [nIndexes];.....
02f0: 43 4e 6f 43 61 73 65 4d 61 70 3c 44 57 4f 52 44  CNoCaseMap<DWORD
0300: 3e 20 66 69 65 6c 64 4e 61 6d 65 73 3b 0d 0a 0d  > fieldNames;...
0310: 0a 09 2f 2f 20 ce e1 f5 ee e4 e8 ec 20 ef ee eb  ..// ....... ...
0320: ff 2e 0d 0a 09 44 57 4f 52 44 20 72 65 63 53 69  .....DWORD recSi
0330: 7a 65 20 3d 20 30 3b 0d 0a 09 66 6f 72 28 44 57  ze = 0;...for(DW
0340: 4f 52 44 20 69 20 3d 20 30 3b 20 69 3c 6e 46 69  ORD i = 0; i<nFi
0350: 65 6c 64 73 20 3b 20 69 2b 2b 29 0d 0a 09 7b 0d  elds ; i++)...{.
0360: 0a 09 09 43 46 69 65 6c 64 2a 20 70 46 69 65 6c  ...CField* pFiel
0370: 64 20 3d 20 70 54 61 62 6c 65 2d 3e 66 69 65 6c  d = pTable->fiel
0380: 64 28 69 29 3b 0d 0a 09 09 70 46 69 65 6c 64 53  d(i);....pFieldS
0390: 74 6f 72 65 5b 69 5d 2e 6e 61 6d 65 20 3d 20 70  tore[i].name = p
03a0: 46 69 65 6c 64 2d 3e 73 7a 4e 61 6d 65 3b 0d 0a  Field->szName;..
03b0: 09 09 70 46 69 65 6c 64 53 74 6f 72 65 5b 69 5d  ..pFieldStore[i]
03c0: 2e 69 6e 66 6f 2e 6c 20 3d 20 70 46 69 65 6c 64  .info.l = pField
03d0: 2d 3e 73 69 7a 65 43 46 69 65 6c 64 3b 0d 0a 09  ->sizeCField;...
03e0: 09 70 46 69 65 6c 64 53 74 6f 72 65 5b 69 5d 2e  .pFieldStore[i].
03f0: 69 6e 66 6f 2e 70 20 3d 20 70 46 69 65 6c 64 2d  info.p = pField-
0400: 3e 70 72 65 63 43 46 69 65 6c 64 3b 0d 0a 09 09  >precCField;....
0410: 70 46 69 65 6c 64 53 74 6f 72 65 5b 69 5d 2e 69  pFieldStore[i].i
0420: 6e 66 6f 2e 6f 20 3d 20 70 54 61 62 6c 65 2d 3e  nfo.o = pTable->
0430: 70 5f 31 43 2d 3e 66 69 65 6c 64 73 5b 69 5d 2d  p_1C->fields[i]-
0440: 3e 6f 66 66 73 65 74 49 6e 52 65 63 20 2d 20 31  >offsetInRec - 1
0450: 3b 0d 0a 09 09 69 66 28 32 20 3d 3d 20 70 46 69  ;....if(2 == pFi
0460: 65 6c 64 2d 3e 54 79 70 65 43 46 69 65 6c 64 29  eld->TypeCField)
0470: 09 2f 2f 20 4e 75 6d 65 72 69 63 0d 0a 09 09 09  .// Numeric.....
0480: 70 46 69 65 6c 64 53 74 6f 72 65 5b 69 5d 2e 69  pFieldStore[i].i
0490: 6e 66 6f 2e 74 20 3d 20 66 69 65 6c 64 5f 69 6e  nfo.t = field_in
04a0: 66 6f 3a 3a 66 74 4e 75 6d 65 72 69 63 3b 0d 0a  fo::ftNumeric;..
04b0: 09 09 65 6c 73 65 0d 0a 09 09 09 70 46 69 65 6c  ..else.....pFiel
04c0: 64 53 74 6f 72 65 5b 69 5d 2e 69 6e 66 6f 2e 74  dStore[i].info.t
04d0: 20 3d 20 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 66   = field_info::f
04e0: 74 54 65 78 74 3b 0d 0a 09 09 72 65 63 53 69 7a  tText;....recSiz
04f0: 65 20 2b 3d 20 70 46 69 65 6c 64 2d 3e 73 69 7a  e += pField->siz
0500: 65 43 46 69 65 6c 64 3b 0d 0a 09 09 0d 0a 09 09  eCField;........
0510: 66 69 65 6c 64 4e 61 6d 65 73 5b 70 46 69 65 6c  fieldNames[pFiel
0520: 64 2d 3e 73 7a 4e 61 6d 65 5d 20 3d 20 69 3b 0d  d->szName] = i;.
0530: 0a 09 7d 0d 0a 09 2f 2f 20 ce e1 f5 ee e4 e8 ec  ..}...// .......
0540: 20 e8 ed e4 e5 ea f1 fb 2e 0d 0a 09 44 57 4f 52   ...........DWOR
0550: 44 20 6e 65 65 64 53 69 7a 65 20 3d 20 73 69 7a  D needSize = siz
0560: 65 6f 66 28 70 68 69 73 69 63 61 6c 5f 69 6e 66  eof(phisical_inf
0570: 6f 29 20 2d 20 73 69 7a 65 6f 66 28 66 69 65 6c  o) - sizeof(fiel
0580: 64 5f 69 6e 66 6f 29 20 2b 0d 0a 09 09 6e 46 69  d_info) +....nFi
0590: 65 6c 64 73 20 2a 20 73 69 7a 65 6f 66 28 66 69  elds * sizeof(fi
05a0: 65 6c 64 5f 69 6e 66 6f 29 20 2b 09 2f 2f 20 66  eld_info) +.// f
05b0: 69 65 6c 64 5f 69 6e 66 6f 73 0d 0a 09 09 6e 46  ield_infos....nF
05c0: 69 65 6c 64 73 20 2a 20 73 69 7a 65 6f 66 28 44  ields * sizeof(D
05d0: 57 4f 52 44 29 20 2b 09 09 2f 2f 20 6f 66 66 73  WORD) +..// offs
05e0: 65 74 73 20 6f 66 20 66 6c 64 32 69 64 78 20 64  ets of fld2idx d
05f0: 61 74 61 0d 0a 09 09 6e 49 6e 64 65 78 65 73 20  ata....nIndexes 
0600: 2a 20 73 69 7a 65 6f 66 28 69 6e 64 65 78 5f 69  * sizeof(index_i
0610: 6e 66 6f 2a 2a 29 20 2b 0d 0a 09 09 6e 49 6e 64  nfo**) +....nInd
0620: 65 78 65 73 20 2a 20 28 73 69 7a 65 6f 66 28 69  exes * (sizeof(i
0630: 6e 64 65 78 5f 69 6e 66 6f 29 20 2d 20 73 69 7a  ndex_info) - siz
0640: 65 6f 66 28 69 64 78 5f 66 69 65 6c 64 5f 69 6e  eof(idx_field_in
0650: 66 6f 29 29 3b 0d 0a 09 69 6e 74 20 6b 20 3d 20  fo));...int k = 
0660: 30 3b 0d 0a 09 66 6f 72 28 69 20 3d 20 30 3b 20  0;...for(i = 0; 
0670: 69 20 3c 20 6e 49 6e 64 65 78 65 73 20 3b 20 69  i < nIndexes ; i
0680: 2b 2b 29 0d 0a 09 7b 0d 0a 09 09 43 49 6e 64 65  ++)...{....CInde
0690: 78 45 78 2a 20 70 49 64 78 20 3d 20 70 54 61 62  xEx* pIdx = pTab
06a0: 6c 65 2d 3e 69 6e 64 65 78 28 69 29 3b 0d 0a 09  le->index(i);...
06b0: 09 44 57 4f 52 44 20 63 6f 75 6e 74 46 69 65 6c  .DWORD countFiel
06c0: 64 73 20 3d 20 70 49 64 78 2d 3e 66 69 65 6c 64  ds = pIdx->field
06d0: 73 43 6f 75 6e 74 28 29 3b 0d 0a 09 09 70 49 6e  sCount();....pIn
06e0: 64 65 78 53 74 6f 72 65 5b 69 5d 2e 69 6e 63 6c  dexStore[i].incl
06f0: 75 64 65 64 46 69 65 6c 64 73 2e 53 65 74 53 69  udedFields.SetSi
0700: 7a 65 28 63 6f 75 6e 74 46 69 65 6c 64 73 29 3b  ze(countFields);
0710: 0d 0a 09 09 70 49 6e 64 65 78 53 74 6f 72 65 5b  ....pIndexStore[
0720: 69 5d 2e 6b 65 79 53 69 7a 65 20 3d 20 30 3b 0d  i].keySize = 0;.
0730: 0a 0d 0a 09 09 43 53 74 72 69 6e 67 41 72 72 61  .....CStringArra
0740: 79 20 73 75 62 45 78 70 72 65 73 73 69 6f 6e 73  y subExpressions
0750: 3b 0d 0a 09 09 53 70 6c 69 74 53 74 72 32 41 72  ;....SplitStr2Ar
0760: 72 61 79 28 70 49 64 78 2d 3e 70 5f 31 30 2d 3e  ray(pIdx->p_10->
0770: 73 7a 49 64 78 45 78 70 72 2c 20 73 75 62 45 78  szIdxExpr, subEx
0780: 70 72 65 73 73 69 6f 6e 73 2c 20 27 2b 27 29 3b  pressions, '+');
0790: 0d 0a 09 09 2f 2f 20 d1 ea ee eb fc ea ee 20 ef  ....// ....... .
07a0: ee ed e0 e4 ee e1 e8 f2 f1 ff 20 e4 ee ef ee eb  .......... .....
07b0: ed e8 f2 e5 eb fc ed ee e3 ee 20 ec e5 f1 f2 e0  .......... .....
07c0: 20 ef ee e4 20 ec e0 f1 f1 e8 e2 fb 0d 0a 09 09   ... ...........
07d0: 6e 65 65 64 53 69 7a 65 20 2b 3d 20 73 69 7a 65  needSize += size
07e0: 6f 66 28 69 64 78 5f 66 69 65 6c 64 5f 69 6e 66  of(idx_field_inf
07f0: 6f 29 20 2a 20 63 6f 75 6e 74 46 69 65 6c 64 73  o) * countFields
0800: 3b 09 2f 2f 20 cf ee e4 20 ea e0 e6 e4 ee e5 20  ;.// ... ...... 
0810: ef ee eb e5 20 e2 20 e8 ed e4 e5 ea f1 e5 0d 0a  .... . .........
0820: 09 09 6e 65 65 64 53 69 7a 65 20 2b 3d 20 73 69  ..needSize += si
0830: 7a 65 6f 66 28 44 57 4f 52 44 29 20 2a 20 63 6f  zeof(DWORD) * co
0840: 75 6e 74 46 69 65 6c 64 73 3b 09 09 2f 2f 20 cf  untFields;..// .
0850: ee e4 20 ea e0 e6 e4 ee e5 20 e2 f5 ee e6 e4 e5  .. ...... ......
0860: ed e8 e5 20 ef ee eb ff 20 e2 20 e8 ed e4 e5 ea  ... .... . .....
0870: f1 0d 0a 0d 0a 09 09 66 6f 72 28 44 57 4f 52 44  .......for(DWORD
0880: 20 6a 20 3d 20 30 3b 20 6a 20 3c 20 63 6f 75 6e   j = 0; j < coun
0890: 74 46 69 65 6c 64 73 20 3b 20 6a 2b 2b 29 0d 0a  tFields ; j++)..
08a0: 09 09 7b 0d 0a 09 09 09 43 46 69 65 6c 64 2a 20  ..{.....CField* 
08b0: 70 46 69 65 6c 64 20 3d 20 70 49 64 78 2d 3e 66  pField = pIdx->f
08c0: 69 65 6c 64 28 6a 29 3b 0d 0a 09 09 09 44 57 4f  ield(j);.....DWO
08d0: 52 44 20 66 69 65 6c 64 4e 75 6d 49 6e 54 61 62  RD fieldNumInTab
08e0: 6c 65 20 3d 20 66 69 65 6c 64 4e 61 6d 65 73 5b  le = fieldNames[
08f0: 70 46 69 65 6c 64 2d 3e 73 7a 4e 61 6d 65 5d 3b  pField->szName];
0900: 0d 0a 0d 0a 09 09 09 70 49 6e 64 65 78 53 74 6f  .......pIndexSto
0910: 72 65 5b 69 5d 2e 73 65 74 55 73 65 46 69 65 6c  re[i].setUseFiel
0920: 64 28 6a 2c 20 66 69 65 6c 64 4e 75 6d 49 6e 54  d(j, fieldNumInT
0930: 61 62 6c 65 2c 20 70 46 69 65 6c 64 2d 3e 73 69  able, pField->si
0940: 7a 65 43 46 69 65 6c 64 29 3b 0d 0a 09 09 09 70  zeCField);.....p
0950: 46 69 65 6c 64 53 74 6f 72 65 5b 66 69 65 6c 64  FieldStore[field
0960: 4e 75 6d 49 6e 54 61 62 6c 65 5d 2e 6d 61 72 6b  NumInTable].mark
0970: 55 73 65 49 6e 49 6e 64 65 78 28 69 2c 20 6a 29  UseInIndex(i, j)
0980: 3b 0d 0a 09 09 09 2f 2f 20 d2 e5 ef e5 f0 fc 20  ;.....// ...... 
0990: f3 f2 ee f7 ed e8 ec 20 f2 e8 ef 20 f1 f0 e0 e2  ....... ... ....
09a0: ed e5 ed e8 ff 0d 0a 09 09 09 69 66 28 33 20 3d  ..........if(3 =
09b0: 3d 20 70 46 69 65 6c 64 53 74 6f 72 65 5b 66 69  = pFieldStore[fi
09c0: 65 6c 64 4e 75 6d 49 6e 54 61 62 6c 65 5d 2e 69  eldNumInTable].i
09d0: 6e 66 6f 2e 74 29 09 2f 2f 20 cf ee eb e5 20 63  nfo.t).// .... c
09e0: 68 61 72 0d 0a 09 09 09 09 70 46 69 65 6c 64 53  har......pFieldS
09f0: 74 6f 72 65 5b 66 69 65 6c 64 4e 75 6d 49 6e 54  tore[fieldNumInT
0a00: 61 62 6c 65 5d 2e 69 6e 66 6f 2e 74 20 3d 20 66  able].info.t = f
0a10: 69 65 6c 64 5f 69 6e 66 6f 3a 3a 66 74 54 65 78  ield_info::ftTex
0a20: 74 3b 0d 0a 09 09 09 6b 2b 2b 3b 0d 0a 09 09 7d  t;.....k++;....}
0a30: 0d 0a 09 7d 0d 0a 09 0d 0a 09 2f 2f 20 d2 e5 ef  ...}......// ...
0a40: e5 f0 fc 20 e2 fb e4 e5 eb e8 ec 20 ed f3 e6 ed  ... ....... ....
0a50: ee e5 20 ec e5 f1 f2 ee 0d 0a 09 70 68 69 73 69  .. ........phisi
0a60: 63 61 6c 5f 69 6e 66 6f 2a 20 70 49 6e 66 6f 20  cal_info* pInfo 
0a70: 3d 20 28 70 68 69 73 69 63 61 6c 5f 69 6e 66 6f  = (phisical_info
0a80: 2a 29 6e 65 77 20 42 59 54 45 5b 6e 65 65 64 53  *)new BYTE[needS
0a90: 69 7a 65 5d 3b 0d 0a 09 2f 2f 20 c7 e0 ef ee eb  ize];...// .....
0aa0: ed e8 ec 20 f2 ee 20 f7 f2 ee 20 ed e0 e4 ee 0d  ... .. ... .....
0ab0: 0a 09 70 49 6e 66 6f 2d 3e 70 54 61 62 6c 65 42  ..pInfo->pTableB
0ac0: 75 66 20 3d 20 70 54 61 62 6c 65 2d 3e 72 65 63  uf = pTable->rec
0ad0: 6f 72 64 42 75 66 66 65 72 28 29 3b 0d 0a 09 70  ordBuffer();...p
0ae0: 49 6e 66 6f 2d 3e 72 65 63 53 69 7a 65 20 3d 20  Info->recSize = 
0af0: 72 65 63 53 69 7a 65 3b 0d 0a 09 70 49 6e 66 6f  recSize;...pInfo
0b00: 2d 3e 66 6c 64 43 6f 75 6e 74 20 3d 20 6e 46 69  ->fldCount = nFi
0b10: 65 6c 64 73 3b 0d 0a 09 70 49 6e 66 6f 2d 3e 69  elds;...pInfo->i
0b20: 64 78 43 6f 75 6e 74 20 3d 20 6e 49 6e 64 65 78  dxCount = nIndex
0b30: 65 73 3b 0d 0a 0d 0a 09 2f 2f 20 d1 ea ee ef e8  es;.....// .....
0b40: f0 f3 e5 ec 20 66 69 65 6c 64 5f 69 6e 66 6f 20  .... field_info 
0b50: e4 eb ff 20 ef ee eb e5 e9 20 f2 e0 e1 eb e8 f6  ... ..... ......
0b60: fb 0d 0a 09 66 6f 72 28 69 20 3d 20 30 3b 20 69  ....for(i = 0; i
0b70: 20 3c 20 6e 46 69 65 6c 64 73 3b 20 69 2b 2b 29   < nFields; i++)
0b80: 0d 0a 09 09 70 49 6e 66 6f 2d 3e 6d 5f 70 46 69  ....pInfo->m_pFi
0b90: 65 6c 64 73 5b 69 5d 20 3d 20 70 46 69 65 6c 64  elds[i] = pField
0ba0: 53 74 6f 72 65 5b 69 5d 2e 69 6e 66 6f 3b 0d 0a  Store[i].info;..
0bb0: 0d 0a 09 2f 2f 20 d2 e5 ef e5 f0 fc 20 e7 e0 ef  ...// ...... ...
0bc0: ee eb ed e8 ec 20 e2 f5 ee e4 e8 ec ee f1 f2 fc  ..... ..........
0bd0: 20 e2 20 e8 ed e4 e5 ea f1 fb 2e 0d 0a 09 70 49   . ...........pI
0be0: 6e 66 6f 2d 3e 6d 5f 70 46 69 65 6c 64 73 32 49  nfo->m_pFields2I
0bf0: 6e 64 65 78 20 3d 20 28 44 57 4f 52 44 2a 29 28  ndex = (DWORD*)(
0c00: 70 49 6e 66 6f 2d 3e 6d 5f 70 46 69 65 6c 64 73  pInfo->m_pFields
0c10: 20 2b 20 6e 46 69 65 6c 64 73 29 3b 0d 0a 09 44   + nFields);...D
0c20: 57 4f 52 44 2a 20 70 57 72 69 74 65 20 3d 20 70  WORD* pWrite = p
0c30: 49 6e 66 6f 2d 3e 6d 5f 70 46 69 65 6c 64 73 32  Info->m_pFields2
0c40: 49 6e 64 65 78 20 2b 20 6e 46 69 65 6c 64 73 3b  Index + nFields;
0c50: 0d 0a 09 44 57 4f 52 44 20 6f 66 66 73 65 74 20  ...DWORD offset 
0c60: 3d 20 70 57 72 69 74 65 20 2d 20 28 44 57 4f 52  = pWrite - (DWOR
0c70: 44 2a 29 70 49 6e 66 6f 2d 3e 6d 5f 70 46 69 65  D*)pInfo->m_pFie
0c80: 6c 64 73 3b 0d 0a 09 66 6f 72 28 69 20 3d 20 30  lds;...for(i = 0
0c90: 3b 20 69 20 3c 20 6e 46 69 65 6c 64 73 3b 20 69  ; i < nFields; i
0ca0: 2b 2b 29 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 44  ++)...{....DWORD
0cb0: 20 73 69 7a 65 20 3d 20 70 46 69 65 6c 64 53 74   size = pFieldSt
0cc0: 6f 72 65 5b 69 5d 2e 69 6e 49 6e 64 65 78 65 73  ore[i].inIndexes
0cd0: 50 6f 73 2e 47 65 74 53 69 7a 65 28 29 3b 0d 0a  Pos.GetSize();..
0ce0: 09 09 6d 65 6d 63 70 79 28 70 57 72 69 74 65 2c  ..memcpy(pWrite,
0cf0: 20 70 46 69 65 6c 64 53 74 6f 72 65 5b 69 5d 2e   pFieldStore[i].
0d00: 69 6e 49 6e 64 65 78 65 73 50 6f 73 2e 47 65 74  inIndexesPos.Get
0d10: 44 61 74 61 28 29 2c 20 73 69 7a 65 20 2a 20 73  Data(), size * s
0d20: 69 7a 65 6f 66 28 44 57 4f 52 44 29 29 3b 0d 0a  izeof(DWORD));..
0d30: 09 09 70 49 6e 66 6f 2d 3e 6d 5f 70 46 69 65 6c  ..pInfo->m_pFiel
0d40: 64 73 32 49 6e 64 65 78 5b 69 5d 20 3d 20 4d 41  ds2Index[i] = MA
0d50: 4b 45 4c 4f 4e 47 28 6f 66 66 73 65 74 2c 20 73  KELONG(offset, s
0d60: 69 7a 65 29 3b 0d 0a 09 09 6f 66 66 73 65 74 20  ize);....offset 
0d70: 2b 3d 20 73 69 7a 65 3b 0d 0a 09 09 70 57 72 69  += size;....pWri
0d80: 74 65 20 2b 3d 20 73 69 7a 65 3b 0d 0a 09 7d 0d  te += size;...}.
0d90: 0a 0d 0a 09 2f 2f 20 d2 e5 ef e5 f0 fc 20 e7 e0  ....// ...... ..
0da0: ef ee eb ed e8 ec 20 e8 ed f4 f3 20 ee e1 20 e8  ...... .... .. .
0db0: ed e4 e5 ea f1 e0 f5 0d 0a 09 70 49 6e 66 6f 2d  ..........pInfo-
0dc0: 3e 6d 5f 70 70 49 6e 64 65 78 65 73 20 3d 20 28  >m_ppIndexes = (
0dd0: 69 6e 64 65 78 5f 69 6e 66 6f 2a 2a 29 70 57 72  index_info**)pWr
0de0: 69 74 65 3b 0d 0a 09 69 6e 64 65 78 5f 69 6e 66  ite;...index_inf
0df0: 6f 2a 20 70 49 64 78 57 72 69 74 65 20 3d 20 28  o* pIdxWrite = (
0e00: 69 6e 64 65 78 5f 69 6e 66 6f 2a 29 28 70 49 6e  index_info*)(pIn
0e10: 66 6f 2d 3e 6d 5f 70 70 49 6e 64 65 78 65 73 20  fo->m_ppIndexes 
0e20: 2b 20 6e 49 6e 64 65 78 65 73 29 3b 0d 0a 09 66  + nIndexes);...f
0e30: 6f 72 28 69 20 3d 20 30 3b 20 69 20 3c 20 6e 49  or(i = 0; i < nI
0e40: 6e 64 65 78 65 73 3b 20 69 2b 2b 29 0d 0a 09 7b  ndexes; i++)...{
0e50: 0d 0a 09 09 70 49 6e 66 6f 2d 3e 6d 5f 70 70 49  ....pInfo->m_ppI
0e60: 6e 64 65 78 65 73 5b 69 5d 20 3d 20 70 49 64 78  ndexes[i] = pIdx
0e70: 57 72 69 74 65 3b 0d 0a 09 09 69 6e 74 20 63 6f  Write;....int co
0e80: 75 6e 74 46 69 65 6c 64 73 20 3d 20 70 49 6e 64  untFields = pInd
0e90: 65 78 53 74 6f 72 65 5b 69 5d 2e 69 6e 63 6c 75  exStore[i].inclu
0ea0: 64 65 64 46 69 65 6c 64 73 2e 47 65 74 53 69 7a  dedFields.GetSiz
0eb0: 65 28 29 3b 0d 0a 09 09 70 49 64 78 57 72 69 74  e();....pIdxWrit
0ec0: 65 2d 3e 63 20 3d 20 63 6f 75 6e 74 46 69 65 6c  e->c = countFiel
0ed0: 64 73 3b 0d 0a 09 09 70 49 64 78 57 72 69 74 65  ds;....pIdxWrite
0ee0: 2d 3e 73 20 3d 20 70 49 6e 64 65 78 53 74 6f 72  ->s = pIndexStor
0ef0: 65 5b 69 5d 2e 6b 65 79 53 69 7a 65 3b 0d 0a 09  e[i].keySize;...
0f00: 09 69 64 78 5f 66 69 65 6c 64 5f 69 6e 66 6f 2a  .idx_field_info*
0f10: 20 70 46 69 65 6c 64 20 3d 20 70 49 64 78 57 72   pField = pIdxWr
0f20: 69 74 65 2d 3e 66 69 3b 0d 0a 09 09 66 6f 72 28  ite->fi;....for(
0f30: 44 57 4f 52 44 20 6a 20 3d 20 30 3b 20 6a 20 3c  DWORD j = 0; j <
0f40: 20 63 6f 75 6e 74 46 69 65 6c 64 73 3b 20 6a 2b   countFields; j+
0f50: 2b 29 0d 0a 09 09 7b 0d 0a 09 09 09 70 46 69 65  +)....{.....pFie
0f60: 6c 64 2d 3e 64 77 4e 75 6d 49 6e 54 61 62 6c 65  ld->dwNumInTable
0f70: 20 3d 20 70 49 6e 64 65 78 53 74 6f 72 65 5b 69   = pIndexStore[i
0f80: 5d 2e 69 6e 63 6c 75 64 65 64 46 69 65 6c 64 73  ].includedFields
0f90: 5b 6a 5d 3b 0d 0a 09 09 09 70 46 69 65 6c 64 2d  [j];.....pField-
0fa0: 3e 66 49 6e 66 6f 20 3d 20 70 46 69 65 6c 64 53  >fInfo = pFieldS
0fb0: 74 6f 72 65 5b 70 46 69 65 6c 64 2d 3e 64 77 4e  tore[pField->dwN
0fc0: 75 6d 49 6e 54 61 62 6c 65 5d 2e 69 6e 66 6f 3b  umInTable].info;
0fd0: 0d 0a 09 09 09 70 46 69 65 6c 64 2b 2b 3b 0d 0a  .....pField++;..
0fe0: 09 09 7d 0d 0a 09 09 70 49 64 78 57 72 69 74 65  ..}....pIdxWrite
0ff0: 20 3d 20 28 69 6e 64 65 78 5f 69 6e 66 6f 2a 29   = (index_info*)
1000: 70 46 69 65 6c 64 3b 0d 0a 09 7d 0d 0a 09 64 65  pField;...}...de
1010: 6c 65 74 65 20 5b 5d 20 70 49 6e 64 65 78 53 74  lete [] pIndexSt
1020: 6f 72 65 3b 0d 0a 09 64 65 6c 65 74 65 20 5b 5d  ore;...delete []
1030: 20 70 46 69 65 6c 64 53 74 6f 72 65 3b 0d 0a 0d   pFieldStore;...
1040: 0a 09 72 65 74 75 72 6e 20 70 49 6e 66 6f 3b 0d  ..return pInfo;.
1050: 0a 7d 0d 0a 0d 0a                                .}....