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