0000: 2f 2f 20 66 69 6c 74 65 72 6d 61 63 68 69 6e 65 // filtermachine
0010: 2e 63 70 70 0d 0a 23 69 6e 63 6c 75 64 65 20 22 .cpp..#include "
0020: 53 74 64 41 66 78 2e 68 22 0d 0a 23 69 6e 63 6c StdAfx.h"..#incl
0030: 75 64 65 20 22 66 69 6c 74 65 72 6d 61 63 68 69 ude "filtermachi
0040: 6e 65 2e 68 22 0d 0a 23 69 6e 63 6c 75 64 65 20 ne.h"..#include
0050: 22 76 74 61 62 5f 69 6e 66 6f 2e 68 22 0d 0a 23 "vtab_info.h"..#
0060: 69 6e 63 6c 75 64 65 20 22 69 6e 64 65 78 5f 73 include "index_s
0070: 65 6c 65 63 74 6f 72 2e 68 22 0d 0a 23 69 6e 63 elector.h"..#inc
0080: 6c 75 64 65 20 22 75 74 65 78 2e 68 22 0d 0a 23 lude "utex.h"..#
0090: 69 6e 63 6c 75 64 65 20 22 6c 6f 6e 67 73 74 72 include "longstr
00a0: 72 65 61 64 65 72 2e 68 22 0d 0a 0d 0a 73 74 61 reader.h"....sta
00b0: 74 69 63 20 43 4e 75 6d 65 72 69 63 20 73 74 61 tic CNumeric sta
00c0: 74 69 63 4e 75 6d 56 61 6c 75 65 3b 0d 0a 0d 0a ticNumValue;....
00d0: 69 6e 6c 69 6e 65 20 76 6f 69 64 20 77 72 69 74 inline void writ
00e0: 65 4e 75 6d 28 75 6e 73 69 67 6e 65 64 20 63 68 eNum(unsigned ch
00f0: 61 72 2a 26 20 70 74 72 2c 20 57 4f 52 44 20 76 ar*& ptr, WORD v
0100: 61 6c 29 0d 0a 7b 0d 0a 09 2a 28 57 4f 52 44 2a al)..{...*(WORD*
0110: 29 70 74 72 20 3d 20 76 61 6c 3b 0d 0a 09 70 74 )ptr = val;...pt
0120: 72 20 2b 3d 20 32 3b 0d 0a 7d 0d 0a 0d 0a 69 6e r += 2;..}....in
0130: 6c 69 6e 65 20 44 57 4f 52 44 20 72 65 61 64 4e line DWORD readN
0140: 75 6d 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 um(const unsigne
0150: 64 20 63 68 61 72 2a 26 20 70 74 72 29 0d 0a 7b d char*& ptr)..{
0160: 0d 0a 09 57 4f 52 44 20 76 61 6c 20 3d 20 2a 28 ...WORD val = *(
0170: 57 4f 52 44 2a 29 70 74 72 3b 0d 0a 09 70 74 72 WORD*)ptr;...ptr
0180: 20 2b 3d 20 32 3b 0d 0a 09 72 65 74 75 72 6e 20 += 2;...return
0190: 76 61 6c 3b 0d 0a 7d 0d 0a 0d 0a 73 74 72 75 63 val;..}....struc
01a0: 74 20 74 65 78 74 5f 63 6f 6d 70 61 72 65 0d 0a t text_compare..
01b0: 7b 0d 0a 09 73 74 61 74 69 63 20 69 6e 74 20 63 {...static int c
01c0: 6f 6d 70 61 72 65 28 4c 50 43 53 54 52 20 73 74 ompare(LPCSTR st
01d0: 72 2c 20 4c 50 43 53 54 52 20 70 46 69 65 6c 64 r, LPCSTR pField
01e0: 42 75 66 2c 20 44 57 4f 52 44 20 64 77 46 69 65 Buf, DWORD dwFie
01f0: 6c 64 4c 65 6e 29 0d 0a 09 7b 0d 0a 09 09 72 65 ldLen)...{....re
0200: 74 75 72 6e 20 75 38 74 65 78 74 3a 3a 63 6f 6d turn u8text::com
0210: 70 61 72 65 4c 65 6e 28 73 74 72 2c 20 70 46 69 pareLen(str, pFi
0220: 65 6c 64 42 75 66 2c 20 64 77 46 69 65 6c 64 4c eldBuf, dwFieldL
0230: 65 6e 29 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a en);...}..};....
0240: 73 74 72 75 63 74 20 74 65 78 74 5f 6e 6f 63 61 struct text_noca
0250: 73 65 5f 63 6f 6d 70 61 72 65 0d 0a 7b 0d 0a 09 se_compare..{...
0260: 73 74 61 74 69 63 20 69 6e 74 20 63 6f 6d 70 61 static int compa
0270: 72 65 28 4c 50 43 53 54 52 20 73 74 72 2c 20 4c re(LPCSTR str, L
0280: 50 43 53 54 52 20 70 46 69 65 6c 64 42 75 66 2c PCSTR pFieldBuf,
0290: 20 44 57 4f 52 44 20 64 77 46 69 65 6c 64 4c 65 DWORD dwFieldLe
02a0: 6e 29 0d 0a 09 7b 0d 0a 09 09 72 65 74 75 72 6e n)...{....return
02b0: 20 75 38 74 65 78 74 3a 3a 63 6f 6d 70 61 72 65 u8text::compare
02c0: 4e 6f 43 61 73 65 4c 65 6e 28 73 74 72 2c 20 70 NoCaseLen(str, p
02d0: 46 69 65 6c 64 42 75 66 2c 20 64 77 46 69 65 6c FieldBuf, dwFiel
02e0: 64 4c 65 6e 29 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a dLen);...}..};..
02f0: 0d 0a 73 74 72 75 63 74 20 6e 75 6d 65 72 69 63 ..struct numeric
0300: 5f 63 6f 6d 70 61 72 65 0d 0a 7b 0d 0a 09 73 74 _compare..{...st
0310: 61 74 69 63 20 69 6e 74 20 63 6f 6d 70 61 72 65 atic int compare
0320: 28 4c 50 43 53 54 52 20 70 4e 75 6d 2c 20 4c 50 (LPCSTR pNum, LP
0330: 43 53 54 52 20 70 46 69 65 6c 64 42 75 66 2c 20 CSTR pFieldBuf,
0340: 44 57 4f 52 44 20 64 77 46 69 65 6c 64 4c 65 6e DWORD dwFieldLen
0350: 29 0d 0a 09 7b 0d 0a 09 09 42 4f 4f 4c 20 62 6f )...{....BOOL bo
0360: 74 68 4e 65 67 61 74 65 20 3d 20 46 41 4c 53 45 thNegate = FALSE
0370: 3b 0d 0a 09 09 77 68 69 6c 65 28 64 77 46 69 65 ;....while(dwFie
0380: 6c 64 4c 65 6e 2d 2d 29 0d 0a 09 09 7b 0d 0a 09 ldLen--)....{...
0390: 09 09 69 6e 74 20 6e 75 6d 53 79 6d 62 20 3d 20 ..int numSymb =
03a0: 73 74 61 74 69 63 5f 63 61 73 74 3c 44 57 4f 52 static_cast<DWOR
03b0: 44 3e 28 73 74 61 74 69 63 5f 63 61 73 74 3c 42 D>(static_cast<B
03c0: 59 54 45 3e 28 2a 70 4e 75 6d 29 29 3b 0d 0a 09 YTE>(*pNum));...
03d0: 09 09 69 6e 74 20 76 61 6c 53 79 6d 62 20 3d 20 ..int valSymb =
03e0: 73 74 61 74 69 63 5f 63 61 73 74 3c 44 57 4f 52 static_cast<DWOR
03f0: 44 3e 28 73 74 61 74 69 63 5f 63 61 73 74 3c 42 D>(static_cast<B
0400: 59 54 45 3e 28 2a 70 46 69 65 6c 64 42 75 66 29 YTE>(*pFieldBuf)
0410: 29 3b 0d 0a 09 09 09 69 6e 74 20 64 69 66 20 3d );.....int dif =
0420: 20 6e 75 6d 53 79 6d 62 20 2d 20 76 61 6c 53 79 numSymb - valSy
0430: 6d 62 3b 0d 0a 09 09 09 0d 0a 09 09 09 69 66 28 mb;..........if(
0440: 64 69 66 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 dif).....{......
0450: 69 66 28 27 2d 27 20 3d 3d 20 6e 75 6d 53 79 6d if('-' == numSym
0460: 62 29 09 09 2f 2f 20 cf e5 f0 e2 ee e5 20 f7 e8 b)..// ...... ..
0470: f1 eb ee 20 ee f2 f0 e8 f6 e0 f2 e5 eb fc ed ee ... ............
0480: 2c 20 e8 20 e7 ed e0 f7 e8 f2 20 ec e5 ed fc f8 , . ...... .....
0490: e5 0d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 2d ........return -
04a0: 31 3b 0d 0a 09 09 09 09 65 6c 73 65 20 69 66 28 1;......else if(
04b0: 27 2d 27 20 3d 3d 20 76 61 6c 53 79 6d 62 29 20 '-' == valSymb)
04c0: 2f 2f 20 c2 f2 ee f0 ee e5 20 f7 e8 f1 eb ee 20 // ...... .....
04d0: ee f2 f0 e8 f6 e0 f2 e5 eb fc ed ee 2c 20 e7 ed ............, ..
04e0: e0 f7 e8 f2 20 ef e5 f0 e2 ee e5 20 e1 ee eb fc .... ...... ....
04f0: f8 e5 0d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 .........return
0500: 31 3b 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 1;......else....
0510: 09 09 09 72 65 74 75 72 6e 20 62 6f 74 68 4e 65 ...return bothNe
0520: 67 61 74 65 20 3f 20 2d 64 69 66 20 3a 20 64 69 gate ? -dif : di
0530: 66 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 f;.....}.....els
0540: 65 20 69 66 28 27 2d 27 20 3d 3d 20 6e 75 6d 53 e if('-' == numS
0550: 79 6d 62 29 0d 0a 09 09 09 09 62 6f 74 68 4e 65 ymb)......bothNe
0560: 67 61 74 65 20 3d 20 54 52 55 45 3b 0d 0a 09 09 gate = TRUE;....
0570: 09 70 4e 75 6d 2b 2b 2c 20 70 46 69 65 6c 64 42 .pNum++, pFieldB
0580: 75 66 2b 2b 3b 0d 0a 09 09 7d 0d 0a 09 09 72 65 uf++;....}....re
0590: 74 75 72 6e 20 30 3b 0d 0a 09 7d 0d 0a 7d 3b 0d turn 0;...}..};.
05a0: 0a 0d 0a 74 65 6d 70 6c 61 74 65 3c 54 65 73 74 ...template<Test
05b0: 4f 70 20 4f 70 2c 20 74 79 70 65 6e 61 6d 65 20 Op Op, typename
05c0: 54 3e 0d 0a 73 74 72 75 63 74 20 74 63 54 65 73 T>..struct tcTes
05d0: 74 46 69 65 6c 64 20 3a 20 70 75 62 6c 69 63 20 tField : public
05e0: 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 0d 0a testConstraint..
05f0: 7b 0d 0a 09 74 63 54 65 73 74 46 69 65 6c 64 28 {...tcTestField(
0600: 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 2a 26 testConstraint*&
0610: 20 70 2c 20 63 6f 6e 73 74 20 43 53 74 72 69 6e p, const CStrin
0620: 67 26 20 74 2c 20 63 6f 6e 73 74 20 66 69 65 6c g& t, const fiel
0630: 64 5f 69 6e 66 6f 26 20 66 69 29 0d 0a 09 09 3a d_info& fi)....:
0640: 20 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 28 testConstraint(
0650: 70 29 2c 20 6d 5f 76 61 6c 75 65 28 74 29 2c 20 p), m_value(t),
0660: 6d 5f 66 4f 66 66 73 65 74 28 66 69 2e 6f 66 66 m_fOffset(fi.off
0670: 73 65 74 49 6e 52 65 63 6f 72 64 28 29 29 2c 0d setInRecord()),.
0680: 0a 09 09 6d 5f 66 4c 65 6e 28 66 69 2e 6c 65 6e ...m_fLen(fi.len
0690: 67 74 68 28 29 29 7b 7d 0d 0a 0d 0a 09 43 53 74 gth()){}.....CSt
06a0: 72 69 6e 67 20 6d 5f 76 61 6c 75 65 3b 0d 0a 09 ring m_value;...
06b0: 69 6e 74 20 6d 5f 66 4f 66 66 73 65 74 2c 20 6d int m_fOffset, m
06c0: 5f 66 4c 65 6e 3b 0d 0a 09 0d 0a 09 76 69 72 74 _fLen;......virt
06d0: 75 61 6c 20 42 4f 4f 4c 20 74 65 73 74 28 63 6f ual BOOL test(co
06e0: 6e 73 74 20 63 75 72 73 6f 72 5f 64 61 74 61 26 nst cursor_data&
06f0: 20 63 75 72 73 6f 72 29 0d 0a 09 7b 0d 0a 09 09 cursor)...{....
0700: 69 6e 74 20 72 65 73 20 3d 20 54 3a 3a 63 6f 6d int res = T::com
0710: 70 61 72 65 28 6d 5f 76 61 6c 75 65 2c 20 63 75 pare(m_value, cu
0720: 72 73 6f 72 2e 74 61 62 6c 65 52 65 63 6f 72 64 rsor.tableRecord
0730: 42 75 66 20 2b 20 6d 5f 66 4f 66 66 73 65 74 2c Buf + m_fOffset,
0740: 20 6d 5f 66 4c 65 6e 29 3b 0d 0a 09 09 0d 0a 09 m_fLen);.......
0750: 09 69 66 28 4f 70 20 3d 3d 20 74 6f 45 71 75 61 .if(Op == toEqua
0760: 6c 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 30 l)....{.....if(0
0770: 20 3d 3d 20 72 65 73 29 0d 0a 09 09 09 09 72 65 == res)......re
0780: 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 09 7d 0d turn TRUE;....}.
0790: 0a 09 09 65 6c 73 65 20 69 66 28 4f 70 20 3d 3d ...else if(Op ==
07a0: 20 74 6f 4c 65 73 73 29 0d 0a 09 09 7b 0d 0a 09 toLess)....{...
07b0: 09 09 69 66 28 72 65 73 20 3e 20 30 29 0d 0a 09 ..if(res > 0)...
07c0: 09 09 09 72 65 74 75 72 6e 20 54 52 55 45 3b 0d ...return TRUE;.
07d0: 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28 ...}....else if(
07e0: 4f 70 20 3d 3d 20 74 6f 4c 65 73 73 45 71 29 0d Op == toLessEq).
07f0: 0a 09 09 7b 0d 0a 09 09 09 69 66 28 72 65 73 20 ...{.....if(res
0800: 3e 3d 20 30 29 0d 0a 09 09 09 09 72 65 74 75 72 >= 0)......retur
0810: 6e 20 54 52 55 45 3b 0d 0a 09 09 7d 0d 0a 09 09 n TRUE;....}....
0820: 65 6c 73 65 20 69 66 28 4f 70 20 3d 3d 20 74 6f else if(Op == to
0830: 47 72 61 74 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 Grat)....{.....i
0840: 66 28 72 65 73 20 3c 20 30 29 0d 0a 09 09 09 09 f(res < 0)......
0850: 72 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 09 return TRUE;....
0860: 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28 4f 70 20 }....else if(Op
0870: 3d 3d 20 74 6f 47 72 61 74 45 71 29 0d 0a 09 09 == toGratEq)....
0880: 7b 0d 0a 09 09 09 69 66 28 72 65 73 20 3c 3d 20 {.....if(res <=
0890: 30 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 54 0)......return T
08a0: 52 55 45 3b 0d 0a 09 09 7d 0d 0a 09 09 72 65 74 RUE;....}....ret
08b0: 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 7d 0d 0a urn FALSE;...}..
08c0: 7d 3b 0d 0a 0d 0a 74 65 6d 70 6c 61 74 65 3c 54 };....template<T
08d0: 65 73 74 4f 70 20 6f 70 3e 0d 0a 73 74 72 75 63 estOp op>..struc
08e0: 74 20 74 63 46 75 6c 6c 4b 65 79 20 3a 20 70 75 t tcFullKey : pu
08f0: 62 6c 69 63 20 74 65 73 74 43 6f 6e 73 74 72 61 blic testConstra
0900: 69 6e 74 0d 0a 7b 0d 0a 09 74 63 46 75 6c 6c 4b int..{...tcFullK
0910: 65 79 28 74 65 73 74 43 6f 6e 73 74 72 61 69 6e ey(testConstrain
0920: 74 2a 26 20 70 2c 20 43 53 74 72 69 6e 67 26 20 t*& p, CString&
0930: 6b 65 79 2c 20 63 6f 6e 73 74 20 69 6e 64 65 78 key, const index
0940: 5f 69 6e 66 6f 2a 20 70 49 6e 64 65 78 49 6e 66 _info* pIndexInf
0950: 6f 29 0d 0a 09 09 3a 20 74 65 73 74 43 6f 6e 73 o)....: testCons
0960: 74 72 61 69 6e 74 28 70 29 2c 20 72 65 63 4e 75 traint(p), recNu
0970: 6d 28 30 29 2c 20 6d 5f 70 49 6e 64 65 78 49 6e m(0), m_pIndexIn
0980: 66 6f 28 70 49 6e 64 65 78 49 6e 66 6f 29 0d 0a fo(pIndexInfo)..
0990: 09 7b 0d 0a 09 09 69 6e 74 20 6b 65 79 4c 65 6e .{....int keyLen
09a0: 20 3d 20 6b 65 79 2e 47 65 74 4c 65 6e 67 74 68 = key.GetLength
09b0: 28 29 2c 20 6b 65 79 53 69 7a 65 20 3d 20 6d 5f (), keySize = m_
09c0: 70 49 6e 64 65 78 49 6e 66 6f 2d 3e 6b 65 79 53 pIndexInfo->keyS
09d0: 69 7a 65 28 29 3b 0d 0a 09 09 69 66 28 6b 65 79 ize();....if(key
09e0: 4c 65 6e 20 3e 20 6b 65 79 53 69 7a 65 29 0d 0a Len > keySize)..
09f0: 09 09 09 72 65 63 4e 75 6d 20 3d 20 61 74 6f 6c ...recNum = atol
0a00: 28 28 4c 50 43 53 54 52 29 6b 65 79 20 2b 20 6b ((LPCSTR)key + k
0a10: 65 79 53 69 7a 65 29 3b 0d 0a 09 09 65 6c 73 65 eySize);....else
0a20: 20 69 66 28 6b 65 79 4c 65 6e 20 3c 20 6b 65 79 if(keyLen < key
0a30: 53 69 7a 65 29 0d 0a 09 09 09 6d 65 6d 73 65 74 Size).....memset
0a40: 28 6b 65 79 2e 47 65 74 42 75 66 66 65 72 53 65 (key.GetBufferSe
0a50: 74 4c 65 6e 67 74 68 28 6b 65 79 53 69 7a 65 29 tLength(keySize)
0a60: 20 2b 20 6b 65 79 4c 65 6e 2c 20 27 20 27 2c 20 + keyLen, ' ',
0a70: 6b 65 79 53 69 7a 65 20 2d 20 6b 65 79 4c 65 6e keySize - keyLen
0a80: 29 3b 0d 0a 09 09 0d 0a 09 09 44 57 4f 52 44 20 );........DWORD
0a90: 63 6f 75 6e 74 46 69 65 6c 64 73 20 3d 20 6d 5f countFields = m_
0aa0: 70 49 6e 64 65 78 49 6e 66 6f 2d 3e 66 69 65 6c pIndexInfo->fiel
0ab0: 64 73 43 6f 75 6e 74 28 29 3b 0d 0a 09 09 6b 65 dsCount();....ke
0ac0: 79 73 2e 53 65 74 53 69 7a 65 28 63 6f 75 6e 74 ys.SetSize(count
0ad0: 46 69 65 6c 64 73 29 3b 0d 0a 09 09 4c 50 43 53 Fields);....LPCS
0ae0: 54 52 20 70 52 65 61 64 20 3d 20 6b 65 79 3b 0d TR pRead = key;.
0af0: 0a 09 09 63 6f 6e 73 74 20 69 64 78 5f 66 69 65 ...const idx_fie
0b00: 6c 64 5f 69 6e 66 6f 2a 20 70 46 69 65 6c 64 73 ld_info* pFields
0b10: 20 3d 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 2d = m_pIndexInfo-
0b20: 3e 66 69 65 6c 64 73 28 29 3b 0d 0a 09 09 43 53 >fields();....CS
0b30: 74 72 69 6e 67 2a 20 70 53 74 72 69 6e 67 20 3d tring* pString =
0b40: 20 6b 65 79 73 2e 47 65 74 44 61 74 61 28 29 3b keys.GetData();
0b50: 0d 0a 09 09 66 6f 72 28 44 57 4f 52 44 20 69 20 ....for(DWORD i
0b60: 3d 20 63 6f 75 6e 74 46 69 65 6c 64 73 3b 20 69 = countFields; i
0b70: 2d 2d 20 3b 20 29 0d 0a 09 09 7b 0d 0a 09 09 09 -- ; )....{.....
0b80: 63 6f 6e 73 74 20 66 69 65 6c 64 5f 69 6e 66 6f const field_info
0b90: 26 20 69 6e 66 6f 20 3d 20 70 46 69 65 6c 64 73 & info = pFields
0ba0: 2d 3e 69 6e 66 6f 28 29 3b 0d 0a 09 09 09 6d 65 ->info();.....me
0bb0: 6d 63 70 79 28 70 53 74 72 69 6e 67 2d 3e 47 65 mcpy(pString->Ge
0bc0: 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 74 68 tBufferSetLength
0bd0: 28 69 6e 66 6f 2e 6c 65 6e 67 74 68 28 29 29 2c (info.length()),
0be0: 20 70 52 65 61 64 2c 20 69 6e 66 6f 2e 6c 65 6e pRead, info.len
0bf0: 67 74 68 28 29 29 3b 0d 0a 09 09 09 70 52 65 61 gth());.....pRea
0c00: 64 20 2b 3d 20 69 6e 66 6f 2e 6c 65 6e 67 74 68 d += info.length
0c10: 28 29 3b 0d 0a 09 09 09 70 53 74 72 69 6e 67 2b ();.....pString+
0c20: 2b 3b 0d 0a 09 09 09 70 46 69 65 6c 64 73 2b 2b +;.....pFields++
0c30: 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 0d 0a 09 ;....}...}......
0c40: 43 53 74 72 69 6e 67 41 72 72 61 79 20 6b 65 79 CStringArray key
0c50: 73 3b 0d 0a 09 69 6e 74 20 72 65 63 4e 75 6d 3b s;...int recNum;
0c60: 0d 0a 09 63 6f 6e 73 74 20 69 6e 64 65 78 5f 69 ...const index_i
0c70: 6e 66 6f 2a 20 6d 5f 70 49 6e 64 65 78 49 6e 66 nfo* m_pIndexInf
0c80: 6f 3b 0d 0a 0d 0a 09 76 69 72 74 75 61 6c 20 42 o;.....virtual B
0c90: 4f 4f 4c 20 74 65 73 74 28 63 6f 6e 73 74 20 63 OOL test(const c
0ca0: 75 72 73 6f 72 5f 64 61 74 61 26 20 63 75 72 73 ursor_data& curs
0cb0: 6f 72 29 0d 0a 09 7b 0d 0a 09 09 69 6e 74 20 73 or)...{....int s
0cc0: 69 7a 65 20 3d 20 6d 5f 70 49 6e 64 65 78 49 6e ize = m_pIndexIn
0cd0: 66 6f 2d 3e 66 69 65 6c 64 73 43 6f 75 6e 74 28 fo->fieldsCount(
0ce0: 29 3b 0d 0a 09 09 63 6f 6e 73 74 20 69 64 78 5f );....const idx_
0cf0: 66 69 65 6c 64 5f 69 6e 66 6f 2a 20 70 46 69 65 field_info* pFie
0d00: 6c 64 73 20 3d 20 6d 5f 70 49 6e 64 65 78 49 6e lds = m_pIndexIn
0d10: 66 6f 2d 3e 66 69 65 6c 64 73 28 29 3b 0d 0a 09 fo->fields();...
0d20: 09 43 53 74 72 69 6e 67 2a 20 70 53 74 72 69 6e .CString* pStrin
0d30: 67 20 3d 20 6b 65 79 73 2e 47 65 74 44 61 74 61 g = keys.GetData
0d40: 28 29 3b 0d 0a 09 09 77 68 69 6c 65 28 73 69 7a ();....while(siz
0d50: 65 2d 2d 29 0d 0a 09 09 7b 0d 0a 09 09 09 63 6f e--)....{.....co
0d60: 6e 73 74 20 66 69 65 6c 64 5f 69 6e 66 6f 26 20 nst field_info&
0d70: 66 69 65 6c 64 20 3d 20 70 46 69 65 6c 64 73 2d field = pFields-
0d80: 3e 69 6e 66 6f 28 29 3b 0d 0a 09 09 09 69 6e 74 >info();.....int
0d90: 20 72 65 73 3b 0d 0a 09 09 09 72 65 73 20 3d 20 res;.....res =
0da0: 75 38 74 65 78 74 3a 3a 63 6f 6d 70 61 72 65 4e u8text::compareN
0db0: 6f 43 61 73 65 4c 65 6e 28 2a 70 53 74 72 69 6e oCaseLen(*pStrin
0dc0: 67 2c 20 63 75 72 73 6f 72 2e 74 61 62 6c 65 52 g, cursor.tableR
0dd0: 65 63 6f 72 64 42 75 66 20 2b 20 66 69 65 6c 64 ecordBuf + field
0de0: 2e 6f 66 66 73 65 74 49 6e 52 65 63 6f 72 64 28 .offsetInRecord(
0df0: 29 2c 20 66 69 65 6c 64 2e 6c 65 6e 67 74 68 28 ), field.length(
0e00: 29 29 3b 0d 0a 09 09 09 73 77 69 74 63 68 28 6f ));.....switch(o
0e10: 70 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 63 61 73 p).....{.....cas
0e20: 65 20 74 6f 45 71 75 61 6c 3a 0d 0a 09 09 09 09 e toEqual:......
0e30: 69 66 28 30 20 21 3d 20 72 65 73 29 0d 0a 09 09 if(0 != res)....
0e40: 09 09 09 72 65 74 75 72 6e 20 46 41 4c 53 45 3b ...return FALSE;
0e50: 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 ......break;....
0e60: 09 63 61 73 65 20 74 6f 4c 65 73 73 3a 0d 0a 09 .case toLess:...
0e70: 09 09 09 69 66 28 72 65 73 20 3e 20 30 29 0d 0a ...if(res > 0)..
0e80: 09 09 09 09 09 72 65 74 75 72 6e 20 54 52 55 45 .....return TRUE
0e90: 3b 0d 0a 09 09 09 09 65 6c 73 65 20 69 66 28 72 ;......else if(r
0ea0: 65 73 20 3c 20 30 29 0d 0a 09 09 09 09 09 72 65 es < 0).......re
0eb0: 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 09 turn FALSE;.....
0ec0: 09 65 6c 73 65 20 69 66 28 73 69 7a 65 20 3d 3d .else if(size ==
0ed0: 20 30 20 26 26 20 72 65 63 4e 75 6d 20 3d 3d 20 0 && recNum ==
0ee0: 30 29 09 2f 2f 20 cf ee e4 ea eb fe f7 20 f0 e0 0).// ....... ..
0ef0: e2 e5 ed 20 e2 20 ef ee f1 eb e5 e4 ed e5 ec 20 ... . .........
0f00: ef ee eb e5 2c 20 ed ee ec e5 f0 20 e7 e0 ef e8 ...., ..... ....
0f10: f1 e8 20 ed e5 20 e7 e0 e4 e0 ed 0d 0a 09 09 09 .. .. ..........
0f20: 09 09 72 65 74 75 72 6e 20 46 41 4c 53 45 3b 0d ..return FALSE;.
0f30: 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 .....break;.....
0f40: 63 61 73 65 20 74 6f 4c 65 73 73 45 71 3a 0d 0a case toLessEq:..
0f50: 09 09 09 09 69 66 28 72 65 73 20 3e 20 30 29 0d ....if(res > 0).
0f60: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 54 52 55 ......return TRU
0f70: 45 3b 0d 0a 09 09 09 09 65 6c 73 65 20 69 66 28 E;......else if(
0f80: 72 65 73 20 3c 20 30 29 0d 0a 09 09 09 09 09 72 res < 0).......r
0f90: 65 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 eturn FALSE;....
0fa0: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 ..break;.....cas
0fb0: 65 20 74 6f 47 72 61 74 3a 0d 0a 09 09 09 09 69 e toGrat:......i
0fc0: 66 28 72 65 73 20 3c 20 30 29 0d 0a 09 09 09 09 f(res < 0)......
0fd0: 09 72 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 .return TRUE;...
0fe0: 09 09 09 65 6c 73 65 20 69 66 28 72 65 73 20 3e ...else if(res >
0ff0: 20 30 29 0d 0a 09 09 09 09 09 72 65 74 75 72 6e 0).......return
1000: 20 46 41 4c 53 45 3b 0d 0a 09 09 09 09 65 6c 73 FALSE;......els
1010: 65 20 69 66 28 73 69 7a 65 20 3d 3d 20 30 20 26 e if(size == 0 &
1020: 26 20 72 65 63 4e 75 6d 20 3d 3d 20 30 29 09 2f & recNum == 0)./
1030: 2f 20 cf ee e4 ea eb fe f7 20 f0 e0 e2 e5 ed 20 / ....... .....
1040: e2 20 ef ee f1 eb e5 e4 ed e5 ec 20 ef ee eb e5 . ......... ....
1050: 2c 20 ed ee ec e5 f0 20 e7 e0 ef e8 f1 e8 20 ed , ..... ...... .
1060: e5 20 e7 e0 e4 e0 ed 0d 0a 09 09 09 09 09 72 65 . ............re
1070: 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 09 turn FALSE;.....
1080: 09 62 72 65 61 6b 3b 0d 0a 09 09 09 63 61 73 65 .break;.....case
1090: 20 74 6f 47 72 61 74 45 71 3a 0d 0a 09 09 09 09 toGratEq:......
10a0: 69 66 28 72 65 73 20 3c 20 30 29 0d 0a 09 09 09 if(res < 0).....
10b0: 09 09 72 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a ..return TRUE;..
10c0: 09 09 09 09 65 6c 73 65 20 69 66 28 72 65 73 20 ....else if(res
10d0: 3e 20 30 29 0d 0a 09 09 09 09 09 72 65 74 75 72 > 0).......retur
10e0: 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 09 09 62 72 n FALSE;......br
10f0: 65 61 6b 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 70 eak;.....}.....p
1100: 46 69 65 6c 64 73 2b 2b 3b 0d 0a 09 09 09 70 53 Fields++;.....pS
1110: 74 72 69 6e 67 2b 2b 3b 0d 0a 09 09 7d 0d 0a 09 tring++;....}...
1120: 09 2f 2f 20 cf f0 ee f8 eb e8 20 e2 f1 e5 20 ef .// ...... ... .
1130: ee eb ff 20 e8 ed e4 e5 ea f1 e0 2c 20 f2 ee 20 ... ......., ..
1140: e1 e8 f8 fc 20 ee ed 20 ef ee eb ed ee f1 f2 fc .... .. ........
1150: fe 20 f0 e0 e2 e5 ed 20 ea eb fe f7 f3 2e 0d 0a . ..... ........
1160: 09 09 2f 2f 20 cf ee fd f2 ee ec f3 20 e5 f1 eb ..// ....... ...
1170: e8 20 ed ee ec e5 f0 20 e7 e0 ef e8 f1 e8 20 ed . ..... ...... .
1180: e5 20 e7 e0 e4 e0 ed 2c 20 f2 ee 20 e2 f1 e5 20 . ....., .. ...
1190: f5 ee f0 ee f8 ee 2e 0d 0a 09 09 69 66 28 30 20 ...........if(0
11a0: 3d 3d 20 72 65 63 4e 75 6d 29 0d 0a 09 09 09 72 == recNum).....r
11b0: 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 09 73 eturn TRUE;....s
11c0: 77 69 74 63 68 28 6f 70 29 0d 0a 09 09 7b 0d 0a witch(op)....{..
11d0: 09 09 63 61 73 65 20 74 6f 45 71 75 61 6c 3a 0d ..case toEqual:.
11e0: 0a 09 09 09 72 65 74 75 72 6e 20 72 65 63 4e 75 ....return recNu
11f0: 6d 20 3d 3d 20 63 75 72 73 6f 72 2e 73 74 6f 72 m == cursor.stor
1200: 65 2e 6d 5f 70 6f 73 3b 0d 0a 09 09 63 61 73 65 e.m_pos;....case
1210: 20 74 6f 4c 65 73 73 3a 0d 0a 09 09 09 72 65 74 toLess:.....ret
1220: 75 72 6e 20 72 65 63 4e 75 6d 20 3e 20 63 75 72 urn recNum > cur
1230: 73 6f 72 2e 73 74 6f 72 65 2e 6d 5f 70 6f 73 3b sor.store.m_pos;
1240: 0d 0a 09 09 63 61 73 65 20 74 6f 4c 65 73 73 45 ....case toLessE
1250: 71 3a 0d 0a 09 09 09 72 65 74 75 72 6e 20 72 65 q:.....return re
1260: 63 4e 75 6d 20 3e 3d 20 63 75 72 73 6f 72 2e 73 cNum >= cursor.s
1270: 74 6f 72 65 2e 6d 5f 70 6f 73 3b 0d 0a 09 09 63 tore.m_pos;....c
1280: 61 73 65 20 74 6f 47 72 61 74 3a 0d 0a 09 09 09 ase toGrat:.....
1290: 72 65 74 75 72 6e 20 72 65 63 4e 75 6d 20 3c 20 return recNum <
12a0: 63 75 72 73 6f 72 2e 73 74 6f 72 65 2e 6d 5f 70 cursor.store.m_p
12b0: 6f 73 3b 0d 0a 09 09 63 61 73 65 20 74 6f 47 72 os;....case toGr
12c0: 61 74 45 71 3a 0d 0a 09 09 09 72 65 74 75 72 6e atEq:.....return
12d0: 20 72 65 63 4e 75 6d 20 3c 3d 20 63 75 72 73 6f recNum <= curso
12e0: 72 2e 73 74 6f 72 65 2e 6d 5f 70 6f 73 3b 0d 0a r.store.m_pos;..
12f0: 09 09 7d 0d 0a 09 09 72 65 74 75 72 6e 20 46 41 ..}....return FA
1300: 4c 53 45 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a LSE;...}..};....
1310: 74 65 6d 70 6c 61 74 65 3c 54 65 73 74 4f 70 20 template<TestOp
1320: 4f 70 3e 0d 0a 73 74 72 75 63 74 20 74 63 4c 6f Op>..struct tcLo
1330: 6e 67 53 74 72 20 3a 20 70 75 62 6c 69 63 20 74 ngStr : public t
1340: 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 0d 0a 7b estConstraint..{
1350: 0d 0a 09 74 63 4c 6f 6e 67 53 74 72 28 74 65 73 ...tcLongStr(tes
1360: 74 43 6f 6e 73 74 72 61 69 6e 74 2a 26 20 70 2c tConstraint*& p,
1370: 20 63 6f 6e 73 74 20 43 53 74 72 69 6e 67 26 20 const CString&
1380: 76 61 6c 75 65 2c 20 44 57 4f 52 44 20 6d 64 49 value, DWORD mdI
1390: 44 29 0d 0a 09 09 3a 20 74 65 73 74 43 6f 6e 73 D)....: testCons
13a0: 74 72 61 69 6e 74 28 70 29 2c 20 6d 5f 76 61 6c traint(p), m_val
13b0: 75 65 28 76 61 6c 75 65 29 2c 20 6d 5f 6d 64 49 ue(value), m_mdI
13c0: 44 28 6d 64 49 44 29 7b 7d 0d 0a 0d 0a 09 44 57 D(mdID){}.....DW
13d0: 4f 52 44 20 6d 5f 6d 64 49 44 3b 0d 0a 09 43 53 ORD m_mdID;...CS
13e0: 74 72 69 6e 67 20 6d 5f 76 61 6c 75 65 3b 0d 0a tring m_value;..
13f0: 0d 0a 09 76 69 72 74 75 61 6c 20 42 4f 4f 4c 20 ...virtual BOOL
1400: 74 65 73 74 28 63 6f 6e 73 74 20 63 75 72 73 6f test(const curso
1410: 72 5f 64 61 74 61 26 20 63 75 72 73 6f 72 29 0d r_data& cursor).
1420: 0a 09 7b 0d 0a 09 09 73 74 61 74 69 63 20 43 53 ..{....static CS
1430: 74 72 69 6e 67 20 76 61 6c 75 65 3b 0d 0a 09 09 tring value;....
1440: 4c 6f 6e 67 53 74 72 52 65 61 64 65 72 3a 3a 67 LongStrReader::g
1450: 65 74 28 29 2e 52 65 61 64 53 74 72 28 63 75 72 et().ReadStr(cur
1460: 73 6f 72 2e 74 61 62 6c 65 52 65 63 6f 72 64 42 sor.tableRecordB
1470: 75 66 2c 20 6d 5f 6d 64 49 44 2c 20 76 61 6c 75 uf, m_mdID, valu
1480: 65 29 3b 0d 0a 09 09 69 6e 74 20 72 65 73 20 3d e);....int res =
1490: 20 75 38 74 65 78 74 3a 3a 63 6f 6d 70 61 72 65 u8text::compare
14a0: 52 74 72 69 6d 4e 6f 43 61 73 65 28 6d 5f 76 61 RtrimNoCase(m_va
14b0: 6c 75 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 09 09 lue, value);....
14c0: 69 66 28 4f 70 20 3d 3d 20 74 6f 45 71 75 61 6c if(Op == toEqual
14d0: 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 30 20 )....{.....if(0
14e0: 3d 3d 20 72 65 73 29 0d 0a 09 09 09 09 72 65 74 == res)......ret
14f0: 75 72 6e 20 54 52 55 45 3b 0d 0a 09 09 7d 0d 0a urn TRUE;....}..
1500: 09 09 65 6c 73 65 20 69 66 28 4f 70 20 3d 3d 20 ..else if(Op ==
1510: 74 6f 4c 65 73 73 29 0d 0a 09 09 7b 0d 0a 09 09 toLess)....{....
1520: 09 69 66 28 72 65 73 20 3e 20 30 29 0d 0a 09 09 .if(res > 0)....
1530: 09 09 72 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a ..return TRUE;..
1540: 09 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28 4f ..}....else if(O
1550: 70 20 3d 3d 20 74 6f 4c 65 73 73 45 71 29 0d 0a p == toLessEq)..
1560: 09 09 7b 0d 0a 09 09 09 69 66 28 72 65 73 20 3e ..{.....if(res >
1570: 3d 20 30 29 0d 0a 09 09 09 09 72 65 74 75 72 6e = 0)......return
1580: 20 54 52 55 45 3b 0d 0a 09 09 7d 0d 0a 09 09 65 TRUE;....}....e
1590: 6c 73 65 20 69 66 28 4f 70 20 3d 3d 20 74 6f 47 lse if(Op == toG
15a0: 72 61 74 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 rat)....{.....if
15b0: 28 72 65 73 20 3c 20 30 29 0d 0a 09 09 09 09 72 (res < 0)......r
15c0: 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 09 7d eturn TRUE;....}
15d0: 0d 0a 09 09 65 6c 73 65 20 69 66 28 4f 70 20 3d ....else if(Op =
15e0: 3d 20 74 6f 47 72 61 74 45 71 29 0d 0a 09 09 7b = toGratEq)....{
15f0: 0d 0a 09 09 09 69 66 28 72 65 73 20 3c 3d 20 30 .....if(res <= 0
1600: 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 54 52 )......return TR
1610: 55 45 3b 0d 0a 09 09 7d 0d 0a 09 09 72 65 74 75 UE;....}....retu
1620: 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 7d 0d 0a 7d rn FALSE;...}..}
1630: 3b 0d 0a 0d 0a 74 65 6d 70 6c 61 74 65 3c 54 65 ;....template<Te
1640: 73 74 4f 70 20 4f 70 3e 0d 0a 73 74 72 75 63 74 stOp Op>..struct
1650: 20 74 63 52 65 63 4e 6f 20 3a 20 70 75 62 6c 69 tcRecNo : publi
1660: 63 20 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 c testConstraint
1670: 0d 0a 7b 0d 0a 09 74 63 52 65 63 4e 6f 28 74 65 ..{...tcRecNo(te
1680: 73 74 43 6f 6e 73 74 72 61 69 6e 74 2a 26 20 70 stConstraint*& p
1690: 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 09 , long value)...
16a0: 09 3a 20 74 65 73 74 43 6f 6e 73 74 72 61 69 6e .: testConstrain
16b0: 74 28 70 29 2c 20 6d 5f 76 61 6c 75 65 28 76 61 t(p), m_value(va
16c0: 6c 75 65 29 7b 7d 0d 0a 0d 0a 09 6c 6f 6e 67 20 lue){}.....long
16d0: 6d 5f 76 61 6c 75 65 3b 0d 0a 0d 0a 09 76 69 72 m_value;.....vir
16e0: 74 75 61 6c 20 42 4f 4f 4c 20 74 65 73 74 28 63 tual BOOL test(c
16f0: 6f 6e 73 74 20 63 75 72 73 6f 72 5f 64 61 74 61 onst cursor_data
1700: 26 20 63 75 72 73 6f 72 29 0d 0a 09 7b 0d 0a 09 & cursor)...{...
1710: 09 6c 6f 6e 67 20 72 65 73 20 3d 20 6d 5f 76 61 .long res = m_va
1720: 6c 75 65 20 2d 20 63 75 72 73 6f 72 2e 73 74 6f lue - cursor.sto
1730: 72 65 2e 6d 5f 70 6f 73 3b 0d 0a 09 09 69 66 28 re.m_pos;....if(
1740: 4f 70 20 3d 3d 20 74 6f 45 71 75 61 6c 29 0d 0a Op == toEqual)..
1750: 09 09 7b 0d 0a 09 09 09 69 66 28 30 20 3d 3d 20 ..{.....if(0 ==
1760: 72 65 73 29 0d 0a 09 09 09 09 72 65 74 75 72 6e res)......return
1770: 20 54 52 55 45 3b 0d 0a 09 09 7d 0d 0a 09 09 65 TRUE;....}....e
1780: 6c 73 65 20 69 66 28 4f 70 20 3d 3d 20 74 6f 4c lse if(Op == toL
1790: 65 73 73 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 ess)....{.....if
17a0: 28 72 65 73 20 3e 20 30 29 0d 0a 09 09 09 09 72 (res > 0)......r
17b0: 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 09 7d eturn TRUE;....}
17c0: 0d 0a 09 09 65 6c 73 65 20 69 66 28 4f 70 20 3d ....else if(Op =
17d0: 3d 20 74 6f 4c 65 73 73 45 71 29 0d 0a 09 09 7b = toLessEq)....{
17e0: 0d 0a 09 09 09 69 66 28 72 65 73 20 3e 3d 20 30 .....if(res >= 0
17f0: 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 54 52 )......return TR
1800: 55 45 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 UE;....}....else
1810: 20 69 66 28 4f 70 20 3d 3d 20 74 6f 47 72 61 74 if(Op == toGrat
1820: 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 72 65 )....{.....if(re
1830: 73 20 3c 20 30 29 0d 0a 09 09 09 09 72 65 74 75 s < 0)......retu
1840: 72 6e 20 54 52 55 45 3b 0d 0a 09 09 7d 0d 0a 09 rn TRUE;....}...
1850: 09 65 6c 73 65 20 69 66 28 4f 70 20 3d 3d 20 74 .else if(Op == t
1860: 6f 47 72 61 74 45 71 29 0d 0a 09 09 7b 0d 0a 09 oGratEq)....{...
1870: 09 09 69 66 28 72 65 73 20 3c 3d 20 30 29 0d 0a ..if(res <= 0)..
1880: 09 09 09 09 72 65 74 75 72 6e 20 54 52 55 45 3b ....return TRUE;
1890: 0d 0a 09 09 7d 0d 0a 09 09 72 65 74 75 72 6e 20 ....}....return
18a0: 46 41 4c 53 45 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a FALSE;...}..};..
18b0: 0d 0a 69 6e 6c 69 6e 65 20 69 6e 74 20 6e 65 78 ..inline int nex
18c0: 74 47 72 61 74 53 74 72 69 6e 67 55 70 70 65 72 tGratStringUpper
18d0: 28 43 53 74 72 69 6e 67 26 20 74 65 78 74 2c 20 (CString& text,
18e0: 44 57 4f 52 44 20 66 4c 65 6e 29 0d 0a 7b 0d 0a DWORD fLen)..{..
18f0: 09 65 78 74 65 72 6e 20 42 59 54 45 20 6e 65 78 .extern BYTE nex
1900: 74 47 72 61 74 55 53 79 6d 62 6f 6c 73 5b 32 35 tGratUSymbols[25
1910: 36 5d 3b 0d 0a 09 75 6e 73 69 67 6e 65 64 20 63 6];...unsigned c
1920: 68 61 72 20 2a 70 53 74 61 72 74 20 3d 20 28 75 har *pStart = (u
1930: 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29 74 65 nsigned char*)te
1940: 78 74 2e 47 65 74 42 75 66 66 65 72 53 65 74 4c xt.GetBufferSetL
1950: 65 6e 67 74 68 28 66 4c 65 6e 29 2c 20 2a 70 57 ength(fLen), *pW
1960: 72 69 74 65 20 3d 20 70 53 74 61 72 74 20 2b 20 rite = pStart +
1970: 66 4c 65 6e 20 2d 20 31 3b 0d 0a 09 77 68 69 6c fLen - 1;...whil
1980: 65 28 70 57 72 69 74 65 20 3e 3d 20 70 53 74 61 e(pWrite >= pSta
1990: 72 74 29 0d 0a 09 7b 0d 0a 09 09 42 59 54 45 20 rt)...{....BYTE
19a0: 6e 67 73 20 3d 20 6e 65 78 74 47 72 61 74 55 53 ngs = nextGratUS
19b0: 79 6d 62 6f 6c 73 5b 73 74 61 74 69 63 5f 63 61 ymbols[static_ca
19c0: 73 74 3c 44 57 4f 52 44 3e 28 2a 70 57 72 69 74 st<DWORD>(*pWrit
19d0: 65 29 5d 3b 0d 0a 09 09 69 66 28 6e 67 73 29 0d e)];....if(ngs).
19e0: 0a 09 09 7b 0d 0a 09 09 09 2a 70 57 72 69 74 65 ...{.....*pWrite
19f0: 20 3d 20 6e 67 73 3b 0d 0a 09 09 09 72 65 74 75 = ngs;.....retu
1a00: 72 6e 20 31 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c rn 1;....}....el
1a10: 73 65 0d 0a 09 09 09 2a 70 57 72 69 74 65 2d 2d se.....*pWrite--
1a20: 20 3d 20 27 20 27 3b 0d 0a 09 7d 0d 0a 09 72 65 = ' ';...}...re
1a30: 74 75 72 6e 20 32 3b 20 2f 2f 20 cd e5 20 f3 e4 turn 2; // .. ..
1a40: e0 eb ee f1 fc 20 ef ee eb f3 f7 e8 f2 fc 20 e1 ..... ........ .
1a50: ee eb fc f8 f3 fe 20 f1 f2 f0 ee ea f3 20 28 22 ...... ...... ("
1a60: df df df df df 22 29 3b 0d 0a 7d 0d 0a 0d 0a 2f .....");..}..../
1a70: 2f 20 3e 30 20 2d 20 ef ee eb ed fb e9 20 ea eb / >0 - ...... ..
1a80: fe f7 20 c1 ce cb dc d8 c5 20 ef ee eb ed fb e9 .. ...... ......
1a90: 20 ea eb fe f7 20 cc c5 cd dc d8 c5 0d 0a 2f 2f .... ........//
1aa0: 20 c2 c0 c6 cd ce 2e 20 d1 f7 e8 f2 e0 e5 ec 2c ...... .......,
1ab0: 20 f7 f2 ee 20 ef ee eb ed fb e9 20 ea eb fe f7 ... ...... ....
1ac0: 20 e2 f1 e5 e3 e4 e0 20 e4 eb e8 ed ed e5 e5 20 ...... .......
1ad0: f7 e0 f1 f2 ed ee e3 ee 20 ea eb fe f7 e0 2c 0d ........ .....,.
1ae0: 0a 2f 2f 20 e0 eb e3 ee f0 e8 f2 ec 20 f0 e0 f1 .// ........ ...
1af0: f1 f7 e8 f2 fb e2 e0 e5 f2 20 ed e0 20 fd f2 ee ......... .. ...
1b00: 2c 20 ed e5 20 ef ee e4 e2 e5 e4 e8 f2 e5 20 e5 , .. ......... .
1b10: e3 ee 2e 0d 0a 69 6e 74 20 63 6f 6d 70 61 72 65 .....int compare
1b20: 46 6b 5f 50 6b 28 63 6f 6e 73 74 20 43 53 74 72 Fk_Pk(const CStr
1b30: 69 6e 67 26 20 66 75 6c 6c 4b 65 79 2c 20 63 6f ing& fullKey, co
1b40: 6e 73 74 20 43 53 74 72 69 6e 67 26 20 70 61 72 nst CString& par
1b50: 74 4b 65 79 2c 20 44 57 4f 52 44 20 66 69 6c 6c tKey, DWORD fill
1b60: 53 79 6d 62 6f 6c 29 0d 0a 7b 0d 0a 09 4c 50 43 Symbol)..{...LPC
1b70: 53 54 52 20 70 46 75 6c 6c 20 3d 20 66 75 6c 6c STR pFull = full
1b80: 4b 65 79 2c 20 70 50 61 72 74 20 3d 20 70 61 72 Key, pPart = par
1b90: 74 4b 65 79 3b 0d 0a 09 69 6e 74 20 73 46 75 6c tKey;...int sFul
1ba0: 6c 2c 20 73 50 61 72 74 3b 0d 0a 09 0d 0a 09 66 l, sPart;......f
1bb0: 6f 72 28 3b 3b 29 0d 0a 09 7b 0d 0a 09 09 73 46 or(;;)...{....sF
1bc0: 75 6c 6c 20 3d 20 73 74 61 74 69 63 5f 63 61 73 ull = static_cas
1bd0: 74 3c 44 57 4f 52 44 3e 28 73 74 61 74 69 63 5f t<DWORD>(static_
1be0: 63 61 73 74 3c 42 59 54 45 3e 28 2a 70 46 75 6c cast<BYTE>(*pFul
1bf0: 6c 29 29 3b 0d 0a 09 09 73 50 61 72 74 20 3d 20 l));....sPart =
1c00: 73 74 61 74 69 63 5f 63 61 73 74 3c 44 57 4f 52 static_cast<DWOR
1c10: 44 3e 28 73 74 61 74 69 63 5f 63 61 73 74 3c 42 D>(static_cast<B
1c20: 59 54 45 3e 28 2a 70 50 61 72 74 29 29 3b 0d 0a YTE>(*pPart));..
1c30: 0d 0a 09 09 69 66 28 21 73 50 61 72 74 29 0d 0a ....if(!sPart)..
1c40: 09 09 09 72 65 74 75 72 6e 20 66 69 6c 6c 53 79 ...return fillSy
1c50: 6d 62 6f 6c 20 3d 3d 20 30 78 46 46 20 3f 20 2d mbol == 0xFF ? -
1c60: 31 20 3a 20 31 3b 0d 0a 09 09 69 6e 74 20 64 69 1 : 1;....int di
1c70: 66 20 3d 20 73 46 75 6c 6c 20 2d 20 73 50 61 72 f = sFull - sPar
1c80: 74 3b 0d 0a 09 09 69 66 28 64 69 66 29 0d 0a 09 t;....if(dif)...
1c90: 09 09 72 65 74 75 72 6e 20 64 69 66 3b 0d 0a 09 ..return dif;...
1ca0: 09 70 46 75 6c 6c 2b 2b 3b 0d 0a 09 09 70 50 61 .pFull++;....pPa
1cb0: 72 74 2b 2b 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75 rt++;...}...retu
1cc0: 72 6e 20 30 3b 0d 0a 7d 0d 0a 0d 0a 74 65 6d 70 rn 0;..}....temp
1cd0: 6c 61 74 65 3c 69 6e 74 20 42 6f 75 6e 64 54 79 late<int BoundTy
1ce0: 70 65 3e 20 2f 2f 20 30 20 2d 20 65 71 75 61 6c pe> // 0 - equal
1cf0: 2c 20 31 20 2d 20 6d 69 6e 2c 20 32 20 2d 20 6d , 1 - min, 2 - m
1d00: 61 78 0d 0a 73 74 72 75 63 74 20 6e 6f 72 6d 61 ax..struct norma
1d10: 6c 69 7a 65 53 74 72 69 6e 67 0d 0a 7b 0d 0a 09 lizeString..{...
1d20: 2f 2f 20 30 20 2d 20 73 75 63 63 65 73 73 2c 20 // 0 - success,
1d30: 31 20 2d 20 74 72 69 6d 6d 65 64 2c 20 32 20 2d 1 - trimmed, 2 -
1d40: 20 65 72 72 6f 72 0d 0a 09 69 6e 6c 69 6e 65 20 error...inline
1d50: 73 74 61 74 69 63 20 69 6e 74 20 73 65 74 28 43 static int set(C
1d60: 53 74 72 69 6e 67 26 20 73 74 72 2c 20 44 57 4f String& str, DWO
1d70: 52 44 20 6b 65 79 4c 65 6e 67 74 68 29 0d 0a 09 RD keyLength)...
1d80: 7b 0d 0a 09 09 44 57 4f 52 44 20 73 74 72 4c 65 {....DWORD strLe
1d90: 6e 67 74 68 20 3d 20 73 74 72 2e 47 65 74 4c 65 ngth = str.GetLe
1da0: 6e 67 74 68 28 29 3b 0d 0a 0d 0a 09 09 69 66 28 ngth();......if(
1db0: 73 74 72 4c 65 6e 67 74 68 20 3e 20 6b 65 79 4c strLength > keyL
1dc0: 65 6e 67 74 68 29 09 2f 2f 20 d1 f2 f0 ee ea e0 ength).// ......
1dd0: 20 e4 eb e8 ed ed e5 e5 20 ed f3 e6 ed ee e3 ee ....... .......
1de0: 20 f0 e0 e7 ec e5 f0 e0 2e 20 cf ee ef f0 ee e1 ........ ......
1df0: f3 e5 ec 20 ee e1 f0 e5 e7 e0 f2 fc 20 e5 e5 20 ... ........ ..
1e00: f1 ef f0 e0 e2 e0 2e 0d 0a 09 09 7b 0d 0a 09 09 ...........{....
1e10: 09 73 74 72 2e 54 72 69 6d 52 69 67 68 74 28 29 .str.TrimRight()
1e20: 3b 0d 0a 09 09 09 73 74 72 4c 65 6e 67 74 68 20 ;.....strLength
1e30: 3d 20 73 74 72 2e 47 65 74 4c 65 6e 67 74 68 28 = str.GetLength(
1e40: 29 3b 0d 0a 09 09 7d 0d 0a 09 09 69 66 28 73 74 );....}....if(st
1e50: 72 4c 65 6e 67 74 68 20 3e 20 6b 65 79 4c 65 6e rLength > keyLen
1e60: 67 74 68 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 gth)....{.....if
1e70: 28 30 20 3d 3d 20 42 6f 75 6e 64 54 79 70 65 29 (0 == BoundType)
1e80: 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 32 3b 20 ......return 2;
1e90: 2f 2f 20 d1 f2 f0 ee ea e0 20 e4 eb e8 ed ed e5 // ...... ......
1ea0: e5 20 ef ee eb ff 2e 20 d0 e0 e2 e5 ed f1 f2 e2 . ..... ........
1eb0: ee 20 ed e5 e2 ee e7 ec ee e6 ed ee 2e 0d 0a 09 . ..............
1ec0: 09 09 65 6c 73 65 20 69 66 28 31 20 3d 3d 20 42 ..else if(1 == B
1ed0: 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 7b 0d oundType).....{.
1ee0: 0a 09 09 09 09 2f 2f 20 c7 e0 ec e5 ed e0 20 f3 .....// ...... .
1ef0: f1 eb ee e2 e8 ff 2e 20 c4 ee ef f3 f1 f2 e8 ec ....... ........
1f00: 20 e4 eb ff 20 ef ee eb ff 20 e4 eb e8 ed ed ee ... .... ......
1f10: e9 20 31 20 ef f0 e8 ec e5 ed ff e5 f2 f1 ff 20 . 1 ...........
1f20: f3 f1 eb ee e2 e8 e5 20 3e 27 61 64 27 20 e8 eb ....... >'ad' ..
1f30: e8 20 3e 3d 27 61 64 27 0d 0a 09 09 09 09 2f 2f . >='ad'......//
1f40: 20 cf ee ed ff f2 ed ee 2c 20 f7 f2 ee 20 ee e1 ......., ... ..
1f50: e0 20 f3 f1 eb ee e2 e8 ff 20 ed e0 e4 ee 20 e8 . ....... .... .
1f60: e7 ec e5 ed e8 f2 fc 20 ed e0 20 3e 3d 27 62 27 ....... .. >='b'
1f70: 2e 0d 0a 09 09 09 09 2f 2f 20 d2 e0 ea e6 e5 20 .......// .....
1f80: ef ee ed ff f2 ed ee 2c 20 f7 f2 ee 20 e4 eb ff ......., ... ...
1f90: 20 f2 e0 ea ee e3 ee 20 ef ee eb ff 20 f3 f1 eb ...... .... ...
1fa0: ee e2 e8 e5 20 3e 3d 27 ff c0 27 20 ed e8 ea ee .... >='..' ....
1fb0: e3 e4 e0 20 ed e5 20 e2 fb ef ee eb ed ff e5 f2 ... .. .........
1fc0: f1 ff 2e 0d 0a 09 09 09 09 2f 2f 20 c2 ee e1 f9 .........// ....
1fd0: e5 ec 2c 20 f3 f1 e5 ea e0 e5 ec 20 f1 f2 f0 ee .., ....... ....
1fe0: ea f3 20 e4 ee 20 ed f3 e6 ed ee e9 20 e4 eb e8 .. .. ...... ...
1ff0: ed fb 2c 20 ef ee eb f3 f7 e0 e5 ec 20 f1 eb e5 .., ........ ...
2000: e4 f3 fe f9 f3 fe 20 e1 ce eb fc f8 f3 fe 20 f1 ...... ....... .
2010: f2 f0 ee ea f3 2c 0d 0a 09 09 09 09 2f 2f 20 e8 .....,......// .
2020: 20 f3 e1 e8 f0 e0 e5 ec 20 ef f0 e8 e7 ed e0 ea ....... .......
2030: 20 68 61 72 64 20 f3 20 e3 f0 e0 ed e8 f6 fb 2e hard . ........
2040: 0d 0a 09 09 09 09 73 74 72 2e 47 65 74 42 75 66 ......str.GetBuf
2050: 66 65 72 53 65 74 4c 65 6e 67 74 68 28 6b 65 79 ferSetLength(key
2060: 4c 65 6e 67 74 68 29 3b 0d 0a 09 09 09 09 72 65 Length);......re
2070: 74 75 72 6e 20 6e 65 78 74 47 72 61 74 53 74 72 turn nextGratStr
2080: 69 6e 67 55 70 70 65 72 28 73 74 72 2c 20 6b 65 ingUpper(str, ke
2090: 79 4c 65 6e 67 74 68 29 3b 0d 0a 09 09 09 7d 0d yLength);.....}.
20a0: 0a 09 09 09 65 6c 73 65 20 69 66 28 32 20 3d 3d ....else if(2 ==
20b0: 20 42 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 BoundType).....
20c0: 7b 0d 0a 09 09 09 09 2f 2f 20 c7 e0 ec e5 ed e0 {......// ......
20d0: 20 f3 f1 eb ee e2 e8 ff 2e 20 c4 ee ef f3 f1 f2 ........ ......
20e0: e8 ec 20 e4 eb ff 20 ef ee eb ff 20 e4 eb e8 ed .. ... .... ....
20f0: ed ee e9 20 31 20 ef f0 e8 ec e5 ed ff e5 f2 f1 ... 1 ..........
2100: ff 20 f3 f1 eb ee e2 e8 e5 20 3c 27 61 64 27 20 . ....... <'ad'
2110: e8 eb e8 20 3c 3d 27 61 64 27 0d 0a 09 09 09 09 ... <='ad'......
2120: 2f 2f 20 cf ee ed ff f2 ed ee 2c 20 f7 f2 ee 20 // ......., ...
2130: ee e1 e0 20 f3 f1 eb ee e2 e8 ff 20 ed e0 e4 ee ... ....... ....
2140: 20 e8 e7 ec e5 ed e8 f2 fc 20 ed e0 20 3c 3d 27 ........ .. <='
2150: 61 27 2e 0d 0a 09 09 09 09 2f 2f 20 c2 ee e1 f9 a'.......// ....
2160: e5 ec 2c 20 f3 f1 e5 ea e0 e5 ec 20 f1 f2 f0 ee .., ....... ....
2170: ea f3 20 e4 ee 20 ed f3 e6 ed ee e9 20 e4 eb e8 .. .. ...... ...
2180: ed fb 20 e8 20 f3 e1 e8 f0 e0 e5 ec 20 ef f0 e8 .. . ....... ...
2190: e7 ed e0 ea 20 68 61 72 64 20 f3 20 e3 f0 e0 ed .... hard . ....
21a0: e8 f6 fb 2e 0d 0a 09 09 09 09 73 74 72 2e 47 65 ..........str.Ge
21b0: 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 74 68 tBufferSetLength
21c0: 28 6b 65 79 4c 65 6e 67 74 68 29 3b 0d 0a 09 09 (keyLength);....
21d0: 09 09 72 65 74 75 72 6e 20 31 3b 0d 0a 09 09 09 ..return 1;.....
21e0: 7d 0d 0a 09 09 7d 0d 0a 09 09 69 66 28 73 74 72 }....}....if(str
21f0: 4c 65 6e 67 74 68 20 3c 20 6b 65 79 4c 65 6e 67 Length < keyLeng
2200: 74 68 29 0d 0a 09 09 09 6d 65 6d 73 65 74 28 73 th).....memset(s
2210: 74 72 2e 47 65 74 42 75 66 66 65 72 53 65 74 4c tr.GetBufferSetL
2220: 65 6e 67 74 68 28 6b 65 79 4c 65 6e 67 74 68 29 ength(keyLength)
2230: 20 2b 20 73 74 72 4c 65 6e 67 74 68 2c 20 27 20 + strLength, '
2240: 27 2c 20 6b 65 79 4c 65 6e 67 74 68 20 2d 20 73 ', keyLength - s
2250: 74 72 4c 65 6e 67 74 68 29 3b 0d 0a 09 09 72 65 trLength);....re
2260: 74 75 72 6e 20 30 3b 0d 0a 09 7d 0d 0a 7d 3b 0d turn 0;...}..};.
2270: 0a 0d 0a 74 65 6d 70 6c 61 74 65 3c 69 6e 74 20 ...template<int
2280: 42 6f 75 6e 64 54 79 70 65 2c 20 42 4f 4f 4c 20 BoundType, BOOL
2290: 62 41 6c 6c 6f 77 4e 65 67 61 74 65 2c 20 42 4f bAllowNegate, BO
22a0: 4f 4c 20 62 46 6f 72 49 6e 64 65 78 3e 0d 0a 73 OL bForIndex>..s
22b0: 74 72 75 63 74 20 6e 6f 72 6d 61 6c 69 7a 65 4e truct normalizeN
22c0: 75 6d 65 72 69 63 0d 0a 7b 0d 0a 09 2f 2f 20 30 umeric..{...// 0
22d0: 20 2d 20 e2 f1 e5 20 ed ee f0 ec e0 eb fc ed ee - ... .........
22e0: 2c 20 31 20 2d 20 f1 ec e5 ed e8 f2 fc 20 e3 f0 , 1 - ....... ..
22f0: e0 ed e8 f6 f3 20 ed e0 20 ed e5 f1 f2 f0 ee e3 ..... .. .......
2300: f3 fe 2c 20 32 20 2d 20 ed e5 e2 fb ef ee eb ed .., 2 - ........
2310: e8 ec ee 2c 20 33 20 2d 20 e2 fb ef ee eb ed e8 ..., 3 - .......
2320: ec ee 20 e2 f1 e5 e3 e4 e0 0d 0a 09 69 6e 6c 69 .. .........inli
2330: 6e 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 65 ne static int se
2340: 74 28 64 6f 75 62 6c 65 20 64 62 6c 56 61 6c 2c t(double dblVal,
2350: 20 63 6f 6e 73 74 20 66 69 65 6c 64 5f 69 6e 66 const field_inf
2360: 6f 26 20 69 6e 66 6f 2c 20 43 53 74 72 69 6e 67 o& info, CString
2370: 26 20 73 74 72 56 61 6c 75 65 29 0d 0a 09 7b 0d & strValue)...{.
2380: 0a 09 09 2f 2f 20 41 6c 6c 6f 77 4e 65 67 61 74 ...// AllowNegat
2390: 65 20 e8 20 62 46 6f 72 49 6e 64 65 78 20 e4 ee e . bForIndex ..
23a0: ef f3 f1 f2 e8 ec ee 20 f2 ee eb fc ea ee 20 e4 ....... ...... .
23b0: eb ff 20 f0 e0 e2 e5 ed f1 f2 e2 e0 0d 0a 09 09 .. .............
23c0: 63 68 61 72 20 74 65 73 74 50 61 72 61 6d 5b 62 char testParam[b
23d0: 41 6c 6c 6f 77 4e 65 67 61 74 65 20 26 26 20 62 AllowNegate && b
23e0: 46 6f 72 49 6e 64 65 78 20 26 26 20 42 6f 75 6e ForIndex && Boun
23f0: 64 54 79 70 65 20 21 3d 20 30 20 3f 20 2d 31 20 dType != 0 ? -1
2400: 3a 20 31 5d 20 3d 20 7b 30 7d 3b 0d 0a 09 09 44 : 1] = {0};....D
2410: 57 4f 52 44 20 6c 65 6e 4f 66 46 69 65 6c 64 20 WORD lenOfField
2420: 3d 20 69 6e 66 6f 2e 6c 65 6e 67 74 68 28 29 2c = info.length(),
2430: 20 70 72 65 63 4f 66 46 69 65 6c 64 20 3d 20 69 precOfField = i
2440: 6e 66 6f 2e 70 72 65 63 65 73 73 69 6f 6e 28 29 nfo.precession()
2450: 3b 0d 0a 0d 0a 09 09 42 4f 4f 4c 20 62 4e 65 67 ;......BOOL bNeg
2460: 61 74 65 20 3d 20 64 62 6c 56 61 6c 20 3c 20 30 ate = dblVal < 0
2470: 3b 0d 0a 09 09 0d 0a 09 09 69 66 28 21 62 41 6c ;........if(!bAl
2480: 6c 6f 77 4e 65 67 61 74 65 20 26 26 20 62 4e 65 lowNegate && bNe
2490: 67 61 74 65 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 gate)....{.....i
24a0: 66 28 31 20 3d 3d 20 42 6f 75 6e 64 54 79 70 65 f(1 == BoundType
24b0: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 2f 2f 20 ).....{......//
24c0: c4 eb ff 20 ef ee eb ff 20 e8 ed e4 e5 ea f1 e0 ... .... .......
24d0: 20 e2 20 ea ee f2 ee f0 ee ec 20 22 ed e5 ee f2 . ....... "....
24e0: f0 e8 f6 e0 f2 e5 eb fc ed fb e5 22 2c 20 f3 f1 ...........", ..
24f0: eb ee e2 e8 e5 20 3e 20 e0 f0 e3 f3 ec e5 ed f2 ..... > ........
2500: 2c 0d 0a 09 09 09 09 2f 2f 20 e0 20 e0 f0 e3 f3 ,......// . ....
2510: ec e5 ed f2 20 ee f2 f0 e8 f6 e0 f2 e5 eb fc ed .... ...........
2520: fb e9 2e 20 d3 f1 eb ee e2 e8 e5 20 e2 fb ef ee ... ....... ....
2530: eb ed ff e5 f2 f1 ff 20 e2 f1 e5 e3 e4 e0 0d 0a ....... ........
2540: 09 09 09 09 69 66 28 62 46 6f 72 49 6e 64 65 78 ....if(bForIndex
2550: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 6d )......{.......m
2560: 65 6d 73 65 74 28 73 74 72 56 61 6c 75 65 2e 47 emset(strValue.G
2570: 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 74 etBufferSetLengt
2580: 68 28 6c 65 6e 4f 66 46 69 65 6c 64 29 2c 20 27 h(lenOfField), '
2590: 20 27 2c 20 6c 65 6e 4f 66 46 69 65 6c 64 29 3b ', lenOfField);
25a0: 0d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 30 3b .......return 0;
25b0: 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 72 65 74 ......}......ret
25c0: 75 72 6e 20 33 3b 0d 0a 09 09 09 7d 0d 0a 09 09 urn 3;.....}....
25d0: 09 65 6c 73 65 0d 0a 09 09 09 09 72 65 74 75 72 .else......retur
25e0: 6e 20 32 3b 0d 0a 09 09 7d 0d 0a 09 09 73 74 61 n 2;....}....sta
25f0: 74 69 63 4e 75 6d 56 61 6c 75 65 20 3d 20 64 62 ticNumValue = db
2600: 6c 56 61 6c 3b 0d 0a 09 09 73 74 61 74 69 63 4e lVal;....staticN
2610: 75 6d 56 61 6c 75 65 2e 52 6f 75 6e 64 28 70 72 umValue.Round(pr
2620: 65 63 4f 66 46 69 65 6c 64 29 3b 0d 0a 09 09 0d ecOfField);.....
2630: 0a 09 09 63 68 61 72 20 62 75 66 66 65 72 5b 36 ...char buffer[6
2640: 30 5d 3b 0d 0a 09 09 4c 50 53 54 52 20 70 53 74 0];....LPSTR pSt
2650: 61 72 74 20 3d 20 62 75 66 66 65 72 20 2b 20 33 art = buffer + 3
2660: 30 3b 0d 0a 09 09 63 68 61 72 2a 20 70 20 3d 20 0;....char* p =
2670: 73 74 61 74 69 63 4e 75 6d 56 61 6c 75 65 2e 43 staticNumValue.C
2680: 6f 6e 76 65 72 74 28 70 53 74 61 72 74 2c 20 6c onvert(pStart, l
2690: 65 6e 4f 66 46 69 65 6c 64 20 2b 20 32 2c 20 70 enOfField + 2, p
26a0: 72 65 63 4f 66 46 69 65 6c 64 29 3b 0d 0a 09 09 recOfField);....
26b0: 69 6e 74 20 6c 65 6e 4f 66 53 74 72 20 3d 20 73 int lenOfStr = s
26c0: 74 72 6c 65 6e 28 70 53 74 61 72 74 29 3b 0d 0a trlen(pStart);..
26d0: 0d 0a 09 09 69 66 28 21 62 41 6c 6c 6f 77 4e 65 ....if(!bAllowNe
26e0: 67 61 74 65 29 0d 0a 09 09 7b 0d 0a 09 09 09 2f gate)....{...../
26f0: 2f 20 d2 f3 f2 20 ec ee e3 f3 f2 20 e1 fb f2 fc / ... ..... ....
2700: 20 f2 ee ea e0 20 ef ee eb ee e6 e8 f2 e5 eb fc .... ..........
2710: ed fb e5 20 f7 e8 f1 eb e0 2e 20 c4 eb ff 20 ed ... ...... ... .
2720: e8 f5 20 e2 20 31 d1 20 e4 eb e8 ed e0 20 e2 f1 .. . 1. ..... ..
2730: e5 e3 e4 e0 20 e4 ee eb e6 ed e0 20 e1 fb f2 fc .... ...... ....
2740: 0d 0a 09 09 09 2f 2f 20 ed e5 20 e1 ee eb e5 e5 .....// .. .....
2750: 20 c4 eb e8 ed e0 cf ee eb ff 2d 31 20 f1 e8 ec .........-1 ...
2760: e2 ee eb ee e2 2e 0d 0a 09 09 09 69 66 28 6c 65 ...........if(le
2770: 6e 4f 66 53 74 72 20 3e 3d 20 6c 65 6e 4f 66 46 nOfStr >= lenOfF
2780: 69 65 6c 64 29 09 2f 2f 20 cf e5 f0 e5 ef ee eb ield).// .......
2790: ed e5 ed e8 e5 2e 0d 0a 09 09 09 7b 0d 0a 09 09 ...........{....
27a0: 09 09 69 66 28 30 20 3d 3d 20 42 6f 75 6e 64 54 ..if(0 == BoundT
27b0: 79 70 65 29 0d 0a 09 09 09 09 09 72 65 74 75 72 ype).......retur
27c0: 6e 20 32 3b 09 09 2f 2f 20 d0 e0 e2 e5 ed f1 f2 n 2;..// .......
27d0: e2 ee 0d 0a 09 09 09 09 65 6c 73 65 20 69 66 28 ........else if(
27e0: 31 20 3d 3d 20 42 6f 75 6e 64 54 79 70 65 29 0d 1 == BoundType).
27f0: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 32 3b 09 ......return 2;.
2800: 09 2f 2f 20 cc e8 ed e8 ec f3 ec 0d 0a 09 09 09 .// ............
2810: 09 65 6c 73 65 20 69 66 28 32 20 3d 3d 20 42 6f .else if(2 == Bo
2820: 75 6e 64 54 79 70 65 29 09 2f 2f 20 cc e0 ea f1 undType).// ....
2830: e8 ec f3 ec 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 ..........{.....
2840: 09 09 2f 2f 20 3c 74 6f 64 6f 3e 0d 0a 09 09 09 ..// <todo>.....
2850: 09 09 69 66 28 62 46 6f 72 49 6e 64 65 78 29 0d ..if(bForIndex).
2860: 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 4c ......{........L
2870: 50 53 54 52 20 70 74 72 20 3d 20 73 74 72 56 61 PSTR ptr = strVa
2880: 6c 75 65 2e 47 65 74 42 75 66 66 65 72 53 65 74 lue.GetBufferSet
2890: 4c 65 6e 67 74 68 28 6c 65 6e 4f 66 46 69 65 6c Length(lenOfFiel
28a0: 64 29 3b 0d 0a 09 09 09 09 09 09 6d 65 6d 73 65 d);........memse
28b0: 74 28 70 74 72 2c 20 27 39 27 2c 20 6c 65 6e 4f t(ptr, '9', lenO
28c0: 66 46 69 65 6c 64 29 3b 0d 0a 09 09 09 09 09 09 fField);........
28d0: 2a 70 74 72 20 3d 20 27 20 27 3b 0d 0a 09 09 09 *ptr = ' ';.....
28e0: 09 09 09 70 74 72 5b 6c 65 6e 4f 66 46 69 65 6c ...ptr[lenOfFiel
28f0: 64 20 2d 20 70 72 65 63 4f 66 46 69 65 6c 64 20 d - precOfField
2900: 2d 20 31 5d 20 3d 20 27 2e 27 3b 0d 0a 09 09 09 - 1] = '.';.....
2910: 09 09 09 72 65 74 75 72 6e 20 31 3b 0d 0a 09 09 ...return 1;....
2920: 09 09 09 7d 0d 0a 09 09 09 09 09 72 65 74 75 72 ...}.......retur
2930: 6e 20 33 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 n 3;......}.....
2940: 7d 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 0d 0a }....}....else..
2950: 09 09 7b 0d 0a 09 09 09 2f 2f 20 c2 ee e7 ec ee ..{.....// .....
2960: e6 ed fb 20 f1 eb f3 f7 e0 e8 2e 0d 0a 09 09 09 ... ............
2970: 69 66 28 6c 65 6e 4f 66 53 74 72 20 3e 20 6c 65 if(lenOfStr > le
2980: 6e 4f 66 46 69 65 6c 64 29 09 2f 2f 20 cf e5 f0 nOfField).// ...
2990: e5 ef ee eb ed e5 ed e8 e5 0d 0a 09 09 09 7b 0d ..............{.
29a0: 0a 09 09 09 09 69 66 28 30 20 3d 3d 20 42 6f 75 .....if(0 == Bou
29b0: 6e 64 54 79 70 65 29 0d 0a 09 09 09 09 09 72 65 ndType).......re
29c0: 74 75 72 6e 20 32 3b 0d 0a 0d 0a 09 09 09 09 69 turn 2;........i
29d0: 66 28 62 4e 65 67 61 74 65 29 09 2f 2f 20 ce f2 f(bNegate).// ..
29e0: f0 e8 f6 e0 f2 e5 eb fc ed ee e5 20 ef e5 f0 e5 ........... ....
29f0: ef ee eb ed e5 ed e8 e5 2e 0d 0a 09 09 09 09 7b ...............{
2a00: 0d 0a 09 09 09 09 09 69 66 28 31 20 3d 3d 20 42 .......if(1 == B
2a10: 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 09 09 oundType).......
2a20: 09 72 65 74 75 72 6e 20 33 3b 09 09 2f 2f 20 c4 .return 3;..// .
2a30: eb ff 20 ef ee eb ff 20 6e 75 6d 65 72 69 63 28 .. .... numeric(
2a40: 34 2e 31 29 20 ed e0 e8 ec e5 ed fc f8 e5 e5 20 4.1) ..........
2a50: f7 e8 f1 eb ee 20 2d 39 2e 39 20 e0 20 f3 f1 eb ..... -9.9 . ...
2a60: ee e2 e8 e5 20 3e 20 2d 39 39 2e 31 0d 0a 09 09 .... > -99.1....
2a70: 09 09 09 65 6c 73 65 20 69 66 28 32 20 3d 3d 20 ...else if(2 ==
2a80: 42 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 09 BoundType)......
2a90: 09 09 72 65 74 75 72 6e 20 32 3b 0d 0a 09 09 09 ..return 2;.....
2aa0: 09 7d 0d 0a 09 09 09 09 65 6c 73 65 20 2f 2f 20 .}......else //
2ab0: cf ee eb ee e6 e8 f2 e5 eb fc ed ee e5 20 ef e5 ............. ..
2ac0: f0 e5 ef ee eb ed e5 ed e8 e5 0d 0a 09 09 09 09 ................
2ad0: 7b 0d 0a 09 09 09 09 09 69 66 28 31 20 3d 3d 20 {.......if(1 ==
2ae0: 42 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 09 BoundType)......
2af0: 09 09 72 65 74 75 72 6e 20 32 3b 0d 0a 09 09 09 ..return 2;.....
2b00: 09 09 65 6c 73 65 20 69 66 28 32 20 3d 3d 20 42 ..else if(2 == B
2b10: 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 09 09 oundType).......
2b20: 09 72 65 74 75 72 6e 20 33 3b 0d 0a 09 09 09 09 .return 3;......
2b30: 7d 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 65 }.....}.....else
2b40: 20 69 66 28 6c 65 6e 4f 66 53 74 72 20 3d 3d 20 if(lenOfStr ==
2b50: 6c 65 6e 4f 66 46 69 65 6c 64 29 09 2f 2f 20 d7 lenOfField).// .
2b60: e8 f1 eb ee 20 f3 ec e5 f1 f2 e8 eb ee f1 fc 20 .... ..........
2b70: e2 20 e4 eb e8 ed f3 20 ef ee eb ff 2c 20 ed ee . ..... ...., ..
2b80: 20 ec ee e6 e5 f2 20 e1 fb f2 fc 20 ee f2 f0 e8 ..... .... ....
2b90: f6 e0 f2 e5 eb fc ed fb ec 0d 0a 09 09 09 7b 0d ..............{.
2ba0: 0a 09 09 09 09 69 66 28 21 62 4e 65 67 61 74 65 .....if(!bNegate
2bb0: 29 09 2f 2f 20 d7 e8 f1 eb ee 20 ef ee eb ee e6 ).// ..... .....
2bc0: e8 f2 e5 eb fc ed ee 2c 20 e7 ed e0 f7 e8 f2 20 ......., ......
2bd0: ef e5 f0 e5 ef ee eb ed e5 ed e8 e5 0d 0a 09 09 ................
2be0: 09 09 7b 0d 0a 09 09 09 09 09 69 66 28 30 20 3d ..{.......if(0 =
2bf0: 3d 20 42 6f 75 6e 64 54 79 70 65 29 09 09 2f 2f = BoundType)..//
2c00: 20 cf ee eb e5 20 ed e5 20 ec ee e6 e5 f2 20 e1 .... .. ..... .
2c10: fb f2 fc 20 f0 e0 e2 ed ee 20 f7 e8 f1 eb f3 2c ... ..... .....,
2c20: 20 e4 eb e8 ed ed e5 e5 20 ef ee eb ff 0d 0a 09 ....... .......
2c30: 09 09 09 09 09 72 65 74 75 72 6e 20 32 3b 0d 0a .....return 2;..
2c40: 09 09 09 09 09 65 6c 73 65 20 69 66 28 31 20 3d .....else if(1 =
2c50: 3d 20 42 6f 75 6e 64 54 79 70 65 29 20 2f 2f 20 = BoundType) //
2c60: cf ee eb e5 20 ed e5 20 ec ee e6 e5 f2 20 e1 fb .... .. ..... ..
2c70: f2 fc 20 e1 ee eb fc f8 e5 20 f7 e8 f1 eb e0 20 .. ...... .....
2c80: e4 eb e8 ed ed e5 e5 20 ef ee eb ff 0d 0a 09 09 ....... ........
2c90: 09 09 09 09 72 65 74 75 72 6e 20 32 3b 0d 0a 09 ....return 2;...
2ca0: 09 09 09 09 65 6c 73 65 20 69 66 28 32 20 3d 3d ....else if(2 ==
2cb0: 20 42 6f 75 6e 64 54 79 70 65 29 09 2f 2f 20 cf BoundType).// .
2cc0: ee eb e5 20 e2 f1 e5 e3 e4 e0 20 ec e5 ed fc f8 ... ...... .....
2cd0: e5 20 f7 e8 f1 eb e0 20 e4 eb e8 ed ed e5 e5 20 . ..... .......
2ce0: ef ee eb ff 0d 0a 09 09 09 09 09 09 72 65 74 75 ............retu
2cf0: 72 6e 20 33 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 rn 3;......}....
2d00: 09 7d 0d 0a 09 09 7d 0d 0a 09 09 77 68 69 6c 65 .}....}....while
2d10: 28 6c 65 6e 4f 66 53 74 72 20 3c 20 6c 65 6e 4f (lenOfStr < lenO
2d20: 66 46 69 65 6c 64 29 0d 0a 09 09 7b 0d 0a 09 09 fField)....{....
2d30: 09 2a 2d 2d 70 53 74 61 72 74 20 3d 20 27 20 27 .*--pStart = ' '
2d40: 3b 0d 0a 09 09 09 6c 65 6e 4f 66 53 74 72 2b 2b ;.....lenOfStr++
2d50: 3b 0d 0a 09 09 7d 0d 0a 09 09 6d 65 6d 63 70 79 ;....}....memcpy
2d60: 28 73 74 72 56 61 6c 75 65 2e 47 65 74 42 75 66 (strValue.GetBuf
2d70: 66 65 72 53 65 74 4c 65 6e 67 74 68 28 6c 65 6e ferSetLength(len
2d80: 4f 66 46 69 65 6c 64 29 2c 20 70 53 74 61 72 74 OfField), pStart
2d90: 2c 20 6c 65 6e 4f 66 46 69 65 6c 64 29 3b 0d 0a , lenOfField);..
2da0: 09 09 72 65 74 75 72 6e 20 30 3b 0d 0a 09 7d 0d ..return 0;...}.
2db0: 0a 7d 3b 0d 0a 0d 0a 74 65 6d 70 6c 61 74 65 3c .};....template<
2dc0: 69 6e 74 20 42 6f 75 6e 64 54 79 70 65 2c 20 42 int BoundType, B
2dd0: 4f 4f 4c 20 62 41 6c 6c 6f 77 4e 65 67 61 74 65 OOL bAllowNegate
2de0: 2c 20 42 4f 4f 4c 20 62 46 6f 72 49 6e 64 65 78 , BOOL bForIndex
2df0: 3e 0d 0a 73 74 72 75 63 74 20 6e 6f 72 6d 61 6c >..struct normal
2e00: 69 7a 65 4c 6f 6e 67 0d 0a 7b 0d 0a 09 2f 2f 20 izeLong..{...//
2e10: 30 20 2d 20 e2 f1 e5 20 ed ee f0 ec e0 eb fc ed 0 - ... ........
2e20: ee 2c 20 31 20 2d 20 f1 ec e5 ed e8 f2 fc 20 e3 ., 1 - ....... .
2e30: f0 e0 ed e8 f6 f3 20 ed e0 20 ed e5 f1 f2 f0 ee ...... .. ......
2e40: e3 f3 fe 2c 20 32 20 2d 20 ed e5 e2 fb ef ee eb ..., 2 - .......
2e50: ed e8 ec ee 2c 20 33 20 2d 20 e2 fb ef ee eb ed ...., 3 - ......
2e60: e8 ec ee 20 e2 f1 e5 e3 e4 e0 0d 0a 09 69 6e 6c ... .........inl
2e70: 69 6e 65 20 73 74 61 74 69 63 20 69 6e 74 20 73 ine static int s
2e80: 65 74 28 5f 5f 69 6e 74 36 34 26 20 6e 75 6d 56 et(__int64& numV
2e90: 61 6c 75 65 2c 20 63 6f 6e 73 74 20 66 69 65 6c alue, const fiel
2ea0: 64 5f 69 6e 66 6f 26 20 69 6e 66 6f 2c 20 43 53 d_info& info, CS
2eb0: 74 72 69 6e 67 26 20 73 74 72 56 61 6c 75 65 29 tring& strValue)
2ec0: 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 41 6c 6c 6f 77 ...{....// Allow
2ed0: 4e 65 67 61 74 65 20 e8 20 62 46 6f 72 49 6e 64 Negate . bForInd
2ee0: 65 78 20 e4 ee ef f3 f1 f2 e8 ec ee 20 f2 ee eb ex ......... ...
2ef0: fc ea ee 20 e4 eb ff 20 f0 e0 e2 e5 ed f1 f2 e2 ... ... ........
2f00: e0 0d 0a 09 09 63 68 61 72 20 74 65 73 74 50 61 .....char testPa
2f10: 72 61 6d 5b 62 41 6c 6c 6f 77 4e 65 67 61 74 65 ram[bAllowNegate
2f20: 20 26 26 20 62 46 6f 72 49 6e 64 65 78 20 26 26 && bForIndex &&
2f30: 20 42 6f 75 6e 64 54 79 70 65 20 21 3d 20 30 20 BoundType != 0
2f40: 3f 20 2d 31 20 3a 20 31 5d 20 3d 20 7b 30 7d 3b ? -1 : 1] = {0};
2f50: 0d 0a 0d 0a 09 09 44 57 4f 52 44 20 6c 65 6e 4f ......DWORD lenO
2f60: 66 46 69 65 6c 64 20 3d 20 69 6e 66 6f 2e 6c 65 fField = info.le
2f70: 6e 67 74 68 28 29 3b 0d 0a 09 09 69 66 28 21 62 ngth();....if(!b
2f80: 41 6c 6c 6f 77 4e 65 67 61 74 65 20 26 26 20 6e AllowNegate && n
2f90: 75 6d 56 61 6c 75 65 20 3c 20 30 29 0d 0a 09 09 umValue < 0)....
2fa0: 7b 0d 0a 09 09 09 69 66 28 31 20 3d 3d 20 42 6f {.....if(1 == Bo
2fb0: 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 7b 0d 0a undType).....{..
2fc0: 09 09 09 09 69 66 28 62 46 6f 72 49 6e 64 65 78 ....if(bForIndex
2fd0: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 6d )......{.......m
2fe0: 65 6d 73 65 74 28 73 74 72 56 61 6c 75 65 2e 47 emset(strValue.G
2ff0: 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 74 etBufferSetLengt
3000: 68 28 6c 65 6e 4f 66 46 69 65 6c 64 29 2c 20 27 h(lenOfField), '
3010: 20 27 2c 20 6c 65 6e 4f 66 46 69 65 6c 64 29 3b ', lenOfField);
3020: 0d 0a 09 09 09 09 09 72 65 74 75 72 6e 20 30 3b .......return 0;
3030: 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 72 65 74 ......}......ret
3040: 75 72 6e 20 33 3b 0d 0a 09 09 09 7d 0d 0a 09 09 urn 3;.....}....
3050: 09 72 65 74 75 72 6e 20 32 3b 0d 0a 09 09 7d 0d .return 2;....}.
3060: 0a 0d 0a 09 09 69 66 28 6c 65 6e 4f 66 46 69 65 .....if(lenOfFie
3070: 6c 64 20 3d 3d 20 31 29 0d 0a 09 09 7b 0d 0a 09 ld == 1)....{...
3080: 09 09 69 66 28 6e 75 6d 56 61 6c 75 65 20 3e 3d ..if(numValue >=
3090: 30 20 26 26 20 6e 75 6d 56 61 6c 75 65 20 3c 3d 0 && numValue <=
30a0: 20 31 30 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 10).....{......
30b0: 73 74 72 56 61 6c 75 65 2e 47 65 74 42 75 66 66 strValue.GetBuff
30c0: 65 72 53 65 74 4c 65 6e 67 74 68 28 31 29 5b 30 erSetLength(1)[0
30d0: 5d 20 3d 20 6e 75 6d 56 61 6c 75 65 20 2b 20 27 ] = numValue + '
30e0: 30 27 3b 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 0';......return
30f0: 30 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 69 66 28 0;.....}.....if(
3100: 30 20 3d 3d 20 42 6f 75 6e 64 54 79 70 65 29 0d 0 == BoundType).
3110: 0a 09 09 09 09 72 65 74 75 72 6e 20 32 3b 0d 0a .....return 2;..
3120: 09 09 09 65 6c 73 65 20 69 66 28 31 20 3d 3d 20 ...else if(1 ==
3130: 42 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 09 BoundType)......
3140: 72 65 74 75 72 6e 20 6e 75 6d 56 61 6c 75 65 20 return numValue
3150: 3c 20 30 20 3f 20 33 20 3a 20 32 3b 0d 0a 09 09 < 0 ? 3 : 2;....
3160: 09 65 6c 73 65 20 69 66 28 32 20 3d 3d 20 42 6f .else if(2 == Bo
3170: 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 09 72 65 undType)......re
3180: 74 75 72 6e 20 6e 75 6d 56 61 6c 75 65 20 3e 20 turn numValue >
3190: 30 20 3f 20 33 20 3a 20 32 3b 0d 0a 09 09 7d 0d 0 ? 3 : 2;....}.
31a0: 0a 09 09 0d 0a 09 09 69 6e 74 20 6c 65 6e 4f 66 .......int lenOf
31b0: 53 74 72 20 3d 20 30 3b 0d 0a 09 09 63 68 61 72 Str = 0;....char
31c0: 20 62 75 66 66 65 72 5b 36 30 5d 3b 0d 0a 09 09 buffer[60];....
31d0: 4c 50 53 54 52 20 70 53 74 61 72 74 20 3d 20 62 LPSTR pStart = b
31e0: 75 66 66 65 72 20 2b 20 36 30 3b 0d 0a 0d 0a 09 uffer + 60;.....
31f0: 09 5f 5f 69 6e 74 36 34 20 76 61 6c 20 3d 20 6e .__int64 val = n
3200: 75 6d 56 61 6c 75 65 20 3c 20 30 20 3f 20 2d 6e umValue < 0 ? -n
3210: 75 6d 56 61 6c 75 65 20 3a 20 6e 75 6d 56 61 6c umValue : numVal
3220: 75 65 3b 0d 0a 09 09 64 6f 0d 0a 09 09 7b 0d 0a ue;....do....{..
3230: 09 09 09 2a 2d 2d 70 53 74 61 72 74 20 3d 20 28 ...*--pStart = (
3240: 76 61 6c 20 25 20 31 30 29 20 2b 20 27 30 27 3b val % 10) + '0';
3250: 0d 0a 09 09 09 6c 65 6e 4f 66 53 74 72 2b 2b 3b .....lenOfStr++;
3260: 0d 0a 09 09 09 76 61 6c 20 2f 3d 20 31 30 3b 0d .....val /= 10;.
3270: 0a 09 09 7d 77 68 69 6c 65 28 76 61 6c 20 26 26 ...}while(val &&
3280: 20 6c 65 6e 4f 66 53 74 72 20 3c 20 6c 65 6e 4f lenOfStr < lenO
3290: 66 46 69 65 6c 64 29 3b 0d 0a 0d 0a 09 09 69 66 fField);......if
32a0: 28 21 62 41 6c 6c 6f 77 4e 65 67 61 74 65 29 0d (!bAllowNegate).
32b0: 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 d2 f3 f2 20 ...{.....// ...
32c0: ec ee e3 f3 f2 20 e1 fb f2 fc 20 f2 ee ea e0 20 ..... .... ....
32d0: ef ee eb ee e6 e8 f2 e5 eb fc ed fb e5 20 f7 e8 ............. ..
32e0: f1 eb e0 2e 20 c4 eb ff 20 ed e8 f5 20 e2 20 31 .... ... ... . 1
32f0: d1 20 e4 eb e8 ed e0 20 e2 f1 e5 e3 e4 e0 20 e4 . ..... ...... .
3300: ee eb e6 ed e0 20 e1 fb f2 fc 0d 0a 09 09 09 2f ..... ........./
3310: 2f 20 ed e5 20 e1 ee eb e5 e5 20 c4 eb e8 ed e0 / .. ..... .....
3320: cf ee eb ff 2d 31 20 f1 e8 ec e2 ee eb ee e2 2c ....-1 ........,
3330: 20 ea f0 ee ec e5 20 ef ee eb e5 e9 20 e4 eb e8 ..... ..... ...
3340: ed ed ee e9 20 31 20 28 69 73 66 6f 6c 64 65 72 .... 1 (isfolder
3350: 20 e8 20 f2 ef 29 0d 0a 09 09 09 69 66 28 6c 65 . ..).....if(le
3360: 6e 4f 66 53 74 72 20 3d 3d 20 6c 65 6e 4f 66 46 nOfStr == lenOfF
3370: 69 65 6c 64 29 09 2f 2f 20 cf e5 f0 e5 ef ee eb ield).// .......
3380: ed e5 ed e8 e5 2e 0d 0a 09 09 09 7b 0d 0a 09 09 ...........{....
3390: 09 09 69 66 28 30 20 3d 3d 20 42 6f 75 6e 64 54 ..if(0 == BoundT
33a0: 79 70 65 29 0d 0a 09 09 09 09 09 72 65 74 75 72 ype).......retur
33b0: 6e 20 32 3b 09 09 2f 2f 20 d0 e0 e2 e5 ed f1 f2 n 2;..// .......
33c0: e2 ee 0d 0a 09 09 09 09 65 6c 73 65 20 69 66 28 ........else if(
33d0: 31 20 3d 3d 20 42 6f 75 6e 64 54 79 70 65 29 0d 1 == BoundType).
33e0: 0a 09 09 09 09 09 72 65 74 75 72 6e 20 32 3b 09 ......return 2;.
33f0: 09 2f 2f 20 cc e8 ed e8 ec f3 ec 0d 0a 09 09 09 .// ............
3400: 09 65 6c 73 65 20 69 66 28 32 20 3d 3d 20 42 6f .else if(2 == Bo
3410: 75 6e 64 54 79 70 65 29 09 2f 2f 20 cc e0 ea f1 undType).// ....
3420: e8 ec f3 ec 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 ..........{.....
3430: 09 09 2f 2f 20 3c 74 6f 64 6f 3e 0d 0a 09 09 09 ..// <todo>.....
3440: 09 09 69 66 28 62 46 6f 72 49 6e 64 65 78 29 0d ..if(bForIndex).
3450: 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 4c ......{........L
3460: 50 53 54 52 20 70 74 72 20 3d 20 73 74 72 56 61 PSTR ptr = strVa
3470: 6c 75 65 2e 47 65 74 42 75 66 66 65 72 53 65 74 lue.GetBufferSet
3480: 4c 65 6e 67 74 68 28 6c 65 6e 4f 66 46 69 65 6c Length(lenOfFiel
3490: 64 29 3b 0d 0a 09 09 09 09 09 09 6d 65 6d 73 65 d);........memse
34a0: 74 28 70 74 72 2c 20 27 39 27 2c 20 6c 65 6e 4f t(ptr, '9', lenO
34b0: 66 46 69 65 6c 64 29 3b 0d 0a 09 09 09 09 09 09 fField);........
34c0: 2a 70 74 72 20 3d 20 27 20 27 3b 0d 0a 09 09 09 *ptr = ' ';.....
34d0: 09 09 09 72 65 74 75 72 6e 20 31 3b 0d 0a 09 09 ...return 1;....
34e0: 09 09 09 7d 0d 0a 09 09 09 09 09 72 65 74 75 72 ...}.......retur
34f0: 6e 20 33 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 n 3;......}.....
3500: 7d 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 0d 0a }....}....else..
3510: 09 09 7b 0d 0a 09 09 09 2f 2f 20 c2 ee e7 ec ee ..{.....// .....
3520: e6 ed fb 20 f1 eb f3 f7 e0 e8 2e 0d 0a 09 09 09 ... ............
3530: 69 66 28 6c 65 6e 4f 66 53 74 72 20 3d 3d 20 6c if(lenOfStr == l
3540: 65 6e 4f 66 46 69 65 6c 64 29 0d 0a 09 09 09 7b enOfField).....{
3550: 0d 0a 09 09 09 09 69 66 28 30 20 3d 3d 20 42 6f ......if(0 == Bo
3560: 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 09 09 72 undType).......r
3570: 65 74 75 72 6e 20 32 3b 0d 0a 09 09 09 09 65 6c eturn 2;......el
3580: 73 65 20 69 66 28 31 20 3d 3d 20 42 6f 75 6e 64 se if(1 == Bound
3590: 54 79 70 65 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 Type)......{....
35a0: 09 09 09 69 66 28 6e 75 6d 56 61 6c 75 65 20 3c ...if(numValue <
35b0: 20 30 29 0d 0a 09 09 09 09 09 09 72 65 74 75 72 0)........retur
35c0: 6e 20 33 3b 0d 0a 09 09 09 09 09 65 6c 73 65 0d n 3;.......else.
35d0: 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 32 3b .......return 2;
35e0: 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 65 6c 73 ......}......els
35f0: 65 20 69 66 28 32 20 3d 3d 20 42 6f 75 6e 64 54 e if(2 == BoundT
3600: 79 70 65 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 ype)......{.....
3610: 09 09 69 66 28 6e 75 6d 56 61 6c 75 65 20 3c 20 ..if(numValue <
3620: 30 29 0d 0a 09 09 09 09 09 09 72 65 74 75 72 6e 0)........return
3630: 20 32 3b 0d 0a 09 09 09 09 09 65 6c 73 65 0d 0a 2;.......else..
3640: 09 09 09 09 09 09 72 65 74 75 72 6e 20 33 3b 0d ......return 3;.
3650: 0a 09 09 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 .....}.....}....
3660: 7d 0d 0a 09 09 69 66 28 6e 75 6d 56 61 6c 75 65 }....if(numValue
3670: 20 3c 20 30 29 0d 0a 09 09 7b 0d 0a 09 09 09 2a < 0)....{.....*
3680: 2d 2d 70 53 74 61 72 74 20 3d 20 27 2d 27 3b 0d --pStart = '-';.
3690: 0a 09 09 09 6c 65 6e 4f 66 53 74 72 2b 2b 3b 0d ....lenOfStr++;.
36a0: 0a 09 09 7d 0d 0a 09 09 6c 65 6e 4f 66 53 74 72 ...}....lenOfStr
36b0: 20 3d 20 6c 65 6e 4f 66 46 69 65 6c 64 20 2d 20 = lenOfField -
36c0: 6c 65 6e 4f 66 53 74 72 3b 0d 0a 0d 0a 09 09 77 lenOfStr;......w
36d0: 68 69 6c 65 28 6c 65 6e 4f 66 53 74 72 29 0d 0a hile(lenOfStr)..
36e0: 09 09 7b 0d 0a 09 09 09 2a 2d 2d 70 53 74 61 72 ..{.....*--pStar
36f0: 74 20 3d 20 27 20 27 3b 0d 0a 09 09 09 6c 65 6e t = ' ';.....len
3700: 4f 66 53 74 72 2d 2d 3b 0d 0a 09 09 7d 0d 0a 09 OfStr--;....}...
3710: 09 6d 65 6d 63 70 79 28 73 74 72 56 61 6c 75 65 .memcpy(strValue
3720: 2e 47 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e .GetBufferSetLen
3730: 67 74 68 28 6c 65 6e 4f 66 46 69 65 6c 64 29 2c gth(lenOfField),
3740: 20 70 53 74 61 72 74 2c 20 6c 65 6e 4f 66 46 69 pStart, lenOfFi
3750: 65 6c 64 29 3b 0d 0a 09 09 72 65 74 75 72 6e 20 eld);....return
3760: 30 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 74 65 0;...}..};....te
3770: 6d 70 6c 61 74 65 3c 69 6e 74 20 42 6f 75 6e 64 mplate<int Bound
3780: 54 79 70 65 3e 0d 0a 73 74 72 75 63 74 20 61 64 Type>..struct ad
3790: 64 54 65 73 74 54 65 78 74 0d 0a 7b 0d 0a 09 69 dTestText..{...i
37a0: 6e 6c 69 6e 65 20 73 74 61 74 69 63 20 42 4f 4f nline static BOO
37b0: 4c 20 61 64 64 28 63 6f 6e 73 74 20 75 6e 73 69 L add(const unsi
37c0: 67 6e 65 64 20 63 68 61 72 2a 26 20 70 42 79 74 gned char*& pByt
37d0: 65 43 6f 64 65 2c 20 43 53 74 72 69 6e 67 26 20 eCode, CString&
37e0: 76 61 6c 75 65 2c 20 63 6f 6e 73 74 20 43 56 74 value, const CVt
37f0: 61 62 49 6e 66 6f 26 20 74 61 62 6c 65 2c 20 44 abInfo& table, D
3800: 57 4f 52 44 20 62 48 61 72 64 2c 20 74 65 73 74 WORD bHard, test
3810: 43 6f 6e 73 74 72 61 69 6e 74 2a 26 20 70 43 29 Constraint*& pC)
3820: 0d 0a 09 7b 0d 0a 09 09 44 57 4f 52 44 20 64 77 ...{....DWORD dw
3830: 46 69 65 6c 64 20 3d 20 72 65 61 64 4e 75 6d 28 Field = readNum(
3840: 70 42 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 63 pByteCode);....c
3850: 6f 6e 73 74 20 6f 6e 65 5f 66 69 65 6c 64 26 20 onst one_field&
3860: 66 69 65 6c 64 20 3d 20 74 61 62 6c 65 2e 66 69 field = table.fi
3870: 65 6c 64 28 64 77 46 69 65 6c 64 29 3b 0d 0a 09 eld(dwField);...
3880: 09 0d 0a 09 09 69 66 28 66 69 65 6c 64 2e 69 73 .....if(field.is
3890: 46 69 65 6c 64 28 29 29 0d 0a 09 09 7b 0d 0a 09 Field())....{...
38a0: 09 09 63 6f 6e 73 74 20 66 69 65 6c 64 5f 69 6e ..const field_in
38b0: 66 6f 26 20 66 69 20 3d 20 74 61 62 6c 65 2e 70 fo& fi = table.p
38c0: 68 69 73 49 6e 66 6f 28 29 2e 66 69 65 6c 64 28 hisInfo().field(
38d0: 66 69 65 6c 64 2e 70 6f 73 28 29 29 3b 0d 0a 09 field.pos());...
38e0: 09 09 44 57 4f 52 44 20 6c 65 6e 20 3d 20 66 69 ..DWORD len = fi
38f0: 2e 6c 65 6e 67 74 68 28 29 3b 0d 0a 09 09 09 69 .length();.....i
3900: 6e 74 20 72 65 73 20 3d 20 6e 6f 72 6d 61 6c 69 nt res = normali
3910: 7a 65 53 74 72 69 6e 67 3c 42 6f 75 6e 64 54 79 zeString<BoundTy
3920: 70 65 3e 3a 3a 73 65 74 28 76 61 6c 75 65 2c 20 pe>::set(value,
3930: 6c 65 6e 29 3b 0d 0a 09 09 09 69 66 28 72 65 73 len);.....if(res
3940: 20 3d 3d 20 32 29 0d 0a 09 09 09 09 72 65 74 75 == 2)......retu
3950: 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 09 65 6c rn FALSE;.....el
3960: 73 65 20 69 66 28 72 65 73 20 3d 3d 20 31 29 0d se if(res == 1).
3970: 0a 09 09 09 09 62 48 61 72 64 20 3d 20 46 41 4c .....bHard = FAL
3980: 53 45 3b 0d 0a 09 09 09 69 66 28 30 20 3d 3d 20 SE;.....if(0 ==
3990: 42 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 09 BoundType)......
39a0: 6e 65 77 20 74 63 54 65 73 74 46 69 65 6c 64 3c new tcTestField<
39b0: 74 6f 45 71 75 61 6c 2c 20 74 65 78 74 5f 6e 6f toEqual, text_no
39c0: 63 61 73 65 5f 63 6f 6d 70 61 72 65 3e 28 70 43 case_compare>(pC
39d0: 2c 20 76 61 6c 75 65 2c 20 66 69 29 3b 0d 0a 09 , value, fi);...
39e0: 09 09 65 6c 73 65 20 69 66 28 31 20 3d 3d 20 42 ..else if(1 == B
39f0: 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 7b 0d oundType).....{.
3a00: 0a 09 09 09 09 69 66 28 62 48 61 72 64 29 0d 0a .....if(bHard)..
3a10: 09 09 09 09 09 6e 65 77 20 74 63 54 65 73 74 46 .....new tcTestF
3a20: 69 65 6c 64 3c 74 6f 47 72 61 74 2c 20 74 65 78 ield<toGrat, tex
3a30: 74 5f 6e 6f 63 61 73 65 5f 63 6f 6d 70 61 72 65 t_nocase_compare
3a40: 3e 28 70 43 2c 20 76 61 6c 75 65 2c 20 66 69 29 >(pC, value, fi)
3a50: 3b 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 ;......else.....
3a60: 09 09 6e 65 77 20 74 63 54 65 73 74 46 69 65 6c ..new tcTestFiel
3a70: 64 3c 74 6f 47 72 61 74 45 71 2c 20 74 65 78 74 d<toGratEq, text
3a80: 5f 6e 6f 63 61 73 65 5f 63 6f 6d 70 61 72 65 3e _nocase_compare>
3a90: 28 70 43 2c 20 76 61 6c 75 65 2c 20 66 69 29 3b (pC, value, fi);
3aa0: 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 65 20 .....}.....else
3ab0: 69 66 28 32 20 3d 3d 20 42 6f 75 6e 64 54 79 70 if(2 == BoundTyp
3ac0: 65 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 e).....{......if
3ad0: 28 62 48 61 72 64 29 0d 0a 09 09 09 09 09 6e 65 (bHard).......ne
3ae0: 77 20 74 63 54 65 73 74 46 69 65 6c 64 3c 74 6f w tcTestField<to
3af0: 4c 65 73 73 2c 20 74 65 78 74 5f 6e 6f 63 61 73 Less, text_nocas
3b00: 65 5f 63 6f 6d 70 61 72 65 3e 28 70 43 2c 20 76 e_compare>(pC, v
3b10: 61 6c 75 65 2c 20 66 69 29 3b 0d 0a 09 09 09 09 alue, fi);......
3b20: 65 6c 73 65 0d 0a 09 09 09 09 09 6e 65 77 20 74 else.......new t
3b30: 63 54 65 73 74 46 69 65 6c 64 3c 74 6f 4c 65 73 cTestField<toLes
3b40: 73 45 71 2c 20 74 65 78 74 5f 6e 6f 63 61 73 65 sEq, text_nocase
3b50: 5f 63 6f 6d 70 61 72 65 3e 28 70 43 2c 20 76 61 _compare>(pC, va
3b60: 6c 75 65 2c 20 66 69 29 3b 0d 0a 09 09 09 7d 0d lue, fi);.....}.
3b70: 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28 ...}....else if(
3b80: 66 69 65 6c 64 2e 69 73 49 6e 64 65 78 28 29 29 field.isIndex())
3b90: 0d 0a 09 09 7b 0d 0a 09 09 09 63 6f 6e 73 74 20 ....{.....const
3ba0: 69 6e 64 65 78 5f 69 6e 66 6f 2a 20 70 49 6e 64 index_info* pInd
3bb0: 65 78 49 6e 66 6f 20 3d 20 74 61 62 6c 65 2e 70 exInfo = table.p
3bc0: 68 69 73 49 6e 66 6f 28 29 2e 69 6e 64 65 78 28 hisInfo().index(
3bd0: 66 69 65 6c 64 2e 70 6f 73 28 29 29 3b 0d 0a 09 field.pos());...
3be0: 09 09 44 57 4f 52 44 20 6c 65 6e 20 3d 20 70 49 ..DWORD len = pI
3bf0: 6e 64 65 78 49 6e 66 6f 2d 3e 6b 65 79 53 69 7a ndexInfo->keySiz
3c00: 65 28 29 20 2b 20 31 30 3b 0d 0a 09 09 09 69 6e e() + 10;.....in
3c10: 74 20 72 65 73 20 3d 20 6e 6f 72 6d 61 6c 69 7a t res = normaliz
3c20: 65 53 74 72 69 6e 67 3c 42 6f 75 6e 64 54 79 70 eString<BoundTyp
3c30: 65 3e 3a 3a 73 65 74 28 76 61 6c 75 65 2c 20 6c e>::set(value, l
3c40: 65 6e 29 3b 0d 0a 09 09 09 69 66 28 72 65 73 20 en);.....if(res
3c50: 3d 3d 20 32 29 0d 0a 09 09 09 09 72 65 74 75 72 == 2)......retur
3c60: 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 09 65 6c 73 n FALSE;.....els
3c70: 65 20 69 66 28 72 65 73 20 3d 3d 20 31 29 0d 0a e if(res == 1)..
3c80: 09 09 09 09 62 48 61 72 64 20 3d 20 30 3b 0d 0a ....bHard = 0;..
3c90: 09 09 09 69 66 28 30 20 3d 3d 20 42 6f 75 6e 64 ...if(0 == Bound
3ca0: 54 79 70 65 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 Type).....{.....
3cb0: 09 6e 65 77 20 74 63 46 75 6c 6c 4b 65 79 3c 74 .new tcFullKey<t
3cc0: 6f 45 71 75 61 6c 3e 28 70 43 2c 20 76 61 6c 75 oEqual>(pC, valu
3cd0: 65 2c 20 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d e, pIndexInfo);.
3ce0: 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 65 20 69 ....}.....else i
3cf0: 66 28 31 20 3d 3d 20 42 6f 75 6e 64 54 79 70 65 f(1 == BoundType
3d00: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 ).....{......if(
3d10: 62 48 61 72 64 29 0d 0a 09 09 09 09 09 6e 65 77 bHard).......new
3d20: 20 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 47 72 61 tcFullKey<toGra
3d30: 74 3e 28 70 43 2c 20 76 61 6c 75 65 2c 20 70 49 t>(pC, value, pI
3d40: 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 09 09 ndexInfo);......
3d50: 65 6c 73 65 0d 0a 09 09 09 09 09 6e 65 77 20 74 else.......new t
3d60: 63 46 75 6c 6c 4b 65 79 3c 74 6f 47 72 61 74 45 cFullKey<toGratE
3d70: 71 3e 28 70 43 2c 20 76 61 6c 75 65 2c 20 70 49 q>(pC, value, pI
3d80: 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 09 7d ndexInfo);.....}
3d90: 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 32 20 3d .....else if(2 =
3da0: 3d 20 42 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 = BoundType)....
3db0: 09 7b 0d 0a 09 09 09 09 69 66 28 62 48 61 72 64 .{......if(bHard
3dc0: 29 0d 0a 09 09 09 09 09 6e 65 77 20 74 63 46 75 ).......new tcFu
3dd0: 6c 6c 4b 65 79 3c 74 6f 4c 65 73 73 3e 28 70 43 llKey<toLess>(pC
3de0: 2c 20 76 61 6c 75 65 2c 20 70 49 6e 64 65 78 49 , value, pIndexI
3df0: 6e 66 6f 29 3b 0d 0a 09 09 09 09 65 6c 73 65 0d nfo);......else.
3e00: 0a 09 09 09 09 09 6e 65 77 20 74 63 46 75 6c 6c ......new tcFull
3e10: 4b 65 79 3c 74 6f 4c 65 73 73 45 71 3e 28 70 43 Key<toLessEq>(pC
3e20: 2c 20 76 61 6c 75 65 2c 20 70 49 6e 64 65 78 49 , value, pIndexI
3e30: 6e 66 6f 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d nfo);.....}....}
3e40: 0d 0a 09 09 65 6c 73 65 20 69 66 28 66 69 65 6c ....else if(fiel
3e50: 64 2e 69 73 4c 6e 53 74 72 28 29 29 0d 0a 09 09 d.isLnStr())....
3e60: 7b 0d 0a 09 09 09 44 57 4f 52 44 20 6d 64 49 44 {.....DWORD mdID
3e70: 20 3d 20 66 69 65 6c 64 2e 70 6f 73 28 29 3b 0d = field.pos();.
3e80: 0a 09 09 09 69 66 28 30 20 3d 3d 20 42 6f 75 6e ....if(0 == Boun
3e90: 64 54 79 70 65 29 0d 0a 09 09 09 7b 0d 0a 09 09 dType).....{....
3ea0: 09 09 6e 65 77 20 74 63 4c 6f 6e 67 53 74 72 3c ..new tcLongStr<
3eb0: 74 6f 45 71 75 61 6c 3e 28 70 43 2c 20 76 61 6c toEqual>(pC, val
3ec0: 75 65 2c 20 6d 64 49 44 29 3b 0d 0a 09 09 09 7d ue, mdID);.....}
3ed0: 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 31 20 3d .....else if(1 =
3ee0: 3d 20 42 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 = BoundType)....
3ef0: 09 7b 0d 0a 09 09 09 09 69 66 28 62 48 61 72 64 .{......if(bHard
3f00: 29 0d 0a 09 09 09 09 09 6e 65 77 20 74 63 4c 6f ).......new tcLo
3f10: 6e 67 53 74 72 3c 74 6f 47 72 61 74 3e 28 70 43 ngStr<toGrat>(pC
3f20: 2c 20 76 61 6c 75 65 2c 20 6d 64 49 44 29 3b 0d , value, mdID);.
3f30: 0a 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 .....else.......
3f40: 6e 65 77 20 74 63 4c 6f 6e 67 53 74 72 3c 74 6f new tcLongStr<to
3f50: 47 72 61 74 45 71 3e 28 70 43 2c 20 76 61 6c 75 GratEq>(pC, valu
3f60: 65 2c 20 6d 64 49 44 29 3b 0d 0a 09 09 09 7d 0d e, mdID);.....}.
3f70: 0a 09 09 09 65 6c 73 65 20 69 66 28 32 20 3d 3d ....else if(2 ==
3f80: 20 42 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 09 BoundType).....
3f90: 7b 0d 0a 09 09 09 09 69 66 28 62 48 61 72 64 29 {......if(bHard)
3fa0: 0d 0a 09 09 09 09 09 6e 65 77 20 74 63 4c 6f 6e .......new tcLon
3fb0: 67 53 74 72 3c 74 6f 4c 65 73 73 3e 28 70 43 2c gStr<toLess>(pC,
3fc0: 20 76 61 6c 75 65 2c 20 6d 64 49 44 29 3b 0d 0a value, mdID);..
3fd0: 09 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 09 6e ....else.......n
3fe0: 65 77 20 74 63 4c 6f 6e 67 53 74 72 3c 74 6f 4c ew tcLongStr<toL
3ff0: 65 73 73 45 71 3e 28 70 43 2c 20 76 61 6c 75 65 essEq>(pC, value
4000: 2c 20 6d 64 49 44 29 3b 0d 0a 09 09 09 7d 0d 0a , mdID);.....}..
4010: 09 09 7d 0d 0a 09 09 72 65 74 75 72 6e 20 54 52 ..}....return TR
4020: 55 45 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 74 UE;...}..};....t
4030: 65 6d 70 6c 61 74 65 3c 69 6e 74 20 42 6f 75 6e emplate<int Boun
4040: 64 54 79 70 65 3e 0d 0a 73 74 72 75 63 74 20 61 dType>..struct a
4050: 64 64 54 65 73 74 4e 75 6d 65 72 69 63 0d 0a 7b ddTestNumeric..{
4060: 0d 0a 09 69 6e 6c 69 6e 65 20 73 74 61 74 69 63 ...inline static
4070: 20 42 4f 4f 4c 20 61 64 64 28 63 6f 6e 73 74 20 BOOL add(const
4080: 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 26 20 unsigned char*&
4090: 70 42 79 74 65 43 6f 64 65 2c 20 64 6f 75 62 6c pByteCode, doubl
40a0: 65 20 76 61 6c 75 65 2c 20 63 6f 6e 73 74 20 43 e value, const C
40b0: 56 74 61 62 49 6e 66 6f 26 20 74 61 62 6c 65 2c VtabInfo& table,
40c0: 20 44 57 4f 52 44 20 62 48 61 72 64 2c 20 74 65 DWORD bHard, te
40d0: 73 74 43 6f 6e 73 74 72 61 69 6e 74 2a 26 20 70 stConstraint*& p
40e0: 43 29 0d 0a 09 7b 0d 0a 09 09 73 74 61 74 69 63 C)...{....static
40f0: 20 43 53 74 72 69 6e 67 20 73 74 72 56 61 6c 75 CString strValu
4100: 65 3b 0d 0a 09 09 44 57 4f 52 44 20 64 77 46 69 e;....DWORD dwFi
4110: 65 6c 64 20 3d 20 72 65 61 64 4e 75 6d 28 70 42 eld = readNum(pB
4120: 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 63 6f 6e yteCode);....con
4130: 73 74 20 66 69 65 6c 64 5f 69 6e 66 6f 26 20 66 st field_info& f
4140: 69 65 6c 64 20 3d 20 74 61 62 6c 65 2e 70 68 69 ield = table.phi
4150: 73 49 6e 66 6f 28 29 2e 66 69 65 6c 64 28 64 77 sInfo().field(dw
4160: 46 69 65 6c 64 29 3b 0d 0a 09 09 69 6e 74 20 72 Field);....int r
4170: 65 73 20 3d 20 6e 6f 72 6d 61 6c 69 7a 65 4e 75 es = normalizeNu
4180: 6d 65 72 69 63 3c 42 6f 75 6e 64 54 79 70 65 2c meric<BoundType,
4190: 20 54 52 55 45 2c 20 46 41 4c 53 45 3e 3a 3a 73 TRUE, FALSE>::s
41a0: 65 74 28 76 61 6c 75 65 2c 20 66 69 65 6c 64 2c et(value, field,
41b0: 20 73 74 72 56 61 6c 75 65 29 3b 0d 0a 09 09 69 strValue);....i
41c0: 66 28 72 65 73 20 3d 3d 20 33 29 0d 0a 09 09 09 f(res == 3).....
41d0: 72 65 74 75 72 6e 20 54 52 55 45 3b 09 2f 2f 20 return TRUE;.//
41e0: d3 f1 eb ee e2 e8 e5 20 e2 f1 e5 e3 e4 e0 20 e2 ....... ...... .
41f0: fb ef ee eb ed e8 ec ee 0d 0a 09 09 65 6c 73 65 ............else
4200: 20 69 66 28 72 65 73 20 3d 3d 20 32 29 09 2f 2f if(res == 2).//
4210: 20 d3 f1 eb ee e2 e8 e5 20 ed e5 20 e2 fb ef ee ....... .. ....
4220: eb ed e8 ec ee 0d 0a 09 09 09 72 65 74 75 72 6e ..........return
4230: 20 46 41 4c 53 45 3b 0d 0a 09 09 65 6c 73 65 20 FALSE;....else
4240: 69 66 28 72 65 73 20 3d 3d 20 31 29 0d 0a 09 09 if(res == 1)....
4250: 09 62 48 61 72 64 20 3d 20 30 3b 0d 0a 09 09 69 .bHard = 0;....i
4260: 66 28 30 20 3d 3d 20 42 6f 75 6e 64 54 79 70 65 f(0 == BoundType
4270: 29 0d 0a 09 09 7b 0d 0a 09 09 09 6e 65 77 20 74 )....{.....new t
4280: 63 54 65 73 74 46 69 65 6c 64 3c 74 6f 45 71 75 cTestField<toEqu
4290: 61 6c 2c 20 6e 75 6d 65 72 69 63 5f 63 6f 6d 70 al, numeric_comp
42a0: 61 72 65 3e 28 70 43 2c 20 73 74 72 56 61 6c 75 are>(pC, strValu
42b0: 65 2c 20 66 69 65 6c 64 29 3b 0d 0a 09 09 7d 0d e, field);....}.
42c0: 0a 09 09 65 6c 73 65 20 69 66 28 31 20 3d 3d 20 ...else if(1 ==
42d0: 42 6f 75 6e 64 54 79 70 65 29 0d 0a 09 09 7b 0d BoundType)....{.
42e0: 0a 09 09 09 69 66 28 62 48 61 72 64 29 0d 0a 09 ....if(bHard)...
42f0: 09 09 09 6e 65 77 20 74 63 54 65 73 74 46 69 65 ...new tcTestFie
4300: 6c 64 3c 74 6f 47 72 61 74 2c 20 6e 75 6d 65 72 ld<toGrat, numer
4310: 69 63 5f 63 6f 6d 70 61 72 65 3e 28 70 43 2c 20 ic_compare>(pC,
4320: 73 74 72 56 61 6c 75 65 2c 20 66 69 65 6c 64 29 strValue, field)
4330: 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 ;.....else......
4340: 6e 65 77 20 74 63 54 65 73 74 46 69 65 6c 64 3c new tcTestField<
4350: 74 6f 47 72 61 74 45 71 2c 20 6e 75 6d 65 72 69 toGratEq, numeri
4360: 63 5f 63 6f 6d 70 61 72 65 3e 28 70 43 2c 20 73 c_compare>(pC, s
4370: 74 72 56 61 6c 75 65 2c 20 66 69 65 6c 64 29 3b trValue, field);
4380: 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 ....}....else if
4390: 28 32 20 3d 3d 20 42 6f 75 6e 64 54 79 70 65 29 (2 == BoundType)
43a0: 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 62 48 61 ....{.....if(bHa
43b0: 72 64 29 0d 0a 09 09 09 09 6e 65 77 20 74 63 54 rd)......new tcT
43c0: 65 73 74 46 69 65 6c 64 3c 74 6f 4c 65 73 73 2c estField<toLess,
43d0: 20 6e 75 6d 65 72 69 63 5f 63 6f 6d 70 61 72 65 numeric_compare
43e0: 3e 28 70 43 2c 20 73 74 72 56 61 6c 75 65 2c 20 >(pC, strValue,
43f0: 66 69 65 6c 64 29 3b 0d 0a 09 09 09 65 6c 73 65 field);.....else
4400: 0d 0a 09 09 09 09 6e 65 77 20 74 63 54 65 73 74 ......new tcTest
4410: 46 69 65 6c 64 3c 74 6f 4c 65 73 73 45 71 2c 20 Field<toLessEq,
4420: 6e 75 6d 65 72 69 63 5f 63 6f 6d 70 61 72 65 3e numeric_compare>
4430: 28 70 43 2c 20 73 74 72 56 61 6c 75 65 2c 20 66 (pC, strValue, f
4440: 69 65 6c 64 29 3b 0d 0a 09 09 7d 0d 0a 09 09 72 ield);....}....r
4450: 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 7d 0d eturn TRUE;...}.
4460: 0a 7d 3b 0d 0a 20 0d 0a 74 65 6d 70 6c 61 74 65 .};.. ..template
4470: 3c 69 6e 74 20 42 6f 75 6e 64 54 79 70 65 3e 0d <int BoundType>.
4480: 0a 73 74 72 75 63 74 20 61 64 64 54 65 73 74 4c .struct addTestL
4490: 6f 6e 67 0d 0a 7b 0d 0a 09 69 6e 6c 69 6e 65 20 ong..{...inline
44a0: 73 74 61 74 69 63 20 42 4f 4f 4c 20 61 64 64 28 static BOOL add(
44b0: 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 const unsigned c
44c0: 68 61 72 2a 26 20 70 42 79 74 65 43 6f 64 65 2c har*& pByteCode,
44d0: 20 5f 5f 69 6e 74 36 34 20 76 61 6c 75 65 2c 20 __int64 value,
44e0: 63 6f 6e 73 74 20 43 56 74 61 62 49 6e 66 6f 26 const CVtabInfo&
44f0: 20 74 61 62 6c 65 2c 20 44 57 4f 52 44 20 62 48 table, DWORD bH
4500: 61 72 64 2c 20 74 65 73 74 43 6f 6e 73 74 72 61 ard, testConstra
4510: 69 6e 74 2a 26 20 70 43 29 0d 0a 09 7b 0d 0a 09 int*& pC)...{...
4520: 09 73 74 61 74 69 63 20 43 53 74 72 69 6e 67 20 .static CString
4530: 73 74 72 56 61 6c 75 65 3b 0d 0a 09 09 44 57 4f strValue;....DWO
4540: 52 44 20 64 77 46 69 65 6c 64 20 3d 20 72 65 61 RD dwField = rea
4550: 64 4e 75 6d 28 70 42 79 74 65 43 6f 64 65 29 3b dNum(pByteCode);
4560: 0d 0a 09 09 63 6f 6e 73 74 20 66 69 65 6c 64 5f ....const field_
4570: 69 6e 66 6f 26 20 66 69 65 6c 64 20 3d 20 74 61 info& field = ta
4580: 62 6c 65 2e 70 68 69 73 49 6e 66 6f 28 29 2e 66 ble.phisInfo().f
4590: 69 65 6c 64 28 64 77 46 69 65 6c 64 29 3b 0d 0a ield(dwField);..
45a0: 09 09 69 6e 74 20 72 65 73 20 3d 20 6e 6f 72 6d ..int res = norm
45b0: 61 6c 69 7a 65 4c 6f 6e 67 3c 42 6f 75 6e 64 54 alizeLong<BoundT
45c0: 79 70 65 2c 20 54 52 55 45 2c 20 46 41 4c 53 45 ype, TRUE, FALSE
45d0: 3e 3a 3a 73 65 74 28 76 61 6c 75 65 2c 20 66 69 >::set(value, fi
45e0: 65 6c 64 2c 20 73 74 72 56 61 6c 75 65 29 3b 0d eld, strValue);.
45f0: 0a 09 09 69 66 28 72 65 73 20 3d 3d 20 33 29 0d ...if(res == 3).
4600: 0a 09 09 09 72 65 74 75 72 6e 20 54 52 55 45 3b ....return TRUE;
4610: 09 2f 2f 20 d3 f1 eb ee e2 e8 e5 20 e2 f1 e5 e3 .// ....... ....
4620: e4 e0 20 e2 fb ef ee eb ed e8 ec ee 0d 0a 09 09 .. .............
4630: 65 6c 73 65 20 69 66 28 72 65 73 20 3d 3d 20 32 else if(res == 2
4640: 29 09 2f 2f 20 d3 f1 eb ee e2 e8 e5 20 ed e5 20 ).// ....... ..
4650: e2 fb ef ee eb ed e8 ec ee 0d 0a 09 09 09 72 65 ..............re
4660: 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 65 turn FALSE;....e
4670: 6c 73 65 20 69 66 28 72 65 73 20 3d 3d 20 31 29 lse if(res == 1)
4680: 0d 0a 09 09 09 62 48 61 72 64 20 3d 20 30 3b 0d .....bHard = 0;.
4690: 0a 09 09 69 66 28 30 20 3d 3d 20 42 6f 75 6e 64 ...if(0 == Bound
46a0: 54 79 70 65 29 0d 0a 09 09 7b 0d 0a 09 09 09 6e Type)....{.....n
46b0: 65 77 20 74 63 54 65 73 74 46 69 65 6c 64 3c 74 ew tcTestField<t
46c0: 6f 45 71 75 61 6c 2c 20 6e 75 6d 65 72 69 63 5f oEqual, numeric_
46d0: 63 6f 6d 70 61 72 65 3e 28 70 43 2c 20 73 74 72 compare>(pC, str
46e0: 56 61 6c 75 65 2c 20 66 69 65 6c 64 29 3b 0d 0a Value, field);..
46f0: 09 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28 31 ..}....else if(1
4700: 20 3d 3d 20 42 6f 75 6e 64 54 79 70 65 29 0d 0a == BoundType)..
4710: 09 09 7b 0d 0a 09 09 09 69 66 28 62 48 61 72 64 ..{.....if(bHard
4720: 29 0d 0a 09 09 09 09 6e 65 77 20 74 63 54 65 73 )......new tcTes
4730: 74 46 69 65 6c 64 3c 74 6f 47 72 61 74 2c 20 6e tField<toGrat, n
4740: 75 6d 65 72 69 63 5f 63 6f 6d 70 61 72 65 3e 28 umeric_compare>(
4750: 70 43 2c 20 73 74 72 56 61 6c 75 65 2c 20 66 69 pC, strValue, fi
4760: 65 6c 64 29 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a eld);.....else..
4770: 09 09 09 09 6e 65 77 20 74 63 54 65 73 74 46 69 ....new tcTestFi
4780: 65 6c 64 3c 74 6f 47 72 61 74 45 71 2c 20 6e 75 eld<toGratEq, nu
4790: 6d 65 72 69 63 5f 63 6f 6d 70 61 72 65 3e 28 70 meric_compare>(p
47a0: 43 2c 20 73 74 72 56 61 6c 75 65 2c 20 66 69 65 C, strValue, fie
47b0: 6c 64 29 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 ld);....}....els
47c0: 65 20 69 66 28 32 20 3d 3d 20 42 6f 75 6e 64 54 e if(2 == BoundT
47d0: 79 70 65 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 ype)....{.....if
47e0: 28 62 48 61 72 64 29 0d 0a 09 09 09 09 6e 65 77 (bHard)......new
47f0: 20 74 63 54 65 73 74 46 69 65 6c 64 3c 74 6f 4c tcTestField<toL
4800: 65 73 73 2c 20 6e 75 6d 65 72 69 63 5f 63 6f 6d ess, numeric_com
4810: 70 61 72 65 3e 28 70 43 2c 20 73 74 72 56 61 6c pare>(pC, strVal
4820: 75 65 2c 20 66 69 65 6c 64 29 3b 0d 0a 09 09 09 ue, field);.....
4830: 65 6c 73 65 0d 0a 09 09 09 09 6e 65 77 20 74 63 else......new tc
4840: 54 65 73 74 46 69 65 6c 64 3c 74 6f 4c 65 73 73 TestField<toLess
4850: 45 71 2c 20 6e 75 6d 65 72 69 63 5f 63 6f 6d 70 Eq, numeric_comp
4860: 61 72 65 3e 28 70 43 2c 20 73 74 72 56 61 6c 75 are>(pC, strValu
4870: 65 2c 20 66 69 65 6c 64 29 3b 0d 0a 09 09 7d 0d e, field);....}.
4880: 0a 09 09 72 65 74 75 72 6e 20 54 52 55 45 3b 0d ...return TRUE;.
4890: 0a 09 7d 0d 0a 7d 3b 0d 0a 20 0d 0a 0d 0a 73 65 ..}..};.. ....se
48a0: 6c 65 63 74 5f 69 74 65 72 61 74 6f 72 2a 20 46 lect_iterator* F
48b0: 69 6c 74 65 72 4d 61 63 68 69 6e 65 3a 3a 70 72 ilterMachine::pr
48c0: 6f 63 65 73 73 28 63 6f 6e 73 74 20 75 6e 73 69 ocess(const unsi
48d0: 67 6e 65 64 20 63 68 61 72 2a 20 70 42 79 74 65 gned char* pByte
48e0: 43 6f 64 65 2c 20 73 71 6c 69 74 65 33 5f 76 61 Code, sqlite3_va
48f0: 6c 75 65 2a 2a 20 61 72 67 73 29 0d 0a 7b 0d 0a lue** args)..{..
4900: 09 73 74 61 74 69 63 20 43 53 74 72 69 6e 67 20 .static CString
4910: 61 72 67 53 74 72 69 6e 67 3b 0d 0a 09 73 74 61 argString;...sta
4920: 74 69 63 20 64 6f 75 62 6c 65 20 61 72 67 4e 75 tic double argNu
4930: 6d 65 72 69 63 3b 0d 0a 09 73 74 61 74 69 63 20 meric;...static
4940: 5f 5f 69 6e 74 36 34 20 61 72 67 4c 6f 6e 67 3b __int64 argLong;
4950: 0d 0a 0d 0a 09 66 6f 72 28 3b 3b 29 0d 0a 09 7b .....for(;;)...{
4960: 0d 0a 09 09 69 6e 74 20 72 65 73 3b 0d 0a 09 09 ....int res;....
4970: 73 77 69 74 63 68 28 73 74 61 74 69 63 5f 63 61 switch(static_ca
4980: 73 74 3c 44 57 4f 52 44 3e 28 2a 70 42 79 74 65 st<DWORD>(*pByte
4990: 43 6f 64 65 2b 2b 29 29 0d 0a 09 09 7b 0d 0a 09 Code++))....{...
49a0: 09 63 61 73 65 20 73 65 6c 65 63 74 49 64 78 3a .case selectIdx:
49b0: 0d 0a 09 09 09 6d 5f 64 77 43 75 72 49 64 78 20 .....m_dwCurIdx
49c0: 3d 20 72 65 61 64 4e 75 6d 28 70 42 79 74 65 43 = readNum(pByteC
49d0: 6f 64 65 29 3b 0d 0a 09 09 09 6d 5f 70 49 6e 64 ode);.....m_pInd
49e0: 65 78 49 6e 66 6f 20 3d 20 6d 5f 74 61 62 6c 65 exInfo = m_table
49f0: 2e 70 68 69 73 49 6e 66 6f 28 29 2e 69 6e 64 65 .phisInfo().inde
4a00: 78 28 6d 5f 64 77 43 75 72 49 64 78 29 3b 0d 0a x(m_dwCurIdx);..
4a10: 09 09 09 6d 5f 70 46 69 65 6c 64 73 20 3d 20 6d ...m_pFields = m
4a20: 5f 70 49 6e 64 65 78 49 6e 66 6f 2d 3e 66 69 65 _pIndexInfo->fie
4a30: 6c 64 73 28 29 3b 0d 0a 09 09 09 6d 5f 63 75 72 lds();.....m_cur
4a40: 73 6f 72 2e 73 74 6f 72 65 2e 53 65 74 4f 72 64 sor.store.SetOrd
4a50: 65 72 49 6e 64 65 78 28 6d 5f 74 61 62 6c 65 2e erIndex(m_table.
4a60: 74 61 62 6c 65 28 29 2d 3e 69 6e 64 65 78 28 6d table()->index(m
4a70: 5f 64 77 43 75 72 49 64 78 29 29 3b 0d 0a 09 09 _dwCurIdx));....
4a80: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 .break;....case
4a90: 67 65 74 41 72 67 54 65 78 74 3a 0d 0a 09 09 09 getArgText:.....
4aa0: 69 66 28 53 51 4c 49 54 45 5f 54 45 58 54 20 21 if(SQLITE_TEXT !
4ab0: 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f = sqlite3_value_
4ac0: 74 79 70 65 28 2a 61 72 67 73 29 29 0d 0a 09 09 type(*args))....
4ad0: 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a ..return NULL;..
4ae0: 09 09 09 75 38 74 65 78 74 3a 3a 66 72 6f 6d 55 ...u8text::fromU
4af0: 74 66 38 28 28 4c 50 43 53 54 52 29 73 71 6c 69 tf8((LPCSTR)sqli
4b00: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 2a te3_value_text(*
4b10: 61 72 67 73 2b 2b 29 2c 20 61 72 67 53 74 72 69 args++), argStri
4b20: 6e 67 29 3b 0d 0a 09 09 09 75 38 74 65 78 74 3a ng);.....u8text:
4b30: 3a 64 62 55 70 70 65 72 28 61 72 67 53 74 72 69 :dbUpper(argStri
4b40: 6e 67 29 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d ng);.....break;.
4b50: 0a 09 09 63 61 73 65 20 67 65 74 41 72 67 4e 75 ...case getArgNu
4b60: 6d 65 72 69 63 3a 0d 0a 09 09 09 69 66 28 53 51 meric:.....if(SQ
4b70: 4c 49 54 45 5f 4e 55 4c 4c 20 3d 3d 20 73 71 6c LITE_NULL == sql
4b80: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 ite3_value_type(
4b90: 2a 61 72 67 73 29 29 0d 0a 09 09 09 09 72 65 74 *args))......ret
4ba0: 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 61 72 urn NULL;.....ar
4bb0: 67 4e 75 6d 65 72 69 63 20 3d 20 73 71 6c 69 74 gNumeric = sqlit
4bc0: 65 33 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 28 e3_value_double(
4bd0: 2a 61 72 67 73 2b 2b 29 3b 0d 0a 09 09 09 62 72 *args++);.....br
4be0: 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 67 65 74 eak;....case get
4bf0: 41 72 67 4c 6f 6e 67 3a 0d 0a 09 09 09 69 66 28 ArgLong:.....if(
4c00: 53 51 4c 49 54 45 5f 4e 55 4c 4c 20 3d 3d 20 73 SQLITE_NULL == s
4c10: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 qlite3_value_typ
4c20: 65 28 2a 61 72 67 73 29 29 0d 0a 09 09 09 09 72 e(*args))......r
4c30: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 eturn NULL;.....
4c40: 61 72 67 4c 6f 6e 67 20 3d 20 73 71 6c 69 74 65 argLong = sqlite
4c50: 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34 28 2a 61 3_value_int64(*a
4c60: 72 67 73 2b 2b 29 3b 0d 0a 09 09 09 62 72 65 61 rgs++);.....brea
4c70: 6b 3b 0d 0a 09 09 0d 0a 09 09 63 61 73 65 20 73 k;........case s
4c80: 65 74 45 71 75 61 6c 53 74 72 69 6e 67 3a 0d 0a etEqualString:..
4c90: 09 09 09 6d 5f 63 72 6e 74 45 71 75 61 6c 54 65 ...m_crntEqualTe
4ca0: 78 74 20 3d 20 61 72 67 53 74 72 69 6e 67 3b 0d xt = argString;.
4cb0: 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 ....break;....ca
4cc0: 73 65 20 73 65 74 45 71 75 61 6c 4e 75 6d 65 72 se setEqualNumer
4cd0: 69 63 3a 0d 0a 09 09 09 6d 5f 63 72 6e 74 45 71 ic:.....m_crntEq
4ce0: 75 61 6c 4e 75 6d 20 3d 20 61 72 67 4e 75 6d 65 ualNum = argNume
4cf0: 72 69 63 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d ric;.....break;.
4d00: 0a 09 09 63 61 73 65 20 73 65 74 45 71 75 61 6c ...case setEqual
4d10: 4c 6f 6e 67 3a 0d 0a 09 09 09 6d 5f 63 72 6e 74 Long:.....m_crnt
4d20: 45 71 75 61 6c 4c 6f 6e 67 20 3d 20 61 72 67 4c EqualLong = argL
4d30: 6f 6e 67 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d ong;.....break;.
4d40: 0a 09 09 0d 0a 09 09 63 61 73 65 20 63 6d 70 53 .......case cmpS
4d50: 74 72 69 6e 67 45 71 75 61 6c 5f 45 71 75 61 6c tringEqual_Equal
4d60: 3a 0d 0a 09 09 09 69 66 28 30 20 21 3d 20 75 38 :.....if(0 != u8
4d70: 74 65 78 74 3a 3a 63 6f 6d 70 61 72 65 52 74 72 text::compareRtr
4d80: 69 6d 28 6d 5f 63 72 6e 74 45 71 75 61 6c 54 65 im(m_crntEqualTe
4d90: 78 74 2c 20 61 72 67 53 74 72 69 6e 67 29 29 0d xt, argString)).
4da0: 0a 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c .....return NULL
4db0: 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 ;.....break;....
4dc0: 63 61 73 65 20 63 6d 70 4e 75 6d 65 72 69 63 45 case cmpNumericE
4dd0: 71 75 61 6c 5f 45 71 75 61 6c 3a 0d 0a 09 09 09 qual_Equal:.....
4de0: 69 66 28 6d 5f 63 72 6e 74 45 71 75 61 6c 4e 75 if(m_crntEqualNu
4df0: 6d 20 21 3d 20 61 72 67 4e 75 6d 65 72 69 63 29 m != argNumeric)
4e00: 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c ......return NUL
4e10: 4c 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 L;.....break;...
4e20: 09 63 61 73 65 20 63 6d 70 4c 6f 6e 67 45 71 75 .case cmpLongEqu
4e30: 61 6c 5f 45 71 75 61 6c 3a 0d 0a 09 09 09 69 66 al_Equal:.....if
4e40: 28 6d 5f 63 72 6e 74 45 71 75 61 6c 4c 6f 6e 67 (m_crntEqualLong
4e50: 20 21 3d 20 61 72 67 4c 6f 6e 67 29 0d 0a 09 09 != argLong)....
4e60: 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a ..return NULL;..
4e70: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 2f 2f 20 d0 ...break;...// .
4e80: e0 e1 ee f2 e0 20 f1 20 f3 f1 eb ee e2 e8 ff ec ..... . ........
4e90: e8 20 3e 0d 0a 09 09 63 61 73 65 20 63 6d 70 53 . >....case cmpS
4ea0: 74 72 69 6e 67 5f 4d 69 6e 5f 45 71 75 61 6c 3a tring_Min_Equal:
4eb0: 0d 0a 09 09 09 69 66 28 75 38 74 65 78 74 3a 3a .....if(u8text::
4ec0: 63 6f 6d 70 61 72 65 52 74 72 69 6d 28 6d 5f 63 compareRtrim(m_c
4ed0: 72 6e 74 45 71 75 61 6c 54 65 78 74 2c 20 61 72 rntEqualText, ar
4ee0: 67 53 74 72 69 6e 67 29 20 3c 3d 20 30 29 0d 0a gString) <= 0)..
4ef0: 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b ....return NULL;
4f00: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 .....break;....c
4f10: 61 73 65 20 63 6d 70 4e 75 6d 65 72 69 63 5f 4d ase cmpNumeric_M
4f20: 69 6e 5f 45 71 75 61 6c 3a 0d 0a 09 09 09 69 66 in_Equal:.....if
4f30: 28 6d 5f 63 72 6e 74 45 71 75 61 6c 4e 75 6d 20 (m_crntEqualNum
4f40: 3c 3d 20 61 72 67 4e 75 6d 65 72 69 63 29 0d 0a <= argNumeric)..
4f50: 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b ....return NULL;
4f60: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 .....break;....c
4f70: 61 73 65 20 63 6d 70 4c 6f 6e 67 5f 4d 69 6e 5f ase cmpLong_Min_
4f80: 45 71 75 61 6c 3a 0d 0a 09 09 09 69 66 28 6d 5f Equal:.....if(m_
4f90: 63 72 6e 74 45 71 75 61 6c 4c 6f 6e 67 20 3c 3d crntEqualLong <=
4fa0: 20 61 72 67 4c 6f 6e 67 29 0d 0a 09 09 09 09 72 argLong)......r
4fb0: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 eturn NULL;.....
4fc0: 62 72 65 61 6b 3b 0d 0a 09 0d 0a 09 09 63 61 73 break;.......cas
4fd0: 65 20 73 65 74 4d 69 6e 53 74 72 69 6e 67 3a 0d e setMinString:.
4fe0: 0a 09 09 09 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 ....m_crntMinimu
4ff0: 6d 54 65 78 74 20 3d 20 61 72 67 53 74 72 69 6e mText = argStrin
5000: 67 3b 0d 0a 09 09 09 6d 5f 68 61 72 64 43 75 72 g;.....m_hardCur
5010: 4d 69 6e 20 3d 20 31 3b 0d 0a 09 09 09 62 72 65 Min = 1;.....bre
5020: 61 6b 3b 0d 0a 09 09 63 61 73 65 20 73 65 74 4d ak;....case setM
5030: 69 6e 4e 75 6d 65 72 69 63 3a 0d 0a 09 09 09 6d inNumeric:.....m
5040: 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d 4e 75 6d 20 _crntMinimumNum
5050: 3d 20 61 72 67 4e 75 6d 65 72 69 63 3b 0d 0a 09 = argNumeric;...
5060: 09 09 6d 5f 68 61 72 64 43 75 72 4d 69 6e 20 3d ..m_hardCurMin =
5070: 20 31 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 1;.....break;..
5080: 09 09 63 61 73 65 20 73 65 74 4d 69 6e 4c 6f 6e ..case setMinLon
5090: 67 3a 0d 0a 09 09 09 6d 5f 63 72 6e 74 4d 69 6e g:.....m_crntMin
50a0: 69 6d 75 6d 4c 6f 6e 67 20 3d 20 61 72 67 4c 6f imumLong = argLo
50b0: 6e 67 3b 0d 0a 09 09 09 6d 5f 68 61 72 64 43 75 ng;.....m_hardCu
50c0: 72 4d 69 6e 20 3d 20 31 3b 0d 0a 09 09 09 62 72 rMin = 1;.....br
50d0: 65 61 6b 3b 0d 0a 09 0d 0a 09 09 63 61 73 65 20 eak;.......case
50e0: 73 65 6c 4d 69 6e 53 74 72 69 6e 67 3a 0d 0a 09 selMinString:...
50f0: 09 09 69 66 28 75 38 74 65 78 74 3a 3a 63 6f 6d ..if(u8text::com
5100: 70 61 72 65 52 74 72 69 6d 28 6d 5f 63 72 6e 74 pareRtrim(m_crnt
5110: 4d 69 6e 69 6d 75 6d 54 65 78 74 2c 20 61 72 67 MinimumText, arg
5120: 53 74 72 69 6e 67 29 20 3c 3d 20 30 29 0d 0a 09 String) <= 0)...
5130: 09 09 7b 0d 0a 09 09 09 09 6d 5f 63 72 6e 74 4d ..{......m_crntM
5140: 69 6e 69 6d 75 6d 54 65 78 74 20 3d 20 61 72 67 inimumText = arg
5150: 53 74 72 69 6e 67 3b 0d 0a 09 09 09 09 6d 5f 68 String;......m_h
5160: 61 72 64 43 75 72 4d 69 6e 20 3d 20 31 3b 0d 0a ardCurMin = 1;..
5170: 09 09 09 7d 0d 0a 09 09 09 62 72 65 61 6b 3b 0d ...}.....break;.
5180: 0a 09 09 63 61 73 65 20 73 65 6c 4d 69 6e 4e 75 ...case selMinNu
5190: 6d 65 72 69 63 3a 0d 0a 09 09 09 69 66 28 6d 5f meric:.....if(m_
51a0: 63 72 6e 74 4d 69 6e 69 6d 75 6d 4e 75 6d 20 3c crntMinimumNum <
51b0: 3d 20 61 72 67 4e 75 6d 65 72 69 63 29 0d 0a 09 = argNumeric)...
51c0: 09 09 7b 0d 0a 09 09 09 09 6d 5f 63 72 6e 74 4d ..{......m_crntM
51d0: 69 6e 69 6d 75 6d 4e 75 6d 20 3d 20 61 72 67 4e inimumNum = argN
51e0: 75 6d 65 72 69 63 3b 0d 0a 09 09 09 09 6d 5f 68 umeric;......m_h
51f0: 61 72 64 43 75 72 4d 69 6e 20 3d 20 31 3b 0d 0a ardCurMin = 1;..
5200: 09 09 09 7d 0d 0a 09 09 09 62 72 65 61 6b 3b 0d ...}.....break;.
5210: 0a 09 09 63 61 73 65 20 73 65 6c 4d 69 6e 4c 6f ...case selMinLo
5220: 6e 67 3a 0d 0a 09 09 09 69 66 28 6d 5f 63 72 6e ng:.....if(m_crn
5230: 74 4d 69 6e 69 6d 75 6d 4c 6f 6e 67 20 3c 3d 20 tMinimumLong <=
5240: 61 72 67 4c 6f 6e 67 29 0d 0a 09 09 09 7b 0d 0a argLong).....{..
5250: 09 09 09 09 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 ....m_crntMinimu
5260: 6d 4c 6f 6e 67 20 3d 20 61 72 67 4c 6f 6e 67 3b mLong = argLong;
5270: 0d 0a 09 09 09 09 6d 5f 68 61 72 64 43 75 72 4d ......m_hardCurM
5280: 69 6e 20 3d 20 31 3b 0d 0a 09 09 09 7d 0d 0a 09 in = 1;.....}...
5290: 09 09 62 72 65 61 6b 3b 0d 0a 09 2f 2f 20 d0 e0 ..break;...// ..
52a0: e1 ee f2 e0 20 f1 20 f3 f1 eb ee e2 e8 ff ec e8 .... . .........
52b0: 20 3e 3d 0d 0a 09 09 63 61 73 65 20 63 6d 70 53 >=....case cmpS
52c0: 74 72 69 6e 67 5f 4d 69 6e 45 71 5f 45 71 75 61 tring_MinEq_Equa
52d0: 6c 3a 0d 0a 09 09 09 69 66 28 75 38 74 65 78 74 l:.....if(u8text
52e0: 3a 3a 63 6f 6d 70 61 72 65 52 74 72 69 6d 28 6d ::compareRtrim(m
52f0: 5f 63 72 6e 74 45 71 75 61 6c 54 65 78 74 2c 20 _crntEqualText,
5300: 61 72 67 53 74 72 69 6e 67 29 20 3c 20 30 29 0d argString) < 0).
5310: 0a 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c .....return NULL
5320: 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 ;.....break;....
5330: 63 61 73 65 20 63 6d 70 4e 75 6d 65 72 69 63 5f case cmpNumeric_
5340: 4d 69 6e 45 71 5f 45 71 75 61 6c 3a 0d 0a 09 09 MinEq_Equal:....
5350: 09 69 66 28 6d 5f 63 72 6e 74 45 71 75 61 6c 4e .if(m_crntEqualN
5360: 75 6d 20 3c 20 61 72 67 4e 75 6d 65 72 69 63 29 um < argNumeric)
5370: 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c ......return NUL
5380: 4c 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 L;.....break;...
5390: 09 63 61 73 65 20 63 6d 70 4c 6f 6e 67 5f 4d 69 .case cmpLong_Mi
53a0: 6e 45 71 5f 45 71 75 61 6c 3a 0d 0a 09 09 09 69 nEq_Equal:.....i
53b0: 66 28 6d 5f 63 72 6e 74 45 71 75 61 6c 4c 6f 6e f(m_crntEqualLon
53c0: 67 20 3c 20 61 72 67 4c 6f 6e 67 29 0d 0a 09 09 g < argLong)....
53d0: 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a ..return NULL;..
53e0: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 0d 0a 09 09 ...break;.......
53f0: 63 61 73 65 20 73 65 74 4d 69 6e 45 71 53 74 72 case setMinEqStr
5400: 69 6e 67 3a 0d 0a 09 09 09 6d 5f 63 72 6e 74 4d ing:.....m_crntM
5410: 69 6e 69 6d 75 6d 54 65 78 74 20 3d 20 61 72 67 inimumText = arg
5420: 53 74 72 69 6e 67 3b 0d 0a 09 09 09 6d 5f 68 61 String;.....m_ha
5430: 72 64 43 75 72 4d 69 6e 20 3d 20 30 3b 0d 0a 09 rdCurMin = 0;...
5440: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 ..break;....case
5450: 20 73 65 74 4d 69 6e 45 71 4e 75 6d 65 72 69 63 setMinEqNumeric
5460: 3a 0d 0a 09 09 09 6d 5f 63 72 6e 74 4d 69 6e 69 :.....m_crntMini
5470: 6d 75 6d 4e 75 6d 20 3d 20 61 72 67 4e 75 6d 65 mumNum = argNume
5480: 72 69 63 3b 0d 0a 09 09 09 6d 5f 68 61 72 64 43 ric;.....m_hardC
5490: 75 72 4d 69 6e 20 3d 20 30 3b 0d 0a 09 09 09 62 urMin = 0;.....b
54a0: 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 73 65 reak;....case se
54b0: 74 4d 69 6e 45 71 4c 6f 6e 67 3a 0d 0a 09 09 09 tMinEqLong:.....
54c0: 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d 4c 6f 6e m_crntMinimumLon
54d0: 67 20 3d 20 61 72 67 4c 6f 6e 67 3b 0d 0a 09 09 g = argLong;....
54e0: 09 6d 5f 68 61 72 64 43 75 72 4d 69 6e 20 3d 20 .m_hardCurMin =
54f0: 30 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 0;.....break;...
5500: 0d 0a 09 09 63 61 73 65 20 73 65 6c 4d 69 6e 45 ....case selMinE
5510: 71 53 74 72 69 6e 67 3a 0d 0a 09 09 09 69 66 28 qString:.....if(
5520: 75 38 74 65 78 74 3a 3a 63 6f 6d 70 61 72 65 52 u8text::compareR
5530: 74 72 69 6d 28 6d 5f 63 72 6e 74 4d 69 6e 69 6d trim(m_crntMinim
5540: 75 6d 54 65 78 74 2c 20 61 72 67 53 74 72 69 6e umText, argStrin
5550: 67 29 20 3c 20 30 29 0d 0a 09 09 09 7b 0d 0a 09 g) < 0).....{...
5560: 09 09 09 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d ...m_crntMinimum
5570: 54 65 78 74 20 3d 20 61 72 67 53 74 72 69 6e 67 Text = argString
5580: 3b 0d 0a 09 09 09 09 6d 5f 68 61 72 64 43 75 72 ;......m_hardCur
5590: 4d 69 6e 20 3d 20 30 3b 0d 0a 09 09 09 7d 0d 0a Min = 0;.....}..
55a0: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 ...break;....cas
55b0: 65 20 73 65 6c 4d 69 6e 45 71 4e 75 6d 65 72 69 e selMinEqNumeri
55c0: 63 3a 0d 0a 09 09 09 69 66 28 6d 5f 63 72 6e 74 c:.....if(m_crnt
55d0: 4d 69 6e 69 6d 75 6d 4e 75 6d 20 3c 20 61 72 67 MinimumNum < arg
55e0: 4e 75 6d 65 72 69 63 29 0d 0a 09 09 09 7b 0d 0a Numeric).....{..
55f0: 09 09 09 09 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 ....m_crntMinimu
5600: 6d 4e 75 6d 20 3d 20 61 72 67 4e 75 6d 65 72 69 mNum = argNumeri
5610: 63 3b 0d 0a 09 09 09 09 6d 5f 68 61 72 64 43 75 c;......m_hardCu
5620: 72 4d 69 6e 20 3d 20 30 3b 0d 0a 09 09 09 7d 0d rMin = 0;.....}.
5630: 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 ....break;....ca
5640: 73 65 20 73 65 6c 4d 69 6e 45 71 4c 6f 6e 67 3a se selMinEqLong:
5650: 0d 0a 09 09 09 69 66 28 6d 5f 63 72 6e 74 4d 69 .....if(m_crntMi
5660: 6e 69 6d 75 6d 4c 6f 6e 67 20 3c 20 61 72 67 4c nimumLong < argL
5670: 6f 6e 67 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 ong).....{......
5680: 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d 4c 6f 6e m_crntMinimumLon
5690: 67 20 3d 20 61 72 67 4c 6f 6e 67 3b 0d 0a 09 09 g = argLong;....
56a0: 09 09 6d 5f 68 61 72 64 43 75 72 4d 69 6e 20 3d ..m_hardCurMin =
56b0: 20 30 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 62 72 0;.....}.....br
56c0: 65 61 6b 3b 0d 0a 09 09 2f 2f 20 d0 e0 e1 ee f2 eak;....// .....
56d0: e0 20 f1 20 f3 f1 eb ee e2 e8 ff ec e8 20 3c 0d . . ......... <.
56e0: 0a 09 09 63 61 73 65 20 63 6d 70 53 74 72 69 6e ...case cmpStrin
56f0: 67 5f 4d 61 78 5f 45 71 75 61 6c 3a 0d 0a 09 09 g_Max_Equal:....
5700: 09 69 66 28 75 38 74 65 78 74 3a 3a 63 6f 6d 70 .if(u8text::comp
5710: 61 72 65 52 74 72 69 6d 28 6d 5f 63 72 6e 74 45 areRtrim(m_crntE
5720: 71 75 61 6c 54 65 78 74 2c 20 61 72 67 53 74 72 qualText, argStr
5730: 69 6e 67 29 20 3e 3d 20 30 29 0d 0a 09 09 09 09 ing) >= 0)......
5740: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 return NULL;....
5750: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 .break;....case
5760: 63 6d 70 4e 75 6d 65 72 69 63 5f 4d 61 78 5f 45 cmpNumeric_Max_E
5770: 71 75 61 6c 3a 0d 0a 09 09 09 69 66 28 6d 5f 63 qual:.....if(m_c
5780: 72 6e 74 45 71 75 61 6c 4e 75 6d 20 3e 3d 20 61 rntEqualNum >= a
5790: 72 67 4e 75 6d 65 72 69 63 29 0d 0a 09 09 09 09 rgNumeric)......
57a0: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 return NULL;....
57b0: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 .break;....case
57c0: 63 6d 70 4c 6f 6e 67 5f 4d 61 78 5f 45 71 75 61 cmpLong_Max_Equa
57d0: 6c 3a 0d 0a 09 09 09 69 66 28 6d 5f 63 72 6e 74 l:.....if(m_crnt
57e0: 45 71 75 61 6c 4c 6f 6e 67 20 3e 3d 20 61 72 67 EqualLong >= arg
57f0: 4c 6f 6e 67 29 0d 0a 09 09 09 09 72 65 74 75 72 Long)......retur
5800: 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 65 61 n NULL;.....brea
5810: 6b 3b 0d 0a 0d 0a 09 09 63 61 73 65 20 63 6d 70 k;......case cmp
5820: 53 74 72 69 6e 67 5f 4d 61 78 5f 4d 69 6e 69 6d String_Max_Minim
5830: 75 6d 3a 0d 0a 09 09 09 69 66 28 75 38 74 65 78 um:.....if(u8tex
5840: 74 3a 3a 63 6f 6d 70 61 72 65 52 74 72 69 6d 28 t::compareRtrim(
5850: 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d 54 65 78 m_crntMinimumTex
5860: 74 2c 20 61 72 67 53 74 72 69 6e 67 29 20 3e 3d t, argString) >=
5870: 20 30 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 0)......return
5880: 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 65 61 6b 3b NULL;.....break;
5890: 0d 0a 09 09 63 61 73 65 20 63 6d 70 4e 75 6d 65 ....case cmpNume
58a0: 72 69 63 5f 4d 61 78 5f 4d 69 6e 69 6d 75 6d 3a ric_Max_Minimum:
58b0: 0d 0a 09 09 09 69 66 28 6d 5f 63 72 6e 74 45 71 .....if(m_crntEq
58c0: 75 61 6c 4e 75 6d 20 3e 3d 20 61 72 67 4e 75 6d ualNum >= argNum
58d0: 65 72 69 63 29 0d 0a 09 09 09 09 72 65 74 75 72 eric)......retur
58e0: 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 65 61 n NULL;.....brea
58f0: 6b 3b 0d 0a 09 09 63 61 73 65 20 63 6d 70 4c 6f k;....case cmpLo
5900: 6e 67 5f 4d 61 78 5f 4d 69 6e 69 6d 75 6d 3a 0d ng_Max_Minimum:.
5910: 0a 09 09 09 69 66 28 6d 5f 63 72 6e 74 4d 69 6e ....if(m_crntMin
5920: 69 6d 75 6d 4c 6f 6e 67 20 3e 3d 20 61 72 67 4c imumLong >= argL
5930: 6f 6e 67 29 0d 0a 09 09 09 09 72 65 74 75 72 6e ong)......return
5940: 20 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 65 61 6b NULL;.....break
5950: 3b 0d 0a 0d 0a 09 09 63 61 73 65 20 73 65 74 4d ;......case setM
5960: 61 78 53 74 72 69 6e 67 3a 0d 0a 09 09 09 6d 5f axString:.....m_
5970: 63 72 6e 74 4d 61 78 69 6d 75 6d 54 65 78 74 20 crntMaximumText
5980: 3d 20 61 72 67 53 74 72 69 6e 67 3b 0d 0a 09 09 = argString;....
5990: 09 6d 5f 68 61 72 64 43 75 72 4d 61 78 20 3d 20 .m_hardCurMax =
59a0: 31 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 1;.....break;...
59b0: 09 63 61 73 65 20 73 65 74 4d 61 78 4e 75 6d 65 .case setMaxNume
59c0: 72 69 63 3a 0d 0a 09 09 09 6d 5f 63 72 6e 74 4d ric:.....m_crntM
59d0: 61 78 69 6d 75 6d 4e 75 6d 20 3d 20 61 72 67 4e aximumNum = argN
59e0: 75 6d 65 72 69 63 3b 0d 0a 09 09 09 6d 5f 68 61 umeric;.....m_ha
59f0: 72 64 43 75 72 4d 61 78 20 3d 20 31 3b 0d 0a 09 rdCurMax = 1;...
5a00: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 ..break;....case
5a10: 20 73 65 74 4d 61 78 4c 6f 6e 67 3a 0d 0a 09 09 setMaxLong:....
5a20: 09 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 4c 6f .m_crntMaximumLo
5a30: 6e 67 20 3d 20 61 72 67 4c 6f 6e 67 3b 0d 0a 09 ng = argLong;...
5a40: 09 09 6d 5f 68 61 72 64 43 75 72 4d 61 78 20 3d ..m_hardCurMax =
5a50: 20 31 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 1;.....break;..
5a60: 0d 0a 09 09 63 61 73 65 20 73 65 6c 4d 61 78 53 ....case selMaxS
5a70: 74 72 69 6e 67 3a 0d 0a 09 09 09 69 66 28 75 38 tring:.....if(u8
5a80: 74 65 78 74 3a 3a 63 6f 6d 70 61 72 65 52 74 72 text::compareRtr
5a90: 69 6d 28 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d im(m_crntMaximum
5aa0: 54 65 78 74 2c 20 61 72 67 53 74 72 69 6e 67 29 Text, argString)
5ab0: 20 3e 3d 20 30 29 0d 0a 09 09 09 7b 0d 0a 09 09 >= 0).....{....
5ac0: 09 09 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 54 ..m_crntMaximumT
5ad0: 65 78 74 20 3d 20 61 72 67 53 74 72 69 6e 67 3b ext = argString;
5ae0: 0d 0a 09 09 09 09 6d 5f 68 61 72 64 43 75 72 4d ......m_hardCurM
5af0: 61 78 20 3d 20 31 3b 0d 0a 09 09 09 7d 0d 0a 09 ax = 1;.....}...
5b00: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 ..break;....case
5b10: 20 73 65 6c 4d 61 78 4e 75 6d 65 72 69 63 3a 0d selMaxNumeric:.
5b20: 0a 09 09 09 69 66 28 6d 5f 63 72 6e 74 4d 61 78 ....if(m_crntMax
5b30: 69 6d 75 6d 4e 75 6d 20 3e 3d 20 61 72 67 4e 75 imumNum >= argNu
5b40: 6d 65 72 69 63 29 0d 0a 09 09 09 7b 0d 0a 09 09 meric).....{....
5b50: 09 09 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 4e ..m_crntMaximumN
5b60: 75 6d 20 3d 20 61 72 67 4e 75 6d 65 72 69 63 3b um = argNumeric;
5b70: 0d 0a 09 09 09 09 6d 5f 68 61 72 64 43 75 72 4d ......m_hardCurM
5b80: 61 78 20 3d 20 31 3b 0d 0a 09 09 09 7d 0d 0a 09 ax = 1;.....}...
5b90: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 ..break;....case
5ba0: 20 73 65 6c 4d 61 78 4c 6f 6e 67 3a 0d 0a 09 09 selMaxLong:....
5bb0: 09 69 66 28 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 .if(m_crntMaximu
5bc0: 6d 4c 6f 6e 67 20 3e 3d 20 61 72 67 4c 6f 6e 67 mLong >= argLong
5bd0: 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 6d 5f 63 ).....{......m_c
5be0: 72 6e 74 4d 61 78 69 6d 75 6d 4c 6f 6e 67 20 3d rntMaximumLong =
5bf0: 20 61 72 67 4c 6f 6e 67 3b 0d 0a 09 09 09 09 6d argLong;......m
5c00: 5f 68 61 72 64 43 75 72 4d 61 78 20 3d 20 31 3b _hardCurMax = 1;
5c10: 0d 0a 09 09 09 7d 0d 0a 09 09 09 62 72 65 61 6b .....}.....break
5c20: 3b 0d 0a 09 09 2f 2f 20 d0 e0 e1 ee f2 e0 20 f1 ;....// ...... .
5c30: 20 f3 f1 eb ee e2 e8 ff ec e8 20 3c 3d 0d 0a 09 ......... <=...
5c40: 09 63 61 73 65 20 63 6d 70 53 74 72 69 6e 67 5f .case cmpString_
5c50: 4d 61 78 45 71 5f 45 71 75 61 6c 3a 0d 0a 09 09 MaxEq_Equal:....
5c60: 09 69 66 28 75 38 74 65 78 74 3a 3a 63 6f 6d 70 .if(u8text::comp
5c70: 61 72 65 52 74 72 69 6d 28 6d 5f 63 72 6e 74 45 areRtrim(m_crntE
5c80: 71 75 61 6c 54 65 78 74 2c 20 61 72 67 53 74 72 qualText, argStr
5c90: 69 6e 67 29 20 3e 20 30 29 0d 0a 09 09 09 09 72 ing) > 0)......r
5ca0: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 eturn NULL;.....
5cb0: 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 63 break;....case c
5cc0: 6d 70 4e 75 6d 65 72 69 63 5f 4d 61 78 45 71 5f mpNumeric_MaxEq_
5cd0: 45 71 75 61 6c 3a 0d 0a 09 09 09 69 66 28 6d 5f Equal:.....if(m_
5ce0: 63 72 6e 74 45 71 75 61 6c 4e 75 6d 20 3e 20 61 crntEqualNum > a
5cf0: 72 67 4e 75 6d 65 72 69 63 29 0d 0a 09 09 09 09 rgNumeric)......
5d00: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 return NULL;....
5d10: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 .break;....case
5d20: 63 6d 70 4c 6f 6e 67 5f 4d 61 78 45 71 5f 45 71 cmpLong_MaxEq_Eq
5d30: 75 61 6c 3a 0d 0a 09 09 09 69 66 28 6d 5f 63 72 ual:.....if(m_cr
5d40: 6e 74 45 71 75 61 6c 4c 6f 6e 67 20 3e 20 61 72 ntEqualLong > ar
5d50: 67 4c 6f 6e 67 29 0d 0a 09 09 09 09 72 65 74 75 gLong)......retu
5d60: 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 65 rn NULL;.....bre
5d70: 61 6b 3b 0d 0a 0d 0a 09 09 63 61 73 65 20 63 6d ak;......case cm
5d80: 70 53 74 72 69 6e 67 5f 4d 61 78 45 71 5f 4d 69 pString_MaxEq_Mi
5d90: 6e 69 6d 75 6d 3a 0d 0a 09 09 09 72 65 73 20 3d nimum:.....res =
5da0: 20 75 38 74 65 78 74 3a 3a 63 6f 6d 70 61 72 65 u8text::compare
5db0: 52 74 72 69 6d 28 6d 5f 63 72 6e 74 4d 69 6e 69 Rtrim(m_crntMini
5dc0: 6d 75 6d 54 65 78 74 2c 20 61 72 67 53 74 72 69 mumText, argStri
5dd0: 6e 67 29 3b 0d 0a 09 09 09 69 66 28 72 65 73 20 ng);.....if(res
5de0: 3e 20 30 20 7c 7c 20 28 72 65 73 20 3d 3d 20 30 > 0 || (res == 0
5df0: 20 26 26 20 6d 5f 68 61 72 64 43 75 72 4d 69 6e && m_hardCurMin
5e00: 20 21 3d 20 30 29 29 0d 0a 09 09 09 09 72 65 74 != 0))......ret
5e10: 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 urn NULL;.....br
5e20: 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 63 6d 70 eak;....case cmp
5e30: 4e 75 6d 65 72 69 63 5f 4d 61 78 45 71 5f 4d 69 Numeric_MaxEq_Mi
5e40: 6e 69 6d 75 6d 3a 0d 0a 09 09 09 69 66 28 6d 5f nimum:.....if(m_
5e50: 63 72 6e 74 4d 69 6e 69 6d 75 6d 4e 75 6d 20 3e crntMinimumNum >
5e60: 20 61 72 67 4e 75 6d 65 72 69 63 20 7c 7c 20 28 argNumeric || (
5e70: 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d 4e 75 6d m_crntMinimumNum
5e80: 20 3d 3d 20 61 72 67 4e 75 6d 65 72 69 63 20 26 == argNumeric &
5e90: 26 20 6d 5f 68 61 72 64 43 75 72 4d 69 6e 20 21 & m_hardCurMin !
5ea0: 3d 20 30 29 29 0d 0a 09 09 09 09 72 65 74 75 72 = 0))......retur
5eb0: 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 65 61 n NULL;.....brea
5ec0: 6b 3b 0d 0a 09 09 63 61 73 65 20 63 6d 70 4c 6f k;....case cmpLo
5ed0: 6e 67 5f 4d 61 78 45 71 5f 4d 69 6e 69 6d 75 6d ng_MaxEq_Minimum
5ee0: 3a 0d 0a 09 09 09 69 66 28 6d 5f 63 72 6e 74 4d :.....if(m_crntM
5ef0: 69 6e 69 6d 75 6d 4c 6f 6e 67 20 3e 20 61 72 67 inimumLong > arg
5f00: 4c 6f 6e 67 20 7c 7c 20 28 6d 5f 63 72 6e 74 4d Long || (m_crntM
5f10: 69 6e 69 6d 75 6d 4c 6f 6e 67 20 3d 3d 20 61 72 inimumLong == ar
5f20: 67 4c 6f 6e 67 20 26 26 20 6d 5f 68 61 72 64 43 gLong && m_hardC
5f30: 75 72 4d 69 6e 20 21 3d 20 30 29 29 0d 0a 09 09 urMin != 0))....
5f40: 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a ..return NULL;..
5f50: 09 09 09 62 72 65 61 6b 3b 0d 0a 0d 0a 09 09 63 ...break;......c
5f60: 61 73 65 20 73 65 74 4d 61 78 45 71 53 74 72 69 ase setMaxEqStri
5f70: 6e 67 3a 0d 0a 09 09 09 6d 5f 63 72 6e 74 4d 61 ng:.....m_crntMa
5f80: 78 69 6d 75 6d 54 65 78 74 20 3d 20 61 72 67 53 ximumText = argS
5f90: 74 72 69 6e 67 3b 0d 0a 09 09 09 6d 5f 68 61 72 tring;.....m_har
5fa0: 64 43 75 72 4d 61 78 20 3d 20 30 3b 0d 0a 09 09 dCurMax = 0;....
5fb0: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 .break;....case
5fc0: 73 65 74 4d 61 78 45 71 4e 75 6d 65 72 69 63 3a setMaxEqNumeric:
5fd0: 0d 0a 09 09 09 6d 5f 63 72 6e 74 4d 61 78 69 6d .....m_crntMaxim
5fe0: 75 6d 4e 75 6d 20 3d 20 61 72 67 4e 75 6d 65 72 umNum = argNumer
5ff0: 69 63 3b 0d 0a 09 09 09 6d 5f 68 61 72 64 43 75 ic;.....m_hardCu
6000: 72 4d 61 78 20 3d 20 30 3b 0d 0a 09 09 09 62 72 rMax = 0;.....br
6010: 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 73 65 74 eak;....case set
6020: 4d 61 78 45 71 4c 6f 6e 67 3a 0d 0a 09 09 09 6d MaxEqLong:.....m
6030: 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 4c 6f 6e 67 _crntMaximumLong
6040: 20 3d 20 61 72 67 4c 6f 6e 67 3b 0d 0a 09 09 09 = argLong;.....
6050: 6d 5f 68 61 72 64 43 75 72 4d 61 78 20 3d 20 30 m_hardCurMax = 0
6060: 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 0d 0a ;.....break;....
6070: 09 09 63 61 73 65 20 73 65 6c 4d 61 78 45 71 53 ..case selMaxEqS
6080: 74 72 69 6e 67 3a 0d 0a 09 09 09 69 66 28 75 38 tring:.....if(u8
6090: 74 65 78 74 3a 3a 63 6f 6d 70 61 72 65 52 74 72 text::compareRtr
60a0: 69 6d 28 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d im(m_crntMaximum
60b0: 54 65 78 74 2c 20 61 72 67 53 74 72 69 6e 67 29 Text, argString)
60c0: 20 3e 20 30 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 > 0).....{.....
60d0: 09 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 54 65 .m_crntMaximumTe
60e0: 78 74 20 3d 20 61 72 67 53 74 72 69 6e 67 3b 0d xt = argString;.
60f0: 0a 09 09 09 09 6d 5f 68 61 72 64 43 75 72 4d 61 .....m_hardCurMa
6100: 78 20 3d 20 30 3b 0d 0a 09 09 09 7d 0d 0a 09 09 x = 0;.....}....
6110: 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 .break;....case
6120: 73 65 6c 4d 61 78 45 71 4e 75 6d 65 72 69 63 3a selMaxEqNumeric:
6130: 0d 0a 09 09 09 69 66 28 6d 5f 63 72 6e 74 4d 61 .....if(m_crntMa
6140: 78 69 6d 75 6d 4e 75 6d 20 3e 20 61 72 67 4e 75 ximumNum > argNu
6150: 6d 65 72 69 63 29 0d 0a 09 09 09 7b 0d 0a 09 09 meric).....{....
6160: 09 09 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 4e ..m_crntMaximumN
6170: 75 6d 20 3d 20 61 72 67 4e 75 6d 65 72 69 63 3b um = argNumeric;
6180: 0d 0a 09 09 09 09 6d 5f 68 61 72 64 43 75 72 4d ......m_hardCurM
6190: 61 78 20 3d 20 30 3b 0d 0a 09 09 09 7d 0d 0a 09 ax = 0;.....}...
61a0: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 ..break;....case
61b0: 20 73 65 6c 4d 61 78 45 71 4c 6f 6e 67 3a 0d 0a selMaxEqLong:..
61c0: 09 09 09 69 66 28 6d 5f 63 72 6e 74 4d 61 78 69 ...if(m_crntMaxi
61d0: 6d 75 6d 4c 6f 6e 67 20 3e 20 61 72 67 4c 6f 6e mumLong > argLon
61e0: 67 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 6d 5f g).....{......m_
61f0: 63 72 6e 74 4d 61 78 69 6d 75 6d 4c 6f 6e 67 20 crntMaximumLong
6200: 3d 20 61 72 67 4c 6f 6e 67 3b 0d 0a 09 09 09 09 = argLong;......
6210: 6d 5f 68 61 72 64 43 75 72 4d 61 78 20 3d 20 30 m_hardCurMax = 0
6220: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 62 72 65 61 ;.....}.....brea
6230: 6b 3b 0d 0a 0d 0a 09 09 2f 2f 20 d0 e0 e1 ee f2 k;......// .....
6240: e0 20 f1 20 ef ee eb ed fb ec e8 20 ea eb fe f7 . . ....... ....
6250: e0 ec e8 2e 09 0d 0a 09 09 63 61 73 65 20 73 65 .........case se
6260: 74 46 75 6c 6c 4b 65 79 45 71 75 61 6c 3a 0d 0a tFullKeyEqual:..
6270: 09 09 09 69 66 28 32 20 3d 3d 20 6e 6f 72 6d 61 ...if(2 == norma
6280: 6c 69 7a 65 53 74 72 69 6e 67 3c 30 3e 3a 3a 73 lizeString<0>::s
6290: 65 74 28 6d 5f 63 72 6e 74 45 71 75 61 6c 54 65 et(m_crntEqualTe
62a0: 78 74 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f xt, m_pIndexInfo
62b0: 2d 3e 6b 65 79 53 69 7a 65 28 29 20 2b 20 31 30 ->keySize() + 10
62c0: 29 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 4e ))......return N
62d0: 55 4c 4c 3b 0d 0a 09 09 09 6d 5f 66 75 6c 6c 4b ULL;.....m_fullK
62e0: 65 79 45 71 20 3d 20 6d 5f 63 72 6e 74 45 71 75 eyEq = m_crntEqu
62f0: 61 6c 54 65 78 74 3b 0d 0a 09 09 09 62 72 65 61 alText;.....brea
6300: 6b 3b 0d 0a 09 09 63 61 73 65 20 73 65 74 46 75 k;....case setFu
6310: 6c 6c 4b 65 79 4d 69 6e 69 6d 75 6d 3a 0d 0a 09 llKeyMinimum:...
6320: 09 09 72 65 73 20 3d 20 6e 6f 72 6d 61 6c 69 7a ..res = normaliz
6330: 65 53 74 72 69 6e 67 3c 31 3e 3a 3a 73 65 74 28 eString<1>::set(
6340: 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d 54 65 78 m_crntMinimumTex
6350: 74 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 2d t, m_pIndexInfo-
6360: 3e 6b 65 79 53 69 7a 65 28 29 20 2b 20 31 30 29 >keySize() + 10)
6370: 3b 0d 0a 09 09 09 69 66 28 32 20 3d 3d 20 72 65 ;.....if(2 == re
6380: 73 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 4e s)......return N
6390: 55 4c 4c 3b 0d 0a 09 09 09 6d 5f 66 75 6c 6c 4b ULL;.....m_fullK
63a0: 65 79 4d 69 6e 20 3d 20 6d 5f 63 72 6e 74 4d 69 eyMin = m_crntMi
63b0: 6e 69 6d 75 6d 54 65 78 74 3b 0d 0a 09 09 09 6d nimumText;.....m
63c0: 5f 68 61 72 64 46 4b 4d 69 6e 20 3d 20 30 20 3d _hardFKMin = 0 =
63d0: 3d 20 72 65 73 20 3f 20 6d 5f 68 61 72 64 43 75 = res ? m_hardCu
63e0: 72 4d 69 6e 20 3a 20 30 3b 0d 0a 09 09 09 62 72 rMin : 0;.....br
63f0: 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 73 65 74 eak;....case set
6400: 46 75 6c 6c 4b 65 79 4d 61 78 69 6d 75 6d 3a 0d FullKeyMaximum:.
6410: 0a 09 09 09 72 65 73 20 3d 20 6e 6f 72 6d 61 6c ....res = normal
6420: 69 7a 65 53 74 72 69 6e 67 3c 32 3e 3a 3a 73 65 izeString<2>::se
6430: 74 28 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 54 t(m_crntMaximumT
6440: 65 78 74 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 ext, m_pIndexInf
6450: 6f 2d 3e 6b 65 79 53 69 7a 65 28 29 20 2b 20 31 o->keySize() + 1
6460: 30 29 3b 0d 0a 09 09 09 6d 5f 66 75 6c 6c 4b 65 0);.....m_fullKe
6470: 79 4d 61 78 20 3d 20 6d 5f 63 72 6e 74 4d 61 78 yMax = m_crntMax
6480: 69 6d 75 6d 54 65 78 74 3b 0d 0a 09 09 09 6d 5f imumText;.....m_
6490: 68 61 72 64 46 4b 4d 61 78 20 3d 20 30 20 3d 3d hardFKMax = 0 ==
64a0: 20 72 65 73 20 3f 20 6d 5f 68 61 72 64 43 75 72 res ? m_hardCur
64b0: 4d 61 78 20 3a 20 30 3b 0d 0a 09 09 09 62 72 65 Max : 0;.....bre
64c0: 61 6b 3b 0d 0a 09 09 0d 0a 09 09 63 61 73 65 20 ak;........case
64d0: 73 65 74 50 61 72 74 4b 65 79 45 71 75 61 6c 54 setPartKeyEqualT
64e0: 65 78 74 3a 0d 0a 09 09 09 72 65 73 20 3d 20 6e ext:.....res = n
64f0: 6f 72 6d 61 6c 69 7a 65 53 74 72 69 6e 67 3c 30 ormalizeString<0
6500: 3e 3a 3a 73 65 74 28 6d 5f 63 72 6e 74 45 71 75 >::set(m_crntEqu
6510: 61 6c 54 65 78 74 2c 20 6d 5f 70 46 69 65 6c 64 alText, m_pField
6520: 73 2d 3e 69 6e 66 6f 28 29 2e 6c 65 6e 67 74 68 s->info().length
6530: 28 29 29 3b 0d 0a 09 09 09 69 66 28 32 20 3d 3d ());.....if(2 ==
6540: 20 72 65 73 29 0d 0a 09 09 09 09 72 65 74 75 72 res)......retur
6550: 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 6e 65 77 20 n NULL;.....new
6560: 74 63 54 65 73 74 46 69 65 6c 64 3c 74 6f 45 71 tcTestField<toEq
6570: 75 61 6c 2c 20 74 65 78 74 5f 6e 6f 63 61 73 65 ual, text_nocase
6580: 5f 63 6f 6d 70 61 72 65 3e 28 6d 5f 70 50 4b 45 _compare>(m_pPKE
6590: 71 43 6f 6e 73 74 72 2c 20 6d 5f 63 72 6e 74 45 qConstr, m_crntE
65a0: 71 75 61 6c 54 65 78 74 2c 20 6d 5f 70 46 69 65 qualText, m_pFie
65b0: 6c 64 73 2d 3e 69 6e 66 6f 28 29 29 3b 0d 0a 09 lds->info());...
65c0: 09 09 6d 5f 70 61 72 74 4b 65 79 45 71 20 2b 3d ..m_partKeyEq +=
65d0: 20 6d 5f 63 72 6e 74 45 71 75 61 6c 54 65 78 74 m_crntEqualText
65e0: 3b 0d 0a 09 09 09 6d 5f 70 46 69 65 6c 64 73 2b ;.....m_pFields+
65f0: 2b 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 +;.....break;...
6600: 09 63 61 73 65 20 73 65 74 50 61 72 74 4b 65 79 .case setPartKey
6610: 45 71 75 61 6c 4e 75 6d 65 72 69 63 3a 0d 0a 09 EqualNumeric:...
6620: 09 09 72 65 73 20 3d 20 6e 6f 72 6d 61 6c 69 7a ..res = normaliz
6630: 65 4e 75 6d 65 72 69 63 3c 30 2c 20 54 52 55 45 eNumeric<0, TRUE
6640: 2c 20 54 52 55 45 3e 3a 3a 73 65 74 28 6d 5f 63 , TRUE>::set(m_c
6650: 72 6e 74 45 71 75 61 6c 4e 75 6d 2c 20 6d 5f 70 rntEqualNum, m_p
6660: 46 69 65 6c 64 73 2d 3e 69 6e 66 6f 28 29 2c 20 Fields->info(),
6670: 61 72 67 53 74 72 69 6e 67 29 3b 0d 0a 09 09 09 argString);.....
6680: 69 66 28 32 20 3d 3d 20 72 65 73 29 0d 0a 09 09 if(2 == res)....
6690: 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a ..return NULL;..
66a0: 09 09 09 6e 65 77 20 74 63 54 65 73 74 46 69 65 ...new tcTestFie
66b0: 6c 64 3c 74 6f 45 71 75 61 6c 2c 20 74 65 78 74 ld<toEqual, text
66c0: 5f 63 6f 6d 70 61 72 65 3e 28 6d 5f 70 50 4b 45 _compare>(m_pPKE
66d0: 71 43 6f 6e 73 74 72 2c 20 61 72 67 53 74 72 69 qConstr, argStri
66e0: 6e 67 2c 20 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 ng, m_pFields->i
66f0: 6e 66 6f 28 29 29 3b 0d 0a 09 09 09 6d 5f 70 61 nfo());.....m_pa
6700: 72 74 4b 65 79 45 71 20 2b 3d 20 61 72 67 53 74 rtKeyEq += argSt
6710: 72 69 6e 67 3b 0d 0a 09 09 09 6d 5f 70 46 69 65 ring;.....m_pFie
6720: 6c 64 73 2b 2b 3b 0d 0a 09 09 09 62 72 65 61 6b lds++;.....break
6730: 3b 0d 0a 09 09 63 61 73 65 20 73 65 74 50 61 72 ;....case setPar
6740: 74 4b 65 79 45 71 75 61 6c 4c 6f 6e 67 3a 0d 0a tKeyEqualLong:..
6750: 09 09 09 72 65 73 20 3d 20 6e 6f 72 6d 61 6c 69 ...res = normali
6760: 7a 65 4c 6f 6e 67 3c 30 2c 20 54 52 55 45 2c 20 zeLong<0, TRUE,
6770: 54 52 55 45 3e 3a 3a 73 65 74 28 6d 5f 63 72 6e TRUE>::set(m_crn
6780: 74 45 71 75 61 6c 4c 6f 6e 67 2c 20 6d 5f 70 46 tEqualLong, m_pF
6790: 69 65 6c 64 73 2d 3e 69 6e 66 6f 28 29 2c 20 61 ields->info(), a
67a0: 72 67 53 74 72 69 6e 67 29 3b 0d 0a 09 09 09 69 rgString);.....i
67b0: 66 28 32 20 3d 3d 20 72 65 73 29 0d 0a 09 09 09 f(2 == res).....
67c0: 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 .return NULL;...
67d0: 09 09 6e 65 77 20 74 63 54 65 73 74 46 69 65 6c ..new tcTestFiel
67e0: 64 3c 74 6f 45 71 75 61 6c 2c 20 74 65 78 74 5f d<toEqual, text_
67f0: 63 6f 6d 70 61 72 65 3e 28 6d 5f 70 50 4b 45 71 compare>(m_pPKEq
6800: 43 6f 6e 73 74 72 2c 20 61 72 67 53 74 72 69 6e Constr, argStrin
6810: 67 2c 20 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 6e g, m_pFields->in
6820: 66 6f 28 29 29 3b 0d 0a 09 09 09 6d 5f 70 61 72 fo());.....m_par
6830: 74 4b 65 79 45 71 20 2b 3d 20 61 72 67 53 74 72 tKeyEq += argStr
6840: 69 6e 67 3b 0d 0a 09 09 09 6d 5f 70 46 69 65 6c ing;.....m_pFiel
6850: 64 73 2b 2b 3b 0d 0a 09 09 09 62 72 65 61 6b 3b ds++;.....break;
6860: 0d 0a 0d 0a 09 09 63 61 73 65 20 73 65 74 50 61 ......case setPa
6870: 72 74 4b 65 79 4d 69 6e 69 6d 75 6d 54 65 78 74 rtKeyMinimumText
6880: 3a 0d 0a 09 09 09 72 65 73 20 3d 20 6e 6f 72 6d :.....res = norm
6890: 61 6c 69 7a 65 53 74 72 69 6e 67 3c 31 3e 3a 3a alizeString<1>::
68a0: 73 65 74 28 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 set(m_crntMinimu
68b0: 6d 54 65 78 74 2c 20 6d 5f 70 46 69 65 6c 64 73 mText, m_pFields
68c0: 2d 3e 69 6e 66 6f 28 29 2e 6c 65 6e 67 74 68 28 ->info().length(
68d0: 29 29 3b 0d 0a 09 09 09 69 66 28 32 20 3d 3d 20 ));.....if(2 ==
68e0: 72 65 73 29 0d 0a 09 09 09 09 72 65 74 75 72 6e res)......return
68f0: 20 4e 55 4c 4c 3b 0d 0a 09 09 09 6d 5f 70 61 72 NULL;.....m_par
6900: 74 4b 65 79 4d 69 6e 20 3d 20 6d 5f 70 61 72 74 tKeyMin = m_part
6910: 4b 65 79 45 71 20 2b 20 6d 5f 63 72 6e 74 4d 69 KeyEq + m_crntMi
6920: 6e 69 6d 75 6d 54 65 78 74 3b 0d 0a 09 09 09 6d nimumText;.....m
6930: 5f 68 61 72 64 50 4b 4d 69 6e 20 3d 20 30 20 3d _hardPKMin = 0 =
6940: 3d 20 72 65 73 20 3f 20 6d 5f 68 61 72 64 43 75 = res ? m_hardCu
6950: 72 4d 69 6e 20 3a 20 30 3b 0d 0a 09 09 09 69 66 rMin : 0;.....if
6960: 28 6d 5f 68 61 72 64 50 4b 4d 69 6e 29 0d 0a 09 (m_hardPKMin)...
6970: 09 09 09 6e 65 77 20 74 63 54 65 73 74 46 69 65 ...new tcTestFie
6980: 6c 64 3c 74 6f 47 72 61 74 2c 20 74 65 78 74 5f ld<toGrat, text_
6990: 6e 6f 63 61 73 65 5f 63 6f 6d 70 61 72 65 3e 28 nocase_compare>(
69a0: 6d 5f 70 50 4b 4d 69 6e 43 6f 6e 73 74 72 2c 20 m_pPKMinConstr,
69b0: 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d 54 65 78 m_crntMinimumTex
69c0: 74 2c 20 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 6e t, m_pFields->in
69d0: 66 6f 28 29 29 3b 0d 0a 09 09 09 65 6c 73 65 0d fo());.....else.
69e0: 0a 09 09 09 09 6e 65 77 20 74 63 54 65 73 74 46 .....new tcTestF
69f0: 69 65 6c 64 3c 74 6f 47 72 61 74 45 71 2c 20 74 ield<toGratEq, t
6a00: 65 78 74 5f 6e 6f 63 61 73 65 5f 63 6f 6d 70 61 ext_nocase_compa
6a10: 72 65 3e 28 6d 5f 70 50 4b 4d 69 6e 43 6f 6e 73 re>(m_pPKMinCons
6a20: 74 72 2c 20 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 tr, m_crntMinimu
6a30: 6d 54 65 78 74 2c 20 6d 5f 70 46 69 65 6c 64 73 mText, m_pFields
6a40: 2d 3e 69 6e 66 6f 28 29 29 3b 0d 0a 09 09 09 62 ->info());.....b
6a50: 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 73 65 reak;....case se
6a60: 74 50 61 72 74 4b 65 79 4d 69 6e 69 6d 75 6d 4e tPartKeyMinimumN
6a70: 75 6d 65 72 69 63 3a 0d 0a 09 09 09 72 65 73 20 umeric:.....res
6a80: 3d 20 6e 6f 72 6d 61 6c 69 7a 65 4e 75 6d 65 72 = normalizeNumer
6a90: 69 63 3c 31 2c 20 46 41 4c 53 45 2c 20 54 52 55 ic<1, FALSE, TRU
6aa0: 45 3e 3a 3a 73 65 74 28 6d 5f 63 72 6e 74 4d 69 E>::set(m_crntMi
6ab0: 6e 69 6d 75 6d 4e 75 6d 2c 20 6d 5f 70 46 69 65 nimumNum, m_pFie
6ac0: 6c 64 73 2d 3e 69 6e 66 6f 28 29 2c 20 61 72 67 lds->info(), arg
6ad0: 53 74 72 69 6e 67 29 3b 0d 0a 09 09 09 69 66 28 String);.....if(
6ae0: 32 20 3d 3d 20 72 65 73 29 0d 0a 09 09 09 09 72 2 == res)......r
6af0: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 eturn NULL;.....
6b00: 6d 5f 68 61 72 64 50 4b 4d 69 6e 20 3d 20 30 20 m_hardPKMin = 0
6b10: 3d 3d 20 72 65 73 20 3f 20 6d 5f 68 61 72 64 43 == res ? m_hardC
6b20: 75 72 4d 69 6e 20 3a 20 30 3b 0d 0a 09 09 09 69 urMin : 0;.....i
6b30: 66 28 6d 5f 68 61 72 64 50 4b 4d 69 6e 29 0d 0a f(m_hardPKMin)..
6b40: 09 09 09 09 6e 65 77 20 74 63 54 65 73 74 46 69 ....new tcTestFi
6b50: 65 6c 64 3c 74 6f 47 72 61 74 2c 20 74 65 78 74 eld<toGrat, text
6b60: 5f 63 6f 6d 70 61 72 65 3e 28 6d 5f 70 50 4b 4d _compare>(m_pPKM
6b70: 69 6e 43 6f 6e 73 74 72 2c 20 61 72 67 53 74 72 inConstr, argStr
6b80: 69 6e 67 2c 20 6d 5f 70 46 69 65 6c 64 73 2d 3e ing, m_pFields->
6b90: 69 6e 66 6f 28 29 29 3b 0d 0a 09 09 09 65 6c 73 info());.....els
6ba0: 65 0d 0a 09 09 09 09 6e 65 77 20 74 63 54 65 73 e......new tcTes
6bb0: 74 46 69 65 6c 64 3c 74 6f 47 72 61 74 45 71 2c tField<toGratEq,
6bc0: 20 74 65 78 74 5f 63 6f 6d 70 61 72 65 3e 28 6d text_compare>(m
6bd0: 5f 70 50 4b 4d 69 6e 43 6f 6e 73 74 72 2c 20 61 _pPKMinConstr, a
6be0: 72 67 53 74 72 69 6e 67 2c 20 6d 5f 70 46 69 65 rgString, m_pFie
6bf0: 6c 64 73 2d 3e 69 6e 66 6f 28 29 29 3b 0d 0a 09 lds->info());...
6c00: 09 09 6d 5f 70 61 72 74 4b 65 79 4d 69 6e 20 3d ..m_partKeyMin =
6c10: 20 6d 5f 70 61 72 74 4b 65 79 45 71 20 2b 20 61 m_partKeyEq + a
6c20: 72 67 53 74 72 69 6e 67 3b 0d 0a 09 09 09 62 72 rgString;.....br
6c30: 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 73 65 74 eak;....case set
6c40: 50 61 72 74 4b 65 79 4d 69 6e 69 6d 75 6d 4c 6f PartKeyMinimumLo
6c50: 6e 67 3a 0d 0a 09 09 09 72 65 73 20 3d 20 6e 6f ng:.....res = no
6c60: 72 6d 61 6c 69 7a 65 4c 6f 6e 67 3c 31 2c 20 46 rmalizeLong<1, F
6c70: 41 4c 53 45 2c 20 54 52 55 45 3e 3a 3a 73 65 74 ALSE, TRUE>::set
6c80: 28 6d 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d 4c 6f (m_crntMinimumLo
6c90: 6e 67 2c 20 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 ng, m_pFields->i
6ca0: 6e 66 6f 28 29 2c 20 61 72 67 53 74 72 69 6e 67 nfo(), argString
6cb0: 29 3b 0d 0a 09 09 09 69 66 28 32 20 3d 3d 20 72 );.....if(2 == r
6cc0: 65 73 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 es)......return
6cd0: 4e 55 4c 4c 3b 0d 0a 09 09 09 6d 5f 68 61 72 64 NULL;.....m_hard
6ce0: 50 4b 4d 69 6e 20 3d 20 30 20 3d 3d 20 72 65 73 PKMin = 0 == res
6cf0: 20 3f 20 6d 5f 68 61 72 64 43 75 72 4d 69 6e 20 ? m_hardCurMin
6d00: 3a 20 30 3b 0d 0a 09 09 09 69 66 28 6d 5f 68 61 : 0;.....if(m_ha
6d10: 72 64 50 4b 4d 69 6e 29 0d 0a 09 09 09 09 6e 65 rdPKMin)......ne
6d20: 77 20 74 63 54 65 73 74 46 69 65 6c 64 3c 74 6f w tcTestField<to
6d30: 47 72 61 74 2c 20 74 65 78 74 5f 63 6f 6d 70 61 Grat, text_compa
6d40: 72 65 3e 28 6d 5f 70 50 4b 4d 69 6e 43 6f 6e 73 re>(m_pPKMinCons
6d50: 74 72 2c 20 61 72 67 53 74 72 69 6e 67 2c 20 6d tr, argString, m
6d60: 5f 70 46 69 65 6c 64 73 2d 3e 69 6e 66 6f 28 29 _pFields->info()
6d70: 29 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 );.....else.....
6d80: 09 6e 65 77 20 74 63 54 65 73 74 46 69 65 6c 64 .new tcTestField
6d90: 3c 74 6f 47 72 61 74 45 71 2c 20 74 65 78 74 5f <toGratEq, text_
6da0: 63 6f 6d 70 61 72 65 3e 28 6d 5f 70 50 4b 4d 69 compare>(m_pPKMi
6db0: 6e 43 6f 6e 73 74 72 2c 20 61 72 67 53 74 72 69 nConstr, argStri
6dc0: 6e 67 2c 20 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 ng, m_pFields->i
6dd0: 6e 66 6f 28 29 29 3b 0d 0a 09 09 09 6d 5f 70 61 nfo());.....m_pa
6de0: 72 74 4b 65 79 4d 69 6e 20 3d 20 6d 5f 70 61 72 rtKeyMin = m_par
6df0: 74 4b 65 79 45 71 20 2b 20 61 72 67 53 74 72 69 tKeyEq + argStri
6e00: 6e 67 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a ng;.....break;..
6e10: 09 09 0d 0a 09 09 63 61 73 65 20 73 65 74 50 61 ......case setPa
6e20: 72 74 4b 65 79 4d 61 78 69 6d 75 6d 54 65 78 74 rtKeyMaximumText
6e30: 3a 0d 0a 09 09 09 72 65 73 20 3d 20 6e 6f 72 6d :.....res = norm
6e40: 61 6c 69 7a 65 53 74 72 69 6e 67 3c 32 3e 3a 3a alizeString<2>::
6e50: 73 65 74 28 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 set(m_crntMaximu
6e60: 6d 54 65 78 74 2c 20 6d 5f 70 46 69 65 6c 64 73 mText, m_pFields
6e70: 2d 3e 69 6e 66 6f 28 29 2e 6c 65 6e 67 74 68 28 ->info().length(
6e80: 29 29 3b 0d 0a 09 09 09 6d 5f 70 61 72 74 4b 65 ));.....m_partKe
6e90: 79 4d 61 78 20 3d 20 6d 5f 70 61 72 74 4b 65 79 yMax = m_partKey
6ea0: 45 71 20 2b 20 6d 5f 63 72 6e 74 4d 61 78 69 6d Eq + m_crntMaxim
6eb0: 75 6d 54 65 78 74 3b 0d 0a 09 09 09 6d 5f 68 61 umText;.....m_ha
6ec0: 72 64 50 4b 4d 61 78 20 3d 20 30 20 3d 3d 20 72 rdPKMax = 0 == r
6ed0: 65 73 20 3f 20 6d 5f 68 61 72 64 43 75 72 4d 61 es ? m_hardCurMa
6ee0: 78 20 3a 20 30 3b 0d 0a 09 09 09 69 66 28 6d 5f x : 0;.....if(m_
6ef0: 68 61 72 64 50 4b 4d 61 78 29 0d 0a 09 09 09 09 hardPKMax)......
6f00: 6e 65 77 20 74 63 54 65 73 74 46 69 65 6c 64 3c new tcTestField<
6f10: 74 6f 4c 65 73 73 2c 20 74 65 78 74 5f 6e 6f 63 toLess, text_noc
6f20: 61 73 65 5f 63 6f 6d 70 61 72 65 3e 28 6d 5f 70 ase_compare>(m_p
6f30: 50 4b 4d 61 78 43 6f 6e 73 74 72 2c 20 6d 5f 63 PKMaxConstr, m_c
6f40: 72 6e 74 4d 61 78 69 6d 75 6d 54 65 78 74 2c 20 rntMaximumText,
6f50: 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 6e 66 6f 28 m_pFields->info(
6f60: 29 29 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 ));.....else....
6f70: 09 09 6e 65 77 20 74 63 54 65 73 74 46 69 65 6c ..new tcTestFiel
6f80: 64 3c 74 6f 4c 65 73 73 45 71 2c 20 74 65 78 74 d<toLessEq, text
6f90: 5f 6e 6f 63 61 73 65 5f 63 6f 6d 70 61 72 65 3e _nocase_compare>
6fa0: 28 6d 5f 70 50 4b 4d 61 78 43 6f 6e 73 74 72 2c (m_pPKMaxConstr,
6fb0: 20 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 54 65 m_crntMaximumTe
6fc0: 78 74 2c 20 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 xt, m_pFields->i
6fd0: 6e 66 6f 28 29 29 3b 0d 0a 09 09 09 62 72 65 61 nfo());.....brea
6fe0: 6b 3b 0d 0a 09 09 63 61 73 65 20 73 65 74 50 61 k;....case setPa
6ff0: 72 74 4b 65 79 4d 61 78 69 6d 75 6d 4e 75 6d 65 rtKeyMaximumNume
7000: 72 69 63 3a 0d 0a 09 09 09 72 65 73 20 3d 20 6e ric:.....res = n
7010: 6f 72 6d 61 6c 69 7a 65 4e 75 6d 65 72 69 63 3c ormalizeNumeric<
7020: 32 2c 20 46 41 4c 53 45 2c 20 54 52 55 45 3e 3a 2, FALSE, TRUE>:
7030: 3a 73 65 74 28 6d 5f 63 72 6e 74 4d 61 78 69 6d :set(m_crntMaxim
7040: 75 6d 4e 75 6d 2c 20 6d 5f 70 46 69 65 6c 64 73 umNum, m_pFields
7050: 2d 3e 69 6e 66 6f 28 29 2c 20 61 72 67 53 74 72 ->info(), argStr
7060: 69 6e 67 29 3b 0d 0a 09 09 09 69 66 28 32 20 3d ing);.....if(2 =
7070: 3d 20 72 65 73 29 0d 0a 09 09 09 09 72 65 74 75 = res)......retu
7080: 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 6d 5f 68 rn NULL;.....m_h
7090: 61 72 64 50 4b 4d 61 78 20 3d 20 30 20 3d 3d 20 ardPKMax = 0 ==
70a0: 72 65 73 20 3f 20 6d 5f 68 61 72 64 43 75 72 4d res ? m_hardCurM
70b0: 61 78 20 3a 20 30 3b 0d 0a 09 09 09 69 66 28 6d ax : 0;.....if(m
70c0: 5f 68 61 72 64 50 4b 4d 61 78 29 0d 0a 09 09 09 _hardPKMax).....
70d0: 09 6e 65 77 20 74 63 54 65 73 74 46 69 65 6c 64 .new tcTestField
70e0: 3c 74 6f 4c 65 73 73 2c 20 74 65 78 74 5f 63 6f <toLess, text_co
70f0: 6d 70 61 72 65 3e 28 6d 5f 70 50 4b 4d 61 78 43 mpare>(m_pPKMaxC
7100: 6f 6e 73 74 72 2c 20 61 72 67 53 74 72 69 6e 67 onstr, argString
7110: 2c 20 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 6e 66 , m_pFields->inf
7120: 6f 28 29 29 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a o());.....else..
7130: 09 09 09 09 6e 65 77 20 74 63 54 65 73 74 46 69 ....new tcTestFi
7140: 65 6c 64 3c 74 6f 4c 65 73 73 45 71 2c 20 74 65 eld<toLessEq, te
7150: 78 74 5f 63 6f 6d 70 61 72 65 3e 28 6d 5f 70 50 xt_compare>(m_pP
7160: 4b 4d 61 78 43 6f 6e 73 74 72 2c 20 61 72 67 53 KMaxConstr, argS
7170: 74 72 69 6e 67 2c 20 6d 5f 70 46 69 65 6c 64 73 tring, m_pFields
7180: 2d 3e 69 6e 66 6f 28 29 29 3b 0d 0a 09 09 09 6d ->info());.....m
7190: 5f 70 61 72 74 4b 65 79 4d 61 78 20 3d 20 6d 5f _partKeyMax = m_
71a0: 70 61 72 74 4b 65 79 45 71 20 2b 20 61 72 67 53 partKeyEq + argS
71b0: 74 72 69 6e 67 3b 0d 0a 09 09 09 62 72 65 61 6b tring;.....break
71c0: 3b 0d 0a 09 09 63 61 73 65 20 73 65 74 50 61 72 ;....case setPar
71d0: 74 4b 65 79 4d 61 78 69 6d 75 6d 4c 6f 6e 67 3a tKeyMaximumLong:
71e0: 0d 0a 09 09 09 72 65 73 20 3d 20 6e 6f 72 6d 61 .....res = norma
71f0: 6c 69 7a 65 4c 6f 6e 67 3c 32 2c 20 46 41 4c 53 lizeLong<2, FALS
7200: 45 2c 20 54 52 55 45 3e 3a 3a 73 65 74 28 6d 5f E, TRUE>::set(m_
7210: 63 72 6e 74 4d 61 78 69 6d 75 6d 4c 6f 6e 67 2c crntMaximumLong,
7220: 20 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 6e 66 6f m_pFields->info
7230: 28 29 2c 20 61 72 67 53 74 72 69 6e 67 29 3b 0d (), argString);.
7240: 0a 09 09 09 69 66 28 32 20 3d 3d 20 72 65 73 29 ....if(2 == res)
7250: 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c ......return NUL
7260: 4c 3b 0d 0a 09 09 09 6d 5f 68 61 72 64 50 4b 4d L;.....m_hardPKM
7270: 61 78 20 3d 20 30 20 3d 3d 20 72 65 73 20 3f 20 ax = 0 == res ?
7280: 6d 5f 68 61 72 64 43 75 72 4d 61 78 20 3a 20 30 m_hardCurMax : 0
7290: 3b 0d 0a 09 09 09 69 66 28 6d 5f 68 61 72 64 50 ;.....if(m_hardP
72a0: 4b 4d 61 78 29 0d 0a 09 09 09 09 6e 65 77 20 74 KMax)......new t
72b0: 63 54 65 73 74 46 69 65 6c 64 3c 74 6f 4c 65 73 cTestField<toLes
72c0: 73 2c 20 74 65 78 74 5f 63 6f 6d 70 61 72 65 3e s, text_compare>
72d0: 28 6d 5f 70 50 4b 4d 61 78 43 6f 6e 73 74 72 2c (m_pPKMaxConstr,
72e0: 20 61 72 67 53 74 72 69 6e 67 2c 20 6d 5f 70 46 argString, m_pF
72f0: 69 65 6c 64 73 2d 3e 69 6e 66 6f 28 29 29 3b 0d ields->info());.
7300: 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 09 6e 65 ....else......ne
7310: 77 20 74 63 54 65 73 74 46 69 65 6c 64 3c 74 6f w tcTestField<to
7320: 4c 65 73 73 45 71 2c 20 74 65 78 74 5f 63 6f 6d LessEq, text_com
7330: 70 61 72 65 3e 28 6d 5f 70 50 4b 4d 61 78 43 6f pare>(m_pPKMaxCo
7340: 6e 73 74 72 2c 20 61 72 67 53 74 72 69 6e 67 2c nstr, argString,
7350: 20 6d 5f 70 46 69 65 6c 64 73 2d 3e 69 6e 66 6f m_pFields->info
7360: 28 29 29 3b 0d 0a 09 09 09 6d 5f 70 61 72 74 4b ());.....m_partK
7370: 65 79 4d 61 78 20 3d 20 6d 5f 70 61 72 74 4b 65 eyMax = m_partKe
7380: 79 45 71 20 2b 20 61 72 67 53 74 72 69 6e 67 3b yEq + argString;
7390: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 .....break;....c
73a0: 61 73 65 20 73 74 6f 72 65 52 65 63 4e 6f 3a 0d ase storeRecNo:.
73b0: 0a 09 09 09 6d 5f 72 65 63 4e 6f 20 3d 20 6d 5f ....m_recNo = m_
73c0: 63 72 6e 74 45 71 75 61 6c 4c 6f 6e 67 3b 0d 0a crntEqualLong;..
73d0: 09 09 09 62 72 65 61 6b 3b 0d 0a 0d 0a 09 09 63 ...break;......c
73e0: 61 73 65 20 61 64 64 54 65 73 74 45 71 75 61 6c ase addTestEqual
73f0: 54 65 78 74 3a 0d 0a 09 09 09 69 66 28 21 61 64 Text:.....if(!ad
7400: 64 54 65 73 74 54 65 78 74 3c 30 3e 3a 3a 61 64 dTestText<0>::ad
7410: 64 28 70 42 79 74 65 43 6f 64 65 2c 20 6d 5f 63 d(pByteCode, m_c
7420: 72 6e 74 45 71 75 61 6c 54 65 78 74 2c 20 6d 5f rntEqualText, m_
7430: 74 61 62 6c 65 2c 20 30 2c 20 6d 5f 70 41 64 64 table, 0, m_pAdd
7440: 69 74 69 6f 6e 61 6c 54 65 73 74 73 29 29 0d 0a itionalTests))..
7450: 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b ....return NULL;
7460: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 .....break;....c
7470: 61 73 65 20 61 64 64 54 65 73 74 45 71 75 61 6c ase addTestEqual
7480: 4e 75 6d 65 72 69 63 3a 0d 0a 09 09 09 69 66 28 Numeric:.....if(
7490: 21 61 64 64 54 65 73 74 4e 75 6d 65 72 69 63 3c !addTestNumeric<
74a0: 30 3e 3a 3a 61 64 64 28 70 42 79 74 65 43 6f 64 0>::add(pByteCod
74b0: 65 2c 20 6d 5f 63 72 6e 74 45 71 75 61 6c 4e 75 e, m_crntEqualNu
74c0: 6d 2c 20 6d 5f 74 61 62 6c 65 2c 20 30 2c 20 6d m, m_table, 0, m
74d0: 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 _pAdditionalTest
74e0: 73 29 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 s))......return
74f0: 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 65 61 6b 3b NULL;.....break;
7500: 0d 0a 09 09 63 61 73 65 20 61 64 64 54 65 73 74 ....case addTest
7510: 45 71 75 61 6c 4c 6f 6e 67 3a 0d 0a 09 09 09 69 EqualLong:.....i
7520: 66 28 21 61 64 64 54 65 73 74 4c 6f 6e 67 3c 30 f(!addTestLong<0
7530: 3e 3a 3a 61 64 64 28 70 42 79 74 65 43 6f 64 65 >::add(pByteCode
7540: 2c 20 6d 5f 63 72 6e 74 45 71 75 61 6c 4c 6f 6e , m_crntEqualLon
7550: 67 2c 20 6d 5f 74 61 62 6c 65 2c 20 30 2c 20 6d g, m_table, 0, m
7560: 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 _pAdditionalTest
7570: 73 29 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 s))......return
7580: 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 65 61 6b 3b NULL;.....break;
7590: 0d 0a 09 09 63 61 73 65 20 61 64 64 54 65 73 74 ....case addTest
75a0: 45 71 75 61 6c 52 65 63 4e 6f 3a 0d 0a 09 09 09 EqualRecNo:.....
75b0: 69 66 28 6d 5f 63 72 6e 74 45 71 75 61 6c 4c 6f if(m_crntEqualLo
75c0: 6e 67 20 3c 3d 20 30 20 7c 7c 20 6d 5f 63 72 6e ng <= 0 || m_crn
75d0: 74 45 71 75 61 6c 4c 6f 6e 67 20 3e 20 30 78 37 tEqualLong > 0x7
75e0: 46 46 46 46 46 46 46 29 0d 0a 09 09 09 09 72 65 FFFFFFF)......re
75f0: 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 6e turn NULL;.....n
7600: 65 77 20 74 63 52 65 63 4e 6f 3c 74 6f 45 71 75 ew tcRecNo<toEqu
7610: 61 6c 3e 28 6d 5f 70 41 64 64 69 74 69 6f 6e 61 al>(m_pAdditiona
7620: 6c 54 65 73 74 73 2c 20 6d 5f 63 72 6e 74 45 71 lTests, m_crntEq
7630: 75 61 6c 4c 6f 6e 67 29 3b 0d 0a 09 09 09 62 72 ualLong);.....br
7640: 65 61 6b 3b 0d 0a 0d 0a 09 09 63 61 73 65 20 61 eak;......case a
7650: 64 64 54 65 73 74 4d 69 6e 69 6d 75 6d 54 65 78 ddTestMinimumTex
7660: 74 3a 0d 0a 09 09 09 69 66 28 21 61 64 64 54 65 t:.....if(!addTe
7670: 73 74 54 65 78 74 3c 31 3e 3a 3a 61 64 64 28 70 stText<1>::add(p
7680: 42 79 74 65 43 6f 64 65 2c 20 6d 5f 63 72 6e 74 ByteCode, m_crnt
7690: 4d 69 6e 69 6d 75 6d 54 65 78 74 2c 20 6d 5f 74 MinimumText, m_t
76a0: 61 62 6c 65 2c 20 6d 5f 68 61 72 64 43 75 72 4d able, m_hardCurM
76b0: 69 6e 2c 20 6d 5f 70 41 64 64 69 74 69 6f 6e 61 in, m_pAdditiona
76c0: 6c 54 65 73 74 73 29 29 0d 0a 09 09 09 09 72 65 lTests))......re
76d0: 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 62 turn NULL;.....b
76e0: 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 61 64 reak;....case ad
76f0: 64 54 65 73 74 4d 69 6e 69 6d 75 6d 4e 75 6d 65 dTestMinimumNume
7700: 72 69 63 3a 0d 0a 09 09 09 69 66 28 21 61 64 64 ric:.....if(!add
7710: 54 65 73 74 4e 75 6d 65 72 69 63 3c 31 3e 3a 3a TestNumeric<1>::
7720: 61 64 64 28 70 42 79 74 65 43 6f 64 65 2c 20 6d add(pByteCode, m
7730: 5f 63 72 6e 74 4d 69 6e 69 6d 75 6d 4e 75 6d 2c _crntMinimumNum,
7740: 20 6d 5f 74 61 62 6c 65 2c 20 6d 5f 68 61 72 64 m_table, m_hard
7750: 43 75 72 4d 69 6e 2c 20 6d 5f 70 41 64 64 69 74 CurMin, m_pAddit
7760: 69 6f 6e 61 6c 54 65 73 74 73 29 29 0d 0a 09 09 ionalTests))....
7770: 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a ..return NULL;..
7780: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 ...break;....cas
7790: 65 20 61 64 64 54 65 73 74 4d 69 6e 69 6d 75 6d e addTestMinimum
77a0: 4c 6f 6e 67 3a 0d 0a 09 09 09 69 66 28 21 61 64 Long:.....if(!ad
77b0: 64 54 65 73 74 4c 6f 6e 67 3c 31 3e 3a 3a 61 64 dTestLong<1>::ad
77c0: 64 28 70 42 79 74 65 43 6f 64 65 2c 20 6d 5f 63 d(pByteCode, m_c
77d0: 72 6e 74 4d 69 6e 69 6d 75 6d 4c 6f 6e 67 2c 20 rntMinimumLong,
77e0: 6d 5f 74 61 62 6c 65 2c 20 6d 5f 68 61 72 64 43 m_table, m_hardC
77f0: 75 72 4d 69 6e 2c 20 6d 5f 70 41 64 64 69 74 69 urMin, m_pAdditi
7800: 6f 6e 61 6c 54 65 73 74 73 29 29 0d 0a 09 09 09 onalTests)).....
7810: 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 .return NULL;...
7820: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 ..break;....case
7830: 20 61 64 64 54 65 73 74 4d 69 6e 69 6d 75 6d 52 addTestMinimumR
7840: 65 63 4e 6f 3a 0d 0a 09 09 09 69 66 28 6d 5f 63 ecNo:.....if(m_c
7850: 72 6e 74 4d 69 6e 69 6d 75 6d 4c 6f 6e 67 20 3e rntMinimumLong >
7860: 20 30 78 37 46 46 46 46 46 46 46 29 0d 0a 09 09 0x7FFFFFFF)....
7870: 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a ..return NULL;..
7880: 09 09 09 69 66 28 6d 5f 63 72 6e 74 4d 69 6e 69 ...if(m_crntMini
7890: 6d 75 6d 4c 6f 6e 67 20 3e 20 30 29 0d 0a 09 09 mumLong > 0)....
78a0: 09 7b 0d 0a 09 09 09 09 69 66 28 6d 5f 68 61 72 .{......if(m_har
78b0: 64 43 75 72 4d 69 6e 29 0d 0a 09 09 09 09 09 6e dCurMin).......n
78c0: 65 77 20 74 63 52 65 63 4e 6f 3c 74 6f 47 72 61 ew tcRecNo<toGra
78d0: 74 3e 28 6d 5f 70 41 64 64 69 74 69 6f 6e 61 6c t>(m_pAdditional
78e0: 54 65 73 74 73 2c 20 6d 5f 63 72 6e 74 4d 69 6e Tests, m_crntMin
78f0: 69 6d 75 6d 4c 6f 6e 67 29 3b 0d 0a 09 09 09 09 imumLong);......
7900: 65 6c 73 65 0d 0a 09 09 09 09 09 6e 65 77 20 74 else.......new t
7910: 63 52 65 63 4e 6f 3c 74 6f 47 72 61 74 45 71 3e cRecNo<toGratEq>
7920: 28 6d 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 65 (m_pAdditionalTe
7930: 73 74 73 2c 20 6d 5f 63 72 6e 74 4d 69 6e 69 6d sts, m_crntMinim
7940: 75 6d 4c 6f 6e 67 29 3b 0d 0a 09 09 09 7d 0d 0a umLong);.....}..
7950: 09 09 09 62 72 65 61 6b 3b 0d 0a 0d 0a 09 09 63 ...break;......c
7960: 61 73 65 20 61 64 64 54 65 73 74 4d 61 78 69 6d ase addTestMaxim
7970: 75 6d 54 65 78 74 3a 0d 0a 09 09 09 69 66 28 21 umText:.....if(!
7980: 61 64 64 54 65 73 74 54 65 78 74 3c 32 3e 3a 3a addTestText<2>::
7990: 61 64 64 28 70 42 79 74 65 43 6f 64 65 2c 20 6d add(pByteCode, m
79a0: 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 54 65 78 74 _crntMaximumText
79b0: 2c 20 6d 5f 74 61 62 6c 65 2c 20 6d 5f 68 61 72 , m_table, m_har
79c0: 64 43 75 72 4d 61 78 2c 20 6d 5f 70 41 64 64 69 dCurMax, m_pAddi
79d0: 74 69 6f 6e 61 6c 54 65 73 74 73 29 29 0d 0a 09 tionalTests))...
79e0: 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d ...return NULL;.
79f0: 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 63 61 ....break;....ca
7a00: 73 65 20 61 64 64 54 65 73 74 4d 61 78 69 6d 75 se addTestMaximu
7a10: 6d 4e 75 6d 65 72 69 63 3a 0d 0a 09 09 09 69 66 mNumeric:.....if
7a20: 28 21 61 64 64 54 65 73 74 4e 75 6d 65 72 69 63 (!addTestNumeric
7a30: 3c 32 3e 3a 3a 61 64 64 28 70 42 79 74 65 43 6f <2>::add(pByteCo
7a40: 64 65 2c 20 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 de, m_crntMaximu
7a50: 6d 4e 75 6d 2c 20 6d 5f 74 61 62 6c 65 2c 20 6d mNum, m_table, m
7a60: 5f 68 61 72 64 43 75 72 4d 61 78 2c 20 6d 5f 70 _hardCurMax, m_p
7a70: 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 29 AdditionalTests)
7a80: 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 4e 55 )......return NU
7a90: 4c 4c 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a LL;.....break;..
7aa0: 09 09 63 61 73 65 20 61 64 64 54 65 73 74 4d 61 ..case addTestMa
7ab0: 78 69 6d 75 6d 4c 6f 6e 67 3a 0d 0a 09 09 09 69 ximumLong:.....i
7ac0: 66 28 21 61 64 64 54 65 73 74 4e 75 6d 65 72 69 f(!addTestNumeri
7ad0: 63 3c 32 3e 3a 3a 61 64 64 28 70 42 79 74 65 43 c<2>::add(pByteC
7ae0: 6f 64 65 2c 20 6d 5f 63 72 6e 74 4d 61 78 69 6d ode, m_crntMaxim
7af0: 75 6d 4c 6f 6e 67 2c 20 6d 5f 74 61 62 6c 65 2c umLong, m_table,
7b00: 20 6d 5f 68 61 72 64 43 75 72 4d 61 78 2c 20 6d m_hardCurMax, m
7b10: 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 _pAdditionalTest
7b20: 73 29 29 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 s))......return
7b30: 4e 55 4c 4c 3b 0d 0a 09 09 09 62 72 65 61 6b 3b NULL;.....break;
7b40: 0d 0a 09 09 63 61 73 65 20 61 64 64 54 65 73 74 ....case addTest
7b50: 4d 61 78 69 6d 75 6d 52 65 63 4e 6f 3a 0d 0a 09 MaximumRecNo:...
7b60: 09 09 69 66 28 6d 5f 63 72 6e 74 4d 61 78 69 6d ..if(m_crntMaxim
7b70: 75 6d 4c 6f 6e 67 20 3c 3d 20 30 29 0d 0a 09 09 umLong <= 0)....
7b80: 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a ..return NULL;..
7b90: 09 09 09 69 66 28 6d 5f 63 72 6e 74 4d 61 78 69 ...if(m_crntMaxi
7ba0: 6d 75 6d 4c 6f 6e 67 20 3c 20 30 78 37 46 46 46 mumLong < 0x7FFF
7bb0: 46 46 46 46 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 FFFF).....{.....
7bc0: 09 69 66 28 6d 5f 68 61 72 64 43 75 72 4d 61 78 .if(m_hardCurMax
7bd0: 29 0d 0a 09 09 09 09 09 6e 65 77 20 74 63 52 65 ).......new tcRe
7be0: 63 4e 6f 3c 74 6f 4c 65 73 73 3e 28 6d 5f 70 41 cNo<toLess>(m_pA
7bf0: 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 2c 20 dditionalTests,
7c00: 6d 5f 63 72 6e 74 4d 61 78 69 6d 75 6d 4c 6f 6e m_crntMaximumLon
7c10: 67 29 3b 0d 0a 09 09 09 09 65 6c 73 65 0d 0a 09 g);......else...
7c20: 09 09 09 09 6e 65 77 20 74 63 52 65 63 4e 6f 3c ....new tcRecNo<
7c30: 74 6f 4c 65 73 73 45 71 3e 28 6d 5f 70 41 64 64 toLessEq>(m_pAdd
7c40: 69 74 69 6f 6e 61 6c 54 65 73 74 73 2c 20 6d 5f itionalTests, m_
7c50: 63 72 6e 74 4d 61 78 69 6d 75 6d 4c 6f 6e 67 29 crntMaximumLong)
7c60: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 62 72 65 61 ;.....}.....brea
7c70: 6b 3b 0d 0a 09 0d 0a 09 2f 2f 2f 2f 20 c2 fb e1 k;......//// ...
7c80: ee f0 20 f1 f2 e0 f0 f2 ee e2 ee e3 ee 20 e8 20 .. .......... .
7c90: ea ee ed e5 f7 ed ee e3 ee 20 ea eb fe f7 e0 0d ......... ......
7ca0: 0a 09 09 2f 2f 20 d3 f1 f2 e0 ed ee e2 e8 f2 fc ...// ..........
7cb0: 20 ec e8 ed e8 ec e0 eb fc ed fb e9 20 ea eb fe ........... ...
7cc0: f7 20 f0 e0 e2 ed fb e9 20 ed e0 e8 ec e5 ed fc . ...... .......
7cd0: f8 e5 ec f3 20 ef ee eb ed ee ec f3 0d 0a 09 09 .... ...........
7ce0: 63 61 73 65 20 73 65 74 4d 69 6e 4b 65 79 5f 46 case setMinKey_F
7cf0: 4b 4d 69 6e 3a 0d 0a 09 09 09 6d 5f 6d 69 6e 4b KMin:.....m_minK
7d00: 54 79 70 65 20 3d 20 6b 65 79 46 4b 6e 45 71 3b Type = keyFKnEq;
7d10: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 2f .....break;..../
7d20: 2f 20 d3 f1 f2 e0 ed ee e2 e8 f2 fc 20 ec e8 ed / .......... ...
7d30: e8 ec e0 eb fc ed fb e9 20 ea eb fe f7 20 f0 e0 ........ .... ..
7d40: e2 ed fb e9 20 f1 f2 f0 ee e3 ee ec f3 20 ef ee .... ........ ..
7d50: eb ed ee ec f3 0d 0a 09 09 63 61 73 65 20 73 65 .........case se
7d60: 74 4d 69 6e 4b 65 79 5f 46 4b 45 71 75 61 6c 3a tMinKey_FKEqual:
7d70: 0d 0a 09 09 09 6d 5f 6d 69 6e 4b 54 79 70 65 20 .....m_minKType
7d80: 3d 20 6b 65 79 46 4b 45 71 3b 0d 0a 09 09 09 62 = keyFKEq;.....b
7d90: 72 65 61 6b 3b 0d 0a 09 09 2f 2f 20 d3 f1 f2 e0 reak;....// ....
7da0: ed ee e2 e8 f2 fc 20 ec e8 ed e8 ec e0 eb fc ed ...... .........
7db0: fb e9 20 ea eb fe f7 20 f0 e0 e2 ed fb e9 20 ed .. .... ...... .
7dc0: e0 e8 ec e5 ed fc f8 e5 ec f3 20 f7 e0 f1 f2 e8 .......... .....
7dd0: f7 ed ee ec f3 0d 0a 09 09 63 61 73 65 20 73 65 .........case se
7de0: 74 4d 69 6e 4b 65 79 5f 50 4b 4d 69 6e 3a 0d 0a tMinKey_PKMin:..
7df0: 09 09 09 6d 5f 6d 69 6e 4b 54 79 70 65 20 3d 20 ...m_minKType =
7e00: 6b 65 79 50 4b 6e 45 71 3b 0d 0a 09 09 09 62 72 keyPKnEq;.....br
7e10: 65 61 6b 3b 0d 0a 09 09 2f 2f 20 d3 f1 f2 e0 ed eak;....// .....
7e20: ee e2 e8 f2 fc 20 ec e8 ed e8 ec e0 eb fc ed fb ..... ..........
7e30: e9 20 ea eb fe f7 20 f0 e0 e2 ed fb e9 20 f1 f2 . .... ...... ..
7e40: f0 ee e3 ee ec f3 20 f7 e0 f1 f2 e8 f7 ed ee ec ...... .........
7e50: f3 0d 0a 09 09 63 61 73 65 20 73 65 74 4d 69 6e .....case setMin
7e60: 4b 65 79 5f 50 4b 45 71 75 61 6c 3a 0d 0a 09 09 Key_PKEqual:....
7e70: 09 6d 5f 6d 69 6e 4b 54 79 70 65 20 3d 20 6b 65 .m_minKType = ke
7e80: 79 50 4b 45 71 3b 0d 0a 09 09 09 62 72 65 61 6b yPKEq;.....break
7e90: 3b 0d 0a 09 09 2f 2f 20 c2 fb e1 f0 e0 f2 fc 20 ;....// .......
7ea0: ec e8 ed e8 ec e0 eb fc ed fb e9 20 ea eb fe f7 ........... ....
7eb0: 20 e8 e7 20 ed e0 e8 ec e5 ed fc f8 e5 e3 ee 20 .. ...........
7ec0: ef ee eb ed ee e3 ee 20 e8 20 ed e0 e8 ec e5 ed ....... . ......
7ed0: fc f8 e5 e3 ee 20 f7 e0 f1 f2 e8 f7 ed ee e3 ee ..... ..........
7ee0: 0d 0a 09 09 63 61 73 65 20 73 65 6c 4d 69 6e 4b ....case selMinK
7ef0: 65 79 5f 46 4b 4d 69 6e 5f 50 4b 4d 69 6e 3a 0d ey_FKMin_PKMin:.
7f00: 0a 09 09 09 72 65 73 20 3d 20 63 6f 6d 70 61 72 ....res = compar
7f10: 65 46 6b 5f 50 6b 28 6d 5f 66 75 6c 6c 4b 65 79 eFk_Pk(m_fullKey
7f20: 4d 69 6e 2c 20 6d 5f 70 61 72 74 4b 65 79 4d 69 Min, m_partKeyMi
7f30: 6e 2c 20 6d 5f 68 61 72 64 50 4b 4d 69 6e 20 3f n, m_hardPKMin ?
7f40: 20 30 78 46 46 20 3a 20 30 78 31 29 3b 0d 0a 09 0xFF : 0x1);...
7f50: 09 09 6d 5f 6d 69 6e 4b 54 79 70 65 20 3d 20 72 ..m_minKType = r
7f60: 65 73 20 3e 20 30 20 3f 20 6b 65 79 46 4b 6e 45 es > 0 ? keyFKnE
7f70: 71 20 3a 20 6b 65 79 50 4b 6e 45 71 3b 0d 0a 09 q : keyPKnEq;...
7f80: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 2f 2f 20 c2 ..break;....// .
7f90: fb e1 f0 e0 f2 fc 20 ec e8 ed e8 ec e0 eb fc ed ...... .........
7fa0: fb e9 20 ea eb fe f7 20 e8 e7 20 ed e0 e8 ec e5 .. .... .. .....
7fb0: ed fc f8 e5 e3 ee 20 ef ee eb ed ee e3 ee 20 e8 ...... ....... .
7fc0: 20 f1 f2 f0 ee e3 ee e3 ee 20 f7 e0 f1 f2 e8 f7 ........ ......
7fd0: ed ee e3 ee 0d 0a 09 09 63 61 73 65 20 73 65 6c ........case sel
7fe0: 4d 69 6e 4b 65 79 5f 46 4b 4d 69 6e 5f 50 4b 45 MinKey_FKMin_PKE
7ff0: 71 75 61 6c 3a 0d 0a 09 09 09 72 65 73 20 3d 20 qual:.....res =
8000: 63 6f 6d 70 61 72 65 46 6b 5f 50 6b 28 6d 5f 66 compareFk_Pk(m_f
8010: 75 6c 6c 4b 65 79 4d 69 6e 2c 20 6d 5f 70 61 72 ullKeyMin, m_par
8020: 74 4b 65 79 45 71 2c 20 30 78 31 29 3b 0d 0a 09 tKeyEq, 0x1);...
8030: 09 09 6d 5f 6d 69 6e 4b 54 79 70 65 20 3d 20 72 ..m_minKType = r
8040: 65 73 20 3e 20 30 20 3f 20 6b 65 79 46 4b 6e 45 es > 0 ? keyFKnE
8050: 71 20 3a 20 6b 65 79 50 4b 45 71 3b 0d 0a 09 09 q : keyPKEq;....
8060: 09 62 72 65 61 6b 3b 0d 0a 09 09 2f 2f 20 c2 fb .break;....// ..
8070: e1 f0 e0 f2 fc 20 ec e8 ed e8 ec e0 eb fc ed fb ..... ..........
8080: e9 20 ea eb fe f7 20 e8 e7 20 f1 f2 f0 ee e3 ee . .... .. ......
8090: e3 ee 20 ef ee eb ed ee e3 ee 20 e8 20 ed e0 e8 .. ....... . ...
80a0: ec e5 ed fc f8 e5 e3 ee 20 f7 e0 f1 f2 e8 f7 ed ........ .......
80b0: ee e3 ee 0d 0a 09 09 63 61 73 65 20 73 65 6c 4d .......case selM
80c0: 69 6e 4b 65 79 5f 46 4b 45 71 75 61 6c 5f 50 4b inKey_FKEqual_PK
80d0: 4d 69 6e 3a 0d 0a 09 09 09 72 65 73 20 3d 20 63 Min:.....res = c
80e0: 6f 6d 70 61 72 65 46 6b 5f 50 6b 28 6d 5f 66 75 ompareFk_Pk(m_fu
80f0: 6c 6c 4b 65 79 45 71 2c 20 6d 5f 70 61 72 74 4b llKeyEq, m_partK
8100: 65 79 4d 69 6e 2c 20 6d 5f 68 61 72 64 50 4b 4d eyMin, m_hardPKM
8110: 69 6e 20 3f 20 30 78 46 46 20 3a 20 30 78 31 29 in ? 0xFF : 0x1)
8120: 3b 0d 0a 09 09 09 6d 5f 6d 69 6e 4b 54 79 70 65 ;.....m_minKType
8130: 20 3d 20 72 65 73 20 3e 20 30 20 3f 20 6b 65 79 = res > 0 ? key
8140: 46 4b 45 71 20 3a 20 6b 65 79 50 4b 6e 45 71 3b FKEq : keyPKnEq;
8150: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 2f .....break;..../
8160: 2f 20 c2 fb e1 f0 e0 f2 fc 20 ec e8 ed e8 ec e0 / ....... ......
8170: eb fc ed fb e9 20 ea eb fe f7 20 e8 e7 20 f1 f2 ..... .... .. ..
8180: f0 ee e3 ee e3 ee 20 ef ee eb ed ee e3 ee 20 e8 ...... ....... .
8190: 20 f1 f2 f0 ee e3 ee e3 ee 20 f7 e0 f1 f2 e8 f7 ........ ......
81a0: ed ee e3 ee 0d 0a 09 09 63 61 73 65 20 73 65 6c ........case sel
81b0: 4d 69 6e 4b 65 79 5f 46 4b 45 71 75 61 6c 5f 50 MinKey_FKEqual_P
81c0: 4b 45 71 75 61 6c 3a 0d 0a 09 09 09 72 65 73 20 KEqual:.....res
81d0: 3d 20 63 6f 6d 70 61 72 65 46 6b 5f 50 6b 28 6d = compareFk_Pk(m
81e0: 5f 66 75 6c 6c 4b 65 79 45 71 2c 20 6d 5f 70 61 _fullKeyEq, m_pa
81f0: 72 74 4b 65 79 45 71 2c 20 30 78 31 29 3b 0d 0a rtKeyEq, 0x1);..
8200: 09 09 09 6d 5f 6d 69 6e 4b 54 79 70 65 20 3d 20 ...m_minKType =
8210: 72 65 73 20 3e 20 30 20 3f 20 6b 65 79 46 4b 45 res > 0 ? keyFKE
8220: 71 20 3a 20 6b 65 79 50 4b 45 71 3b 0d 0a 09 09 q : keyPKEq;....
8230: 09 62 72 65 61 6b 3b 0d 0a 09 09 2f 2f 20 d3 f1 .break;....// ..
8240: f2 e0 ed ee e2 e8 f2 fc 20 ec e0 ea f1 e8 ec e0 ........ .......
8250: eb fc ed fb e9 20 ea eb fe f7 20 f0 e0 e2 ed fb ..... .... .....
8260: e9 20 ec e0 ea f1 e8 ec e0 eb fc ed ee ec f3 20 . .............
8270: ef ee eb ed ee ec f3 0d 0a 09 09 63 61 73 65 20 ...........case
8280: 73 65 74 4d 61 78 4b 65 79 5f 46 4b 4d 61 78 3a setMaxKey_FKMax:
8290: 0d 0a 09 09 09 6d 5f 6d 61 78 4b 54 79 70 65 20 .....m_maxKType
82a0: 3d 20 6b 65 79 46 4b 6e 45 71 3b 0d 0a 09 09 09 = keyFKnEq;.....
82b0: 62 72 65 61 6b 3b 0d 0a 09 09 2f 2f 20 d3 f1 f2 break;....// ...
82c0: e0 ed ee e2 e8 f2 fc 20 ec e0 ea f1 e8 ec e0 eb ....... ........
82d0: fc ed fb e9 20 ea eb fe f7 20 f0 e0 e2 ed fb e9 .... .... ......
82e0: 20 f1 f2 f0 ee e3 ee ec f3 20 ef ee eb ed ee ec ........ ......
82f0: f3 0d 0a 09 09 63 61 73 65 20 73 65 74 4d 61 78 .....case setMax
8300: 4b 65 79 5f 46 4b 45 71 75 61 6c 3a 0d 0a 09 09 Key_FKEqual:....
8310: 09 6d 5f 6d 61 78 4b 54 79 70 65 20 3d 20 6b 65 .m_maxKType = ke
8320: 79 46 4b 45 71 3b 0d 0a 09 09 09 62 72 65 61 6b yFKEq;.....break
8330: 3b 0d 0a 09 09 2f 2f 20 d3 f1 f2 e0 ed ee e2 e8 ;....// ........
8340: f2 fc 20 ec e0 ea f1 e8 ec e0 eb fc ed fb e9 20 .. ............
8350: ea eb fe f7 20 f0 e0 e2 ed fb e9 20 ec e0 ea f1 .... ...... ....
8360: e8 ec e0 eb fc ed ee ec f3 20 f7 e0 f1 f2 e8 f7 ......... ......
8370: ed ee ec f3 0d 0a 09 09 63 61 73 65 20 73 65 74 ........case set
8380: 4d 61 78 4b 65 79 5f 50 4b 4d 61 78 3a 0d 0a 09 MaxKey_PKMax:...
8390: 09 09 6d 5f 6d 61 78 4b 54 79 70 65 20 3d 20 6b ..m_maxKType = k
83a0: 65 79 50 4b 6e 45 71 3b 0d 0a 09 09 09 62 72 65 eyPKnEq;.....bre
83b0: 61 6b 3b 0d 0a 09 09 2f 2f 20 d3 f1 f2 e0 ed ee ak;....// ......
83c0: e2 e8 f2 fc 20 ec e0 ea f1 e8 ec e0 eb fc ed fb .... ...........
83d0: e9 20 ea eb fe f7 20 f0 e0 e2 ed fb e9 20 f1 f2 . .... ...... ..
83e0: f0 ee e3 ee ec f3 20 f7 e0 f1 f2 e8 f7 ed ee ec ...... .........
83f0: f3 0d 0a 09 09 63 61 73 65 20 73 65 74 4d 61 78 .....case setMax
8400: 4b 65 79 5f 50 4b 45 71 75 61 6c 3a 0d 0a 09 09 Key_PKEqual:....
8410: 09 6d 5f 6d 61 78 4b 54 79 70 65 20 3d 20 6b 65 .m_maxKType = ke
8420: 79 50 4b 45 71 3b 0d 0a 09 09 09 62 72 65 61 6b yPKEq;.....break
8430: 3b 0d 0a 09 09 2f 2f 20 c2 fb e1 f0 e0 f2 fc 20 ;....// .......
8440: ec e0 ea f1 e8 ec e0 eb fc ed fb e9 20 ea eb fe ............ ...
8450: f7 20 e8 e7 20 ed e0 e8 e1 ee eb fc f8 e5 e3 ee . .. ...........
8460: 20 ef ee eb ed ee e3 ee 20 e8 20 ed e0 e8 e1 ee ....... . .....
8470: eb fc f8 e5 e3 ee 20 f7 e0 f1 f2 e8 f7 ed ee e3 ...... .........
8480: ee 0d 0a 09 09 63 61 73 65 20 73 65 6c 4d 61 78 .....case selMax
8490: 4b 65 79 5f 46 4b 4d 61 78 5f 50 4b 4d 61 78 3a Key_FKMax_PKMax:
84a0: 0d 0a 09 09 09 72 65 73 20 3d 20 63 6f 6d 70 61 .....res = compa
84b0: 72 65 46 6b 5f 50 6b 28 6d 5f 66 75 6c 6c 4b 65 reFk_Pk(m_fullKe
84c0: 79 4d 61 78 2c 20 6d 5f 70 61 72 74 4b 65 79 4d yMax, m_partKeyM
84d0: 61 78 2c 20 6d 5f 68 61 72 64 50 4b 4d 61 78 20 ax, m_hardPKMax
84e0: 3f 20 30 78 31 20 3a 20 30 78 46 46 29 3b 0d 0a ? 0x1 : 0xFF);..
84f0: 09 09 09 6d 5f 6d 61 78 4b 54 79 70 65 20 3d 20 ...m_maxKType =
8500: 72 65 73 20 3e 20 30 20 3f 20 6b 65 79 50 4b 6e res > 0 ? keyPKn
8510: 45 71 20 3a 20 6b 65 79 46 4b 6e 45 71 3b 0d 0a Eq : keyFKnEq;..
8520: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 2f 2f 20 ...break;....//
8530: c2 fb e1 f0 e0 f2 fc 20 ec e0 ea f1 e8 ec e0 eb ....... ........
8540: fc ed fb e9 20 ea eb fe f7 20 e8 e7 20 ed e0 e8 .... .... .. ...
8550: e1 ee eb fc f8 e5 e3 ee 20 ef ee eb ed ee e3 ee ........ .......
8560: 20 e8 20 f1 f2 f0 ee e3 ee e3 ee 20 f7 e0 f1 f2 . ........ ....
8570: e8 f7 ed ee e3 ee 0d 0a 09 09 63 61 73 65 20 73 ..........case s
8580: 65 6c 4d 61 78 4b 65 79 5f 46 4b 4d 61 78 5f 50 elMaxKey_FKMax_P
8590: 4b 45 71 75 61 6c 3a 0d 0a 09 09 09 72 65 73 20 KEqual:.....res
85a0: 3d 20 63 6f 6d 70 61 72 65 46 6b 5f 50 6b 28 6d = compareFk_Pk(m
85b0: 5f 66 75 6c 6c 4b 65 79 4d 61 78 2c 20 6d 5f 70 _fullKeyMax, m_p
85c0: 61 72 74 4b 65 79 45 71 2c 20 30 78 46 46 29 3b artKeyEq, 0xFF);
85d0: 0d 0a 09 09 09 6d 5f 6d 61 78 4b 54 79 70 65 20 .....m_maxKType
85e0: 3d 20 72 65 73 20 3e 20 30 20 3f 20 6b 65 79 50 = res > 0 ? keyP
85f0: 4b 45 71 20 3a 20 6b 65 79 46 4b 6e 45 71 3b 0d KEq : keyFKnEq;.
8600: 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 2f 2f ....break;....//
8610: 20 c2 fb e1 f0 e0 f2 fc 20 ec e0 ea f1 e8 ec e0 ....... .......
8620: eb fc ed fb e9 20 ea eb fe f7 20 e8 e7 20 f1 f2 ..... .... .. ..
8630: f0 ee e3 ee e3 ee 20 ef ee eb ed ee e3 ee 20 e8 ...... ....... .
8640: 20 ed e0 e8 e1 ee eb fc f8 e5 e3 ee 20 f7 e0 f1 ........... ...
8650: f2 e8 f7 ed ee e3 ee 0d 0a 09 09 63 61 73 65 20 ...........case
8660: 73 65 6c 4d 61 78 4b 65 79 5f 46 4b 45 71 75 61 selMaxKey_FKEqua
8670: 6c 5f 50 4b 4d 61 78 3a 0d 0a 09 09 09 72 65 73 l_PKMax:.....res
8680: 20 3d 20 63 6f 6d 70 61 72 65 46 6b 5f 50 6b 28 = compareFk_Pk(
8690: 6d 5f 66 75 6c 6c 4b 65 79 45 71 2c 20 6d 5f 70 m_fullKeyEq, m_p
86a0: 61 72 74 4b 65 79 4d 61 78 2c 20 6d 5f 68 61 72 artKeyMax, m_har
86b0: 64 50 4b 4d 61 78 20 3f 20 30 78 31 20 3a 20 30 dPKMax ? 0x1 : 0
86c0: 78 46 46 29 3b 0d 0a 09 09 09 6d 5f 6d 61 78 4b xFF);.....m_maxK
86d0: 54 79 70 65 20 3d 20 72 65 73 20 3e 20 30 20 3f Type = res > 0 ?
86e0: 20 6b 65 79 50 4b 6e 45 71 20 3a 20 6b 65 79 46 keyPKnEq : keyF
86f0: 4b 45 71 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d KEq;.....break;.
8700: 0a 09 09 2f 2f 20 c2 fb e1 f0 e0 f2 fc 20 ec e0 ...// ....... ..
8710: ea f1 e8 ec e0 eb fc ed fb e9 20 ea eb fe f7 20 .......... ....
8720: e8 e7 20 f1 f2 f0 ee e3 ee e3 ee 20 ef ee eb ed .. ........ ....
8730: ee e3 ee 20 e8 20 f1 f2 f0 ee e3 ee e3 ee 20 f7 ... . ........ .
8740: e0 f1 f2 e8 f7 ed ee e3 ee 0d 0a 09 09 63 61 73 .............cas
8750: 65 20 73 65 6c 4d 61 78 4b 65 79 5f 46 4b 45 71 e selMaxKey_FKEq
8760: 75 61 6c 5f 50 4b 45 71 75 61 6c 3a 0d 0a 09 09 ual_PKEqual:....
8770: 09 72 65 73 20 3d 20 63 6f 6d 70 61 72 65 46 6b .res = compareFk
8780: 5f 50 6b 28 6d 5f 66 75 6c 6c 4b 65 79 45 71 2c _Pk(m_fullKeyEq,
8790: 20 6d 5f 70 61 72 74 4b 65 79 45 71 2c 20 30 78 m_partKeyEq, 0x
87a0: 46 46 29 3b 0d 0a 09 09 09 6d 5f 6d 61 78 4b 54 FF);.....m_maxKT
87b0: 79 70 65 20 3d 20 72 65 73 20 3e 20 30 20 3f 20 ype = res > 0 ?
87c0: 6b 65 79 50 4b 45 71 20 3a 20 6b 65 79 46 4b 45 keyPKEq : keyFKE
87d0: 71 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 q;.....break;...
87e0: 09 2f 2f 20 d1 f0 e0 e2 ed e5 ed e8 e5 20 ec e0 .// ......... ..
87f0: ea f1 20 e8 20 ec e8 ed 20 ea eb fe f7 e5 e9 2e .. . ... .......
8800: 0d 0a 09 09 63 61 73 65 20 63 6d 70 4d 69 6e 4d ....case cmpMinM
8810: 61 78 4b 65 79 73 3a 0d 0a 09 09 09 7b 0d 0a 09 axKeys:.....{...
8820: 09 09 09 73 77 69 74 63 68 28 6d 5f 6d 69 6e 4b ...switch(m_minK
8830: 54 79 70 65 20 7c 20 28 6d 5f 6d 61 78 4b 54 79 Type | (m_maxKTy
8840: 70 65 20 3c 3c 20 32 29 29 0d 0a 09 09 09 09 7b pe << 2))......{
8850: 0d 0a 09 09 09 09 2f 2f 20 d1 ed e8 e7 f3 20 ee ......// ..... .
8860: e3 f0 e0 ed e8 f7 e5 ed ee 20 ec e8 ed e8 ec e0 ......... ......
8870: eb fc ed fb ec 20 ef ee eb ed fb ec 20 ea eb fe ..... ...... ...
8880: f7 ee ec 2c 20 f1 e2 e5 f0 f5 f3 20 f1 f2 f0 ee ..., ...... ....
8890: e3 e8 ec 20 f7 e0 f1 f2 e8 f7 ed fb ec 2e 09 0d ... ............
88a0: 0a 09 09 09 09 63 61 73 65 20 6b 65 79 46 4b 6e .....case keyFKn
88b0: 45 71 20 7c 20 28 6b 65 79 50 4b 45 71 20 3c 3c Eq | (keyPKEq <<
88c0: 20 32 29 3a 0d 0a 09 09 09 09 09 72 65 73 20 3d 2):.......res =
88d0: 20 63 6f 6d 70 61 72 65 46 6b 5f 50 6b 28 6d 5f compareFk_Pk(m_
88e0: 66 75 6c 6c 4b 65 79 4d 69 6e 2c 20 6d 5f 70 61 fullKeyMin, m_pa
88f0: 72 74 4b 65 79 45 71 2c 20 30 78 46 46 29 3b 0d rtKeyEq, 0xFF);.
8900: 0a 09 09 09 09 09 69 66 28 72 65 73 20 3e 20 30 ......if(res > 0
8910: 20 7c 7c 20 28 72 65 73 20 3d 3d 20 30 20 26 26 || (res == 0 &&
8920: 20 6d 5f 68 61 72 64 46 4b 4d 69 6e 29 29 0d 0a m_hardFKMin))..
8930: 09 09 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c ......return NUL
8940: 4c 3b 0d 0a 09 09 09 09 09 62 72 65 61 6b 3b 0d L;.......break;.
8950: 0a 09 09 09 09 2f 2f 20 d1 ed e8 e7 f3 20 ee e3 .....// ..... ..
8960: f0 e0 ed e8 f7 e5 ed ed ee 20 ec e8 ed e8 ec e0 ......... ......
8970: eb fc ed fb ec 20 ef ee eb ed fb ec 20 ea eb fe ..... ...... ...
8980: f7 ee ec 2c 20 f1 e2 e5 f0 f5 f3 20 ec e0 ea f1 ..., ...... ....
8990: e8 ec e0 eb fc ed fb ec 20 f7 e0 f1 f2 e8 f7 ed ........ .......
89a0: fb ec 0d 0a 09 09 09 09 63 61 73 65 20 6b 65 79 ........case key
89b0: 46 4b 6e 45 71 20 7c 20 28 6b 65 79 50 4b 6e 45 FKnEq | (keyPKnE
89c0: 71 20 3c 3c 20 32 29 3a 0d 0a 09 09 09 09 09 72 q << 2):.......r
89d0: 65 73 20 3d 20 63 6f 6d 70 61 72 65 46 6b 5f 50 es = compareFk_P
89e0: 6b 28 6d 5f 66 75 6c 6c 4b 65 79 4d 69 6e 2c 20 k(m_fullKeyMin,
89f0: 6d 5f 70 61 72 74 4b 65 79 4d 61 78 2c 20 6d 5f m_partKeyMax, m_
8a00: 68 61 72 64 50 4b 4d 61 78 20 3f 20 30 78 31 20 hardPKMax ? 0x1
8a10: 3a 20 30 78 46 46 29 3b 0d 0a 09 09 09 09 09 69 : 0xFF);.......i
8a20: 66 28 72 65 73 20 3e 20 30 20 7c 7c 20 28 72 65 f(res > 0 || (re
8a30: 73 20 3d 3d 20 30 20 26 26 20 28 6d 5f 68 61 72 s == 0 && (m_har
8a40: 64 46 4b 4d 69 6e 20 7c 7c 20 6d 5f 68 61 72 64 dFKMin || m_hard
8a50: 50 4b 4d 61 78 29 29 29 0d 0a 09 09 09 09 09 09 PKMax)))........
8a60: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 return NULL;....
8a70: 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 09 2f ...break;....../
8a80: 2f 20 d1 ed e8 e7 f3 20 ee e3 f0 e0 ed e8 f7 e5 / ..... ........
8a90: ed ee 20 f1 f2 f0 ee e3 e8 ec 20 ef ee eb ed fb .. ....... .....
8aa0: ec 20 ea eb fe f7 ee ec 2c 20 f1 e2 e5 f0 f5 f3 . ......, ......
8ab0: 20 f1 f2 f0 ee e3 e8 ec 20 f7 e0 f1 f2 ed fb ec ....... .......
8ac0: 0d 0a 09 09 09 09 63 61 73 65 20 6b 65 79 46 4b ......case keyFK
8ad0: 45 71 20 7c 20 28 6b 65 79 50 4b 45 71 20 3c 3c Eq | (keyPKEq <<
8ae0: 20 32 29 3a 0d 0a 09 09 09 09 09 72 65 73 20 3d 2):.......res =
8af0: 20 63 6f 6d 70 61 72 65 46 6b 5f 50 6b 28 6d 5f compareFk_Pk(m_
8b00: 66 75 6c 6c 4b 65 79 45 71 2c 20 6d 5f 70 61 72 fullKeyEq, m_par
8b10: 74 4b 65 79 45 71 2c 20 30 78 46 46 29 3b 0d 0a tKeyEq, 0xFF);..
8b20: 09 09 09 09 09 69 66 28 72 65 73 20 3e 20 30 29 .....if(res > 0)
8b30: 0d 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 4e ........return N
8b40: 55 4c 4c 3b 0d 0a 09 09 09 09 09 62 72 65 61 6b ULL;.......break
8b50: 3b 0d 0a 09 09 09 09 2f 2f 20 d1 ed e8 e7 f3 20 ;......// .....
8b60: ee e3 f0 e0 ed e8 f7 e5 ed ee 20 f1 f2 f0 ee e3 .......... .....
8b70: e8 ec 20 ef ee eb ed fb ec 20 ea eb fe f7 ee ec .. ...... ......
8b80: 2c 20 f1 e2 e5 f0 f5 f3 20 ec e0 ea f1 e8 ec e0 , ...... .......
8b90: eb fc ed fb ec 20 f7 e0 f1 f2 ed fb ec 09 0d 0a ..... ..........
8ba0: 09 09 09 09 63 61 73 65 20 6b 65 79 46 4b 45 71 ....case keyFKEq
8bb0: 20 7c 20 28 6b 65 79 50 4b 6e 45 71 20 3c 3c 20 | (keyPKnEq <<
8bc0: 32 29 3a 0d 0a 09 09 09 09 09 72 65 73 20 3d 20 2):.......res =
8bd0: 63 6f 6d 70 61 72 65 46 6b 5f 50 6b 28 6d 5f 66 compareFk_Pk(m_f
8be0: 75 6c 6c 4b 65 79 45 71 2c 20 6d 5f 70 61 72 74 ullKeyEq, m_part
8bf0: 4b 65 79 4d 61 78 2c 20 6d 5f 68 61 72 64 50 4b KeyMax, m_hardPK
8c00: 4d 61 78 20 3f 20 30 78 31 20 3a 20 30 78 46 46 Max ? 0x1 : 0xFF
8c10: 29 3b 0d 0a 09 09 09 09 09 69 66 28 72 65 73 20 );.......if(res
8c20: 3e 20 30 20 7c 7c 20 28 72 65 73 20 3d 3d 20 30 > 0 || (res == 0
8c30: 20 26 26 20 6d 5f 68 61 72 64 50 4b 4d 61 78 29 && m_hardPKMax)
8c40: 29 0d 0a 09 09 09 09 09 09 72 65 74 75 72 6e 20 )........return
8c50: 4e 55 4c 4c 3b 0d 0a 09 09 09 09 09 62 72 65 61 NULL;.......brea
8c60: 6b 3b 0d 0a 09 09 09 09 2f 2f 20 d1 ed e8 e7 f3 k;......// .....
8c70: 20 ee e3 f0 e0 ed e8 f7 e5 ed ee 20 ec e8 ed e8 .......... ....
8c80: ec e0 eb fc ed fb ec 20 f7 e0 f1 f2 e8 f7 ed fb ....... ........
8c90: ec 20 ea eb fe f7 ee ec 2c 20 f1 e2 e5 f0 f5 f3 . ......, ......
8ca0: 20 f1 f2 f0 ee e3 e8 ec 20 ef ee eb ed fb ec 09 ....... .......
8cb0: 0d 0a 09 09 09 09 63 61 73 65 20 6b 65 79 50 4b ......case keyPK
8cc0: 6e 45 71 20 7c 20 28 6b 65 79 46 4b 45 71 20 3c nEq | (keyFKEq <
8cd0: 3c 20 32 29 3a 0d 0a 09 09 09 09 09 72 65 73 20 < 2):.......res
8ce0: 3d 20 63 6f 6d 70 61 72 65 46 6b 5f 50 6b 28 6d = compareFk_Pk(m
8cf0: 5f 66 75 6c 6c 4b 65 79 45 71 2c 20 6d 5f 70 61 _fullKeyEq, m_pa
8d00: 72 74 4b 65 79 4d 69 6e 2c 20 6d 5f 68 61 72 64 rtKeyMin, m_hard
8d10: 50 4b 4d 69 6e 20 3f 20 30 78 46 46 20 3a 20 30 PKMin ? 0xFF : 0
8d20: 78 31 29 3b 0d 0a 09 09 09 09 09 69 66 28 72 65 x1);.......if(re
8d30: 73 20 3c 20 30 20 7c 7c 20 28 72 65 73 20 3d 3d s < 0 || (res ==
8d40: 20 30 20 26 26 20 6d 5f 68 61 72 64 50 4b 4d 69 0 && m_hardPKMi
8d50: 6e 29 29 0d 0a 09 09 09 09 09 09 72 65 74 75 72 n))........retur
8d60: 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 09 09 62 72 n NULL;.......br
8d70: 65 61 6b 3b 0d 0a 09 09 09 09 2f 2f 20 d1 ed e8 eak;......// ...
8d80: e7 f3 20 ee e3 f0 e0 ed e8 f7 e5 ed ee 20 ec e8 .. .......... ..
8d90: ed e8 ec e0 eb fc ed fb ec 20 f7 e0 f1 f2 e8 f7 ......... ......
8da0: ed fb ec 20 ea eb fe f7 ee ec 2c 20 f1 e2 e5 f0 ... ......, ....
8db0: f5 f3 20 ec e0 ea f1 e8 ec e0 eb fc ed fb ec 20 .. ............
8dc0: ef ee eb ed fb ec 09 0d 0a 09 09 09 09 63 61 73 .............cas
8dd0: 65 20 6b 65 79 50 4b 6e 45 71 20 7c 20 28 6b 65 e keyPKnEq | (ke
8de0: 79 46 4b 6e 45 71 20 3c 3c 20 32 29 3a 0d 0a 09 yFKnEq << 2):...
8df0: 09 09 09 09 72 65 73 20 3d 20 63 6f 6d 70 61 72 ....res = compar
8e00: 65 46 6b 5f 50 6b 28 6d 5f 66 75 6c 6c 4b 65 79 eFk_Pk(m_fullKey
8e10: 4d 61 78 2c 20 6d 5f 70 61 72 74 4b 65 79 4d 69 Max, m_partKeyMi
8e20: 6e 2c 20 6d 5f 68 61 72 64 50 4b 4d 69 6e 20 3f n, m_hardPKMin ?
8e30: 20 30 78 46 46 20 3a 20 30 78 31 29 3b 0d 0a 09 0xFF : 0x1);...
8e40: 09 09 09 09 69 66 28 72 65 73 20 3c 20 30 20 7c ....if(res < 0 |
8e50: 7c 20 28 72 65 73 20 3d 3d 20 30 20 26 26 20 28 | (res == 0 && (
8e60: 6d 5f 68 61 72 64 50 4b 4d 69 6e 20 7c 7c 20 6d m_hardPKMin || m
8e70: 5f 68 61 72 64 46 4b 4d 61 78 29 29 29 0d 0a 09 _hardFKMax)))...
8e80: 09 09 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c .....return NULL
8e90: 3b 0d 0a 09 09 09 09 09 62 72 65 61 6b 3b 0d 0a ;.......break;..
8ea0: 09 09 09 09 2f 2f 20 d1 ed e8 e7 f3 20 ee e3 f0 ....// ..... ...
8eb0: e0 ed e8 f7 e5 ed ee 20 f1 f2 f0 ee e3 e8 ec 20 ....... .......
8ec0: f7 e0 f1 f2 e8 f7 ed fb ec 20 ea eb fe f7 ee ec ......... ......
8ed0: 2c 20 f1 e2 e5 f0 f5 f3 20 f1 f2 f0 ee e3 e8 ec , ...... .......
8ee0: 20 ef ee eb ed fb ec 09 0d 0a 09 09 09 09 63 61 .............ca
8ef0: 73 65 20 6b 65 79 50 4b 45 71 20 7c 20 28 6b 65 se keyPKEq | (ke
8f00: 79 46 4b 45 71 20 3c 3c 20 32 29 3a 0d 0a 09 09 yFKEq << 2):....
8f10: 09 09 09 72 65 73 20 3d 20 63 6f 6d 70 61 72 65 ...res = compare
8f20: 46 6b 5f 50 6b 28 6d 5f 66 75 6c 6c 4b 65 79 45 Fk_Pk(m_fullKeyE
8f30: 71 2c 20 6d 5f 70 61 72 74 4b 65 79 45 71 2c 20 q, m_partKeyEq,
8f40: 30 78 31 29 3b 0d 0a 09 09 09 09 09 69 66 28 72 0x1);.......if(r
8f50: 65 73 20 3c 20 30 29 0d 0a 09 09 09 09 09 09 72 es < 0)........r
8f60: 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 09 09 eturn NULL;.....
8f70: 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 09 2f 2f ..break;......//
8f80: 20 d1 ed e8 e7 f3 20 ee e3 f0 e0 ed e8 f7 e5 ed ..... .........
8f90: ee 20 f1 f2 f0 ee e3 e8 ec 20 f7 e0 f1 f2 ed fb . ....... ......
8fa0: ec 20 ea eb fe f7 ee ec 2c 20 f1 e2 e5 f0 f5 f3 . ......, ......
8fb0: 20 ec e0 ea f1 e8 ec e0 eb fc ed fb ec 20 ef ee ............ ..
8fc0: eb ed fb ec 0d 0a 09 09 09 09 63 61 73 65 20 6b ..........case k
8fd0: 65 79 50 4b 45 71 20 7c 20 28 6b 65 79 46 4b 6e eyPKEq | (keyFKn
8fe0: 45 71 20 3c 3c 20 32 29 3a 0d 0a 09 09 09 09 09 Eq << 2):.......
8ff0: 72 65 73 20 3d 20 63 6f 6d 70 61 72 65 46 6b 5f res = compareFk_
9000: 50 6b 28 6d 5f 66 75 6c 6c 4b 65 79 4d 61 78 2c Pk(m_fullKeyMax,
9010: 20 6d 5f 70 61 72 74 4b 65 79 45 71 2c 20 30 78 m_partKeyEq, 0x
9020: 31 29 3b 0d 0a 09 09 09 09 09 69 66 28 72 65 73 1);.......if(res
9030: 20 3c 20 30 20 7c 7c 20 28 72 65 73 20 3d 3d 20 < 0 || (res ==
9040: 30 20 26 26 20 6d 5f 68 61 72 64 46 4b 4d 61 78 0 && m_hardFKMax
9050: 29 29 0d 0a 09 09 09 09 09 09 72 65 74 75 72 6e ))........return
9060: 20 4e 55 4c 4c 3b 0d 0a 09 09 09 09 09 62 72 65 NULL;.......bre
9070: 61 6b 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 7d ak;......}.....}
9080: 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 2f .....break;..../
9090: 2f 20 c8 e4 f2 e8 20 ee f2 20 ed e0 f7 e0 eb e0 / .... .. ......
90a0: 20 e4 ee 20 ea ee ed f6 e0 0d 0a 09 09 63 61 73 .. .........cas
90b0: 65 20 67 6f 74 6f 46 69 72 73 74 54 6f 4c 61 73 e gotoFirstToLas
90c0: 74 3a 0d 0a 09 09 09 72 65 74 75 72 6e 20 47 6f t:.....return Go
90d0: 74 6f 46 69 72 73 74 54 6f 4c 61 73 74 28 29 3b toFirstToLast();
90e0: 0d 0a 09 09 2f 2f 20 c8 e4 f2 e8 20 ee f2 20 ed ....// .... .. .
90f0: e0 f7 e0 eb e0 20 e4 ee 20 ec e0 ea f1 e8 ec e0 ..... .. .......
9100: eb fc ed ee e3 ee 20 ea eb fe f7 e0 0d 0a 09 09 ...... .........
9110: 63 61 73 65 20 67 6f 74 6f 46 69 72 73 74 54 6f case gotoFirstTo
9120: 4d 61 78 3a 0d 0a 09 09 09 72 65 74 75 72 6e 20 Max:.....return
9130: 47 6f 74 6f 46 69 72 73 74 54 6f 4d 61 78 28 29 GotoFirstToMax()
9140: 3b 0d 0a 09 09 2f 2f 20 c8 e4 f2 e8 20 ee f2 20 ;....// .... ..
9150: ec e8 ed e8 ec e0 eb fc ed ee e3 ee 20 ea eb fe ............ ...
9160: f7 e0 20 e4 ee 20 ea ee ed f6 e0 0d 0a 09 09 63 .. .. .........c
9170: 61 73 65 20 67 6f 74 6f 4d 69 6e 54 6f 4c 61 73 ase gotoMinToLas
9180: 74 3a 0d 0a 09 09 09 72 65 74 75 72 6e 20 47 6f t:.....return Go
9190: 74 6f 4d 69 6e 54 6f 4c 61 73 74 28 29 3b 0d 0a toMinToLast();..
91a0: 09 09 2f 2f 20 c8 e4 f2 e8 20 ee f2 20 ec e8 ed ..// .... .. ...
91b0: e8 ec e0 eb fc ed ee e3 ee 20 ea eb fe f7 e0 20 ......... .....
91c0: e4 ee 20 ea ee ed e5 f7 ed ee e3 ee 20 ea eb fe .. ......... ...
91d0: f7 e0 0d 0a 09 09 63 61 73 65 20 67 6f 74 6f 4d ......case gotoM
91e0: 69 6e 54 6f 4d 61 78 3a 0d 0a 09 09 09 72 65 74 inToMax:.....ret
91f0: 75 72 6e 20 47 6f 74 6f 4d 69 6e 54 6f 4d 61 78 urn GotoMinToMax
9200: 28 29 3b 0d 0a 09 09 2f 2f 20 c8 e4 f2 e8 20 ee ();....// .... .
9210: f2 20 ea ee ed f6 e0 20 e4 ee 20 ed e0 f7 e0 eb . ..... .. .....
9220: e0 0d 0a 09 09 63 61 73 65 20 67 6f 74 6f 4c 61 .....case gotoLa
9230: 73 74 54 6f 46 69 72 73 74 3a 0d 0a 09 09 09 72 stToFirst:.....r
9240: 65 74 75 72 6e 20 47 6f 74 6f 4c 61 73 74 54 6f eturn GotoLastTo
9250: 46 69 72 73 74 28 29 3b 0d 0a 09 09 2f 2f 20 c8 First();....// .
9260: e4 f2 e8 20 ee f2 20 ea ee ed e5 f7 ed ee e3 ee ... .. .........
9270: 20 ea eb fe f7 e0 20 e4 ee 20 ed e0 f7 e0 eb e0 ..... .. ......
9280: 0d 0a 09 09 63 61 73 65 20 67 6f 74 6f 4d 61 78 ....case gotoMax
9290: 54 6f 46 69 72 73 74 3a 0d 0a 09 09 09 72 65 74 ToFirst:.....ret
92a0: 75 72 6e 20 47 6f 74 6f 4d 61 78 54 6f 46 69 72 urn GotoMaxToFir
92b0: 73 74 28 29 3b 0d 0a 09 09 2f 2f 20 c8 e4 f2 e8 st();....// ....
92c0: 20 ee f2 20 ea ee ed f6 e0 20 e4 ee 20 ec e8 ed .. ..... .. ...
92d0: e8 ec e0 eb fc ed ee e3 ee 20 ea eb fe f7 e0 0d ......... ......
92e0: 0a 09 09 63 61 73 65 20 67 6f 74 6f 4c 61 73 74 ...case gotoLast
92f0: 54 6f 4d 69 6e 3a 0d 0a 09 09 09 72 65 74 75 72 ToMin:.....retur
9300: 6e 20 47 6f 74 6f 4c 61 73 74 54 6f 4d 69 6e 28 n GotoLastToMin(
9310: 29 3b 0d 0a 09 09 2f 2f 20 c8 e4 f2 e8 20 ee f2 );....// .... ..
9320: 20 ea ee ed e5 f7 ed ee e3 ee 20 ea eb fe f7 e0 ......... .....
9330: 20 e4 ee 20 ec e8 ed e8 ec e0 eb fc ed ee e3 ee .. ............
9340: 20 ea eb fe f7 e0 0d 0a 09 09 63 61 73 65 20 67 .........case g
9350: 6f 74 6f 4d 61 78 54 6f 4d 69 6e 3a 0d 0a 09 09 otoMaxToMin:....
9360: 09 72 65 74 75 72 6e 20 47 6f 74 6f 4d 61 78 54 .return GotoMaxT
9370: 6f 4d 69 6e 28 29 3b 0d 0a 09 09 63 61 73 65 20 oMin();....case
9380: 67 6f 74 6f 54 6f 52 6f 77 3a 0d 0a 09 09 09 72 gotoToRow:.....r
9390: 65 74 75 72 6e 20 47 6f 74 6f 54 6f 52 6f 77 28 eturn GotoToRow(
93a0: 29 3b 0d 0a 09 09 64 65 66 61 75 6c 74 3a 0d 0a );....default:..
93b0: 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d ...return NULL;.
93c0: 0a 09 09 7d 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 76 ...}...}..}....v
93d0: 6f 69 64 20 62 79 74 65 43 6f 64 65 54 6f 53 74 oid byteCodeToSt
93e0: 72 28 42 59 54 45 2a 20 70 53 74 61 72 74 2c 20 r(BYTE* pStart,
93f0: 42 59 54 45 2a 20 70 45 6e 64 2c 20 43 53 74 72 BYTE* pEnd, CStr
9400: 69 6e 67 26 20 72 65 73 29 0d 0a 7b 0d 0a 09 69 ing& res)..{...i
9410: 6e 74 20 6c 65 6e 20 3d 20 70 45 6e 64 20 2d 20 nt len = pEnd -
9420: 70 53 74 61 72 74 3b 0d 0a 09 69 6e 74 20 6e 65 pStart;...int ne
9430: 77 4c 65 6e 20 3d 20 28 6c 65 6e 20 2b 20 36 29 wLen = (len + 6)
9440: 20 2f 20 37 20 2a 20 38 20 2b 20 37 3b 0d 0a 09 / 7 * 8 + 7;...
9450: 4c 50 53 54 52 20 70 74 72 20 3d 20 72 65 73 2e LPSTR ptr = res.
9460: 47 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 GetBufferSetLeng
9470: 74 68 28 6e 65 77 4c 65 6e 29 3b 0d 0a 09 77 73 th(newLen);...ws
9480: 70 72 69 6e 74 66 28 70 74 72 2c 20 22 25 36 69 printf(ptr, "%6i
9490: 20 22 2c 20 6c 65 6e 29 3b 0d 0a 09 70 74 72 20 ", len);...ptr
94a0: 2b 3d 20 37 3b 0d 0a 09 77 68 69 6c 65 28 70 53 += 7;...while(pS
94b0: 74 61 72 74 20 3c 20 70 45 6e 64 29 0d 0a 09 7b tart < pEnd)...{
94c0: 0d 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 27 20 27 ....*ptr++ = ' '
94d0: 20 2b 20 28 20 70 53 74 61 72 74 5b 30 5d 20 26 + ( pStart[0] &
94e0: 20 30 78 37 46 29 3b 0d 0a 09 09 2a 70 74 72 2b 0x7F);....*ptr+
94f0: 2b 20 3d 20 27 20 27 20 2b 20 28 28 70 53 74 61 + = ' ' + ((pSta
9500: 72 74 5b 30 5d 3e 3e 37 29 20 7c 20 28 28 70 53 rt[0]>>7) | ((pS
9510: 74 61 72 74 5b 31 5d 20 26 20 30 78 33 46 29 3c tart[1] & 0x3F)<
9520: 3c 31 29 29 3b 0d 0a 09 09 2a 70 74 72 2b 2b 20 <1));....*ptr++
9530: 3d 20 27 20 27 20 2b 20 28 28 70 53 74 61 72 74 = ' ' + ((pStart
9540: 5b 31 5d 3e 3e 36 29 20 7c 20 28 28 70 53 74 61 [1]>>6) | ((pSta
9550: 72 74 5b 32 5d 20 26 20 30 78 31 46 29 3c 3c 32 rt[2] & 0x1F)<<2
9560: 29 29 3b 0d 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 ));....*ptr++ =
9570: 27 20 27 20 2b 20 28 28 70 53 74 61 72 74 5b 32 ' ' + ((pStart[2
9580: 5d 3e 3e 35 29 20 7c 20 28 28 70 53 74 61 72 74 ]>>5) | ((pStart
9590: 5b 33 5d 20 26 20 30 78 46 29 20 3c 3c 33 29 29 [3] & 0xF) <<3))
95a0: 3b 0d 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 27 20 ;....*ptr++ = '
95b0: 27 20 2b 20 28 28 70 53 74 61 72 74 5b 33 5d 3e ' + ((pStart[3]>
95c0: 3e 34 29 20 7c 20 28 28 70 53 74 61 72 74 5b 34 >4) | ((pStart[4
95d0: 5d 20 26 20 30 78 37 29 20 3c 3c 34 29 29 3b 0d ] & 0x7) <<4));.
95e0: 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 27 20 27 20 ...*ptr++ = ' '
95f0: 2b 20 28 28 70 53 74 61 72 74 5b 34 5d 3e 3e 33 + ((pStart[4]>>3
9600: 29 20 7c 20 28 28 70 53 74 61 72 74 5b 35 5d 20 ) | ((pStart[5]
9610: 26 20 30 78 33 29 20 3c 3c 35 29 29 3b 0d 0a 09 & 0x3) <<5));...
9620: 09 2a 70 74 72 2b 2b 20 3d 20 27 20 27 20 2b 20 .*ptr++ = ' ' +
9630: 28 28 70 53 74 61 72 74 5b 35 5d 3e 3e 32 29 20 ((pStart[5]>>2)
9640: 7c 20 28 28 70 53 74 61 72 74 5b 36 5d 20 26 20 | ((pStart[6] &
9650: 30 78 31 29 20 3c 3c 36 29 29 3b 0d 0a 09 09 2a 0x1) <<6));....*
9660: 70 74 72 2b 2b 20 3d 20 27 20 27 20 2b 20 28 20 ptr++ = ' ' + (
9670: 70 53 74 61 72 74 5b 36 5d 3e 3e 31 29 3b 0d 0a pStart[6]>>1);..
9680: 09 09 70 53 74 61 72 74 20 2b 3d 20 37 3b 0d 0a ..pStart += 7;..
9690: 09 7d 0d 0a 09 72 65 73 2e 47 65 74 42 75 66 66 .}...res.GetBuff
96a0: 65 72 53 65 74 4c 65 6e 67 74 68 28 6e 65 77 4c erSetLength(newL
96b0: 65 6e 29 3b 0d 0a 7d 0d 0a 0d 0a 42 59 54 45 2a en);..}....BYTE*
96c0: 20 73 74 72 54 6f 42 79 74 65 43 6f 64 65 28 4c strToByteCode(L
96d0: 50 43 53 54 52 20 70 53 74 72 29 0d 0a 7b 0d 0a PCSTR pStr)..{..
96e0: 09 69 6e 74 20 6c 65 6e 4f 66 42 79 74 65 43 6f .int lenOfByteCo
96f0: 64 65 20 3d 20 61 74 6f 6c 28 70 53 74 72 29 2c de = atol(pStr),
9700: 20 69 20 3d 20 6c 65 6e 4f 66 42 79 74 65 43 6f i = lenOfByteCo
9710: 64 65 3b 0d 0a 09 42 59 54 45 2a 20 70 42 20 3d de;...BYTE* pB =
9720: 20 28 42 59 54 45 2a 29 70 53 74 72 20 2b 20 37 (BYTE*)pStr + 7
9730: 3b 0d 0a 09 42 59 54 45 20 2a 70 42 75 66 20 3d ;...BYTE *pBuf =
9740: 20 6e 65 77 20 42 59 54 45 5b 28 6c 65 6e 4f 66 new BYTE[(lenOf
9750: 42 79 74 65 43 6f 64 65 20 2b 20 36 29 20 2f 20 ByteCode + 6) /
9760: 37 20 2a 20 37 5d 2c 20 2a 70 74 72 20 3d 20 70 7 * 7], *ptr = p
9770: 42 75 66 3b 0d 0a 09 77 68 69 6c 65 28 69 20 3e Buf;...while(i >
9780: 20 30 29 0d 0a 09 7b 0d 0a 09 09 2a 70 74 72 2b 0)...{....*ptr+
9790: 2b 20 3d 20 20 28 70 42 5b 30 5d 20 2d 20 33 32 + = (pB[0] - 32
97a0: 29 20 20 20 20 20 20 20 7c 20 28 28 70 42 5b 31 ) | ((pB[1
97b0: 5d 20 2d 20 33 32 29 20 3c 3c 20 37 29 3b 0d 0a ] - 32) << 7);..
97c0: 09 09 2a 70 74 72 2b 2b 20 3d 20 28 28 70 42 5b ..*ptr++ = ((pB[
97d0: 31 5d 20 2d 20 33 32 29 20 3e 3e 20 31 29 20 7c 1] - 32) >> 1) |
97e0: 20 28 28 70 42 5b 32 5d 20 2d 20 33 32 29 20 3c ((pB[2] - 32) <
97f0: 3c 20 36 29 3b 0d 0a 09 09 2a 70 74 72 2b 2b 20 < 6);....*ptr++
9800: 3d 20 28 28 70 42 5b 32 5d 20 2d 20 33 32 29 20 = ((pB[2] - 32)
9810: 3e 3e 20 32 29 20 7c 20 28 28 70 42 5b 33 5d 20 >> 2) | ((pB[3]
9820: 2d 20 33 32 29 20 3c 3c 20 35 29 3b 0d 0a 09 09 - 32) << 5);....
9830: 2a 70 74 72 2b 2b 20 3d 20 28 28 70 42 5b 33 5d *ptr++ = ((pB[3]
9840: 20 2d 20 33 32 29 20 3e 3e 20 33 29 20 7c 20 28 - 32) >> 3) | (
9850: 28 70 42 5b 34 5d 20 2d 20 33 32 29 20 3c 3c 20 (pB[4] - 32) <<
9860: 34 29 3b 0d 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 4);....*ptr++ =
9870: 28 28 70 42 5b 34 5d 20 2d 20 33 32 29 20 3e 3e ((pB[4] - 32) >>
9880: 20 34 29 20 7c 20 28 28 70 42 5b 35 5d 20 2d 20 4) | ((pB[5] -
9890: 33 32 29 20 3c 3c 20 33 29 3b 0d 0a 09 09 2a 70 32) << 3);....*p
98a0: 74 72 2b 2b 20 3d 20 28 28 70 42 5b 35 5d 20 2d tr++ = ((pB[5] -
98b0: 20 33 32 29 20 3e 3e 20 35 29 20 7c 20 28 28 70 32) >> 5) | ((p
98c0: 42 5b 36 5d 20 2d 20 33 32 29 20 3c 3c 20 32 29 B[6] - 32) << 2)
98d0: 3b 0d 0a 09 09 2a 70 74 72 2b 2b 20 3d 20 28 28 ;....*ptr++ = ((
98e0: 70 42 5b 36 5d 20 2d 20 33 32 29 20 3e 3e 20 36 pB[6] - 32) >> 6
98f0: 29 20 7c 20 28 28 70 42 5b 37 5d 20 2d 20 33 32 ) | ((pB[7] - 32
9900: 29 20 3c 3c 20 31 29 3b 0d 0a 09 09 70 42 20 2b ) << 1);....pB +
9910: 3d 20 38 3b 0d 0a 09 09 69 2d 3d 37 3b 0d 0a 09 = 8;....i-=7;...
9920: 7d 0d 0a 09 72 65 74 75 72 6e 20 70 42 75 66 3b }...return pBuf;
9930: 0d 0a 7d 0d 0a 0d 0a 74 65 6d 70 6c 61 74 65 3c ..}....template<
9940: 4f 70 43 6f 64 65 73 20 6f 70 31 2c 20 4f 70 43 OpCodes op1, OpC
9950: 6f 64 65 73 20 6f 70 32 2c 20 4f 70 43 6f 64 65 odes op2, OpCode
9960: 73 20 6f 70 33 3e 0d 0a 73 74 72 75 63 74 20 74 s op3>..struct t
9970: 79 70 65 64 5f 6f 70 20 0d 0a 7b 0d 0a 09 73 74 yped_op ..{...st
9980: 61 74 69 63 20 76 6f 69 64 20 73 65 74 28 69 6e atic void set(in
9990: 74 20 74 2c 20 75 6e 73 69 67 6e 65 64 20 63 68 t t, unsigned ch
99a0: 61 72 2a 26 20 70 42 79 74 65 43 6f 64 65 29 0d ar*& pByteCode).
99b0: 0a 09 7b 0d 0a 09 09 73 77 69 74 63 68 28 74 29 ..{....switch(t)
99c0: 0d 0a 09 09 7b 0d 0a 09 09 63 61 73 65 20 66 69 ....{....case fi
99d0: 65 6c 64 5f 69 6e 66 6f 3a 3a 66 74 54 65 78 74 eld_info::ftText
99e0: 3a 0d 0a 09 09 09 2a 70 42 79 74 65 43 6f 64 65 :.....*pByteCode
99f0: 2b 2b 20 3d 20 6f 70 31 3b 0d 0a 09 09 09 62 72 ++ = op1;.....br
9a00: 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 66 69 65 eak;....case fie
9a10: 6c 64 5f 69 6e 66 6f 3a 3a 66 74 4e 75 6d 65 72 ld_info::ftNumer
9a20: 69 63 3a 0d 0a 09 09 09 2a 70 42 79 74 65 43 6f ic:.....*pByteCo
9a30: 64 65 2b 2b 20 3d 20 6f 70 32 3b 0d 0a 09 09 09 de++ = op2;.....
9a40: 62 72 65 61 6b 3b 0d 0a 09 09 63 61 73 65 20 66 break;....case f
9a50: 69 65 6c 64 5f 69 6e 66 6f 3a 3a 66 74 4e 75 6d ield_info::ftNum
9a60: 65 72 69 63 20 2b 20 31 3a 0d 0a 09 09 09 2a 70 eric + 1:.....*p
9a70: 42 79 74 65 43 6f 64 65 2b 2b 20 3d 20 6f 70 33 ByteCode++ = op3
9a80: 3b 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 ;.....break;....
9a90: 7d 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 69 6e 6c }...}..};....inl
9aa0: 69 6e 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 ine static void
9ab0: 77 72 69 74 65 46 69 65 6c 64 4f 70 28 75 6e 73 writeFieldOp(uns
9ac0: 69 67 6e 65 64 20 63 68 61 72 2a 26 20 70 42 79 igned char*& pBy
9ad0: 74 65 43 6f 64 65 2c 20 69 6e 74 26 20 61 72 67 teCode, int& arg
9ae0: 4e 75 6d 2c 20 75 73 61 67 65 5f 70 74 72 20 70 Num, usage_ptr p
9af0: 55 73 67 2c 20 69 6e 74 20 74 2c 20 54 65 73 74 Usg, int t, Test
9b00: 4f 70 20 6f 70 2c 20 42 4f 4f 4c 26 20 62 48 61 Op op, BOOL& bHa
9b10: 73 45 71 2c 20 42 4f 4f 4c 26 20 62 48 61 73 4d sEq, BOOL& bHasM
9b20: 69 6e 2c 20 42 4f 4f 4c 26 20 62 48 61 73 4d 61 in, BOOL& bHasMa
9b30: 78 29 0d 0a 7b 0d 0a 09 70 55 73 67 2d 3e 61 72 x)..{...pUsg->ar
9b40: 67 76 49 6e 64 65 78 20 3d 20 61 72 67 4e 75 6d gvIndex = argNum
9b50: 2b 2b 3b 0d 0a 09 70 55 73 67 2d 3e 6f 6d 69 74 ++;...pUsg->omit
9b60: 20 3d 20 54 52 55 45 3b 0d 0a 09 74 79 70 65 64 = TRUE;...typed
9b70: 5f 6f 70 3c 67 65 74 41 72 67 54 65 78 74 2c 20 _op<getArgText,
9b80: 67 65 74 41 72 67 4e 75 6d 65 72 69 63 2c 20 67 getArgNumeric, g
9b90: 65 74 41 72 67 4c 6f 6e 67 3e 3a 3a 73 65 74 28 etArgLong>::set(
9ba0: 74 2c 20 70 42 79 74 65 43 6f 64 65 29 3b 0d 0a t, pByteCode);..
9bb0: 0d 0a 09 73 77 69 74 63 68 28 6f 70 29 0d 0a 09 ...switch(op)...
9bc0: 7b 0d 0a 09 63 61 73 65 20 74 6f 45 71 75 61 6c {...case toEqual
9bd0: 3a 0d 0a 09 09 69 66 28 62 48 61 73 45 71 29 0d :....if(bHasEq).
9be0: 0a 09 09 09 74 79 70 65 64 5f 6f 70 3c 63 6d 70 ....typed_op<cmp
9bf0: 53 74 72 69 6e 67 45 71 75 61 6c 5f 45 71 75 61 StringEqual_Equa
9c00: 6c 2c 20 63 6d 70 4e 75 6d 65 72 69 63 45 71 75 l, cmpNumericEqu
9c10: 61 6c 5f 45 71 75 61 6c 2c 20 63 6d 70 4c 6f 6e al_Equal, cmpLon
9c20: 67 45 71 75 61 6c 5f 45 71 75 61 6c 3e 3a 3a 73 gEqual_Equal>::s
9c30: 65 74 28 74 2c 20 70 42 79 74 65 43 6f 64 65 29 et(t, pByteCode)
9c40: 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a ;....else....{..
9c50: 09 09 09 74 79 70 65 64 5f 6f 70 3c 73 65 74 45 ...typed_op<setE
9c60: 71 75 61 6c 53 74 72 69 6e 67 2c 20 73 65 74 45 qualString, setE
9c70: 71 75 61 6c 4e 75 6d 65 72 69 63 2c 20 73 65 74 qualNumeric, set
9c80: 45 71 75 61 6c 4c 6f 6e 67 3e 3a 3a 73 65 74 28 EqualLong>::set(
9c90: 74 2c 20 70 42 79 74 65 43 6f 64 65 29 3b 0d 0a t, pByteCode);..
9ca0: 09 09 09 62 48 61 73 45 71 20 3d 20 54 52 55 45 ...bHasEq = TRUE
9cb0: 3b 0d 0a 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b ;....}....break;
9cc0: 0d 0a 09 63 61 73 65 20 74 6f 4c 65 73 73 3a 0d ...case toLess:.
9cd0: 0a 09 09 69 66 28 62 48 61 73 45 71 29 0d 0a 09 ...if(bHasEq)...
9ce0: 09 09 74 79 70 65 64 5f 6f 70 3c 63 6d 70 53 74 ..typed_op<cmpSt
9cf0: 72 69 6e 67 5f 4d 61 78 5f 45 71 75 61 6c 2c 20 ring_Max_Equal,
9d00: 63 6d 70 4e 75 6d 65 72 69 63 5f 4d 61 78 5f 45 cmpNumeric_Max_E
9d10: 71 75 61 6c 2c 20 63 6d 70 4c 6f 6e 67 5f 4d 61 qual, cmpLong_Ma
9d20: 78 5f 45 71 75 61 6c 3e 3a 3a 73 65 74 28 74 2c x_Equal>::set(t,
9d30: 20 70 42 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 pByteCode);....
9d40: 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 else....{.....if
9d50: 28 62 48 61 73 4d 69 6e 29 0d 0a 09 09 09 09 74 (bHasMin)......t
9d60: 79 70 65 64 5f 6f 70 3c 63 6d 70 53 74 72 69 6e yped_op<cmpStrin
9d70: 67 5f 4d 61 78 5f 4d 69 6e 69 6d 75 6d 2c 20 63 g_Max_Minimum, c
9d80: 6d 70 4e 75 6d 65 72 69 63 5f 4d 61 78 5f 4d 69 mpNumeric_Max_Mi
9d90: 6e 69 6d 75 6d 2c 20 63 6d 70 4c 6f 6e 67 5f 4d nimum, cmpLong_M
9da0: 61 78 5f 4d 69 6e 69 6d 75 6d 3e 3a 3a 73 65 74 ax_Minimum>::set
9db0: 28 74 2c 20 70 42 79 74 65 43 6f 64 65 29 3b 0d (t, pByteCode);.
9dc0: 0a 09 09 09 69 66 28 62 48 61 73 4d 61 78 29 0d ....if(bHasMax).
9dd0: 0a 09 09 09 09 74 79 70 65 64 5f 6f 70 3c 73 65 .....typed_op<se
9de0: 6c 4d 61 78 53 74 72 69 6e 67 2c 20 73 65 6c 4d lMaxString, selM
9df0: 61 78 4e 75 6d 65 72 69 63 2c 20 73 65 6c 4d 61 axNumeric, selMa
9e00: 78 4c 6f 6e 67 3e 3a 3a 73 65 74 28 74 2c 20 70 xLong>::set(t, p
9e10: 42 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 09 65 ByteCode);.....e
9e20: 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 74 lse.....{......t
9e30: 79 70 65 64 5f 6f 70 3c 73 65 74 4d 61 78 53 74 yped_op<setMaxSt
9e40: 72 69 6e 67 2c 20 73 65 74 4d 61 78 4e 75 6d 65 ring, setMaxNume
9e50: 72 69 63 2c 20 73 65 74 4d 61 78 4c 6f 6e 67 3e ric, setMaxLong>
9e60: 3a 3a 73 65 74 28 74 2c 20 70 42 79 74 65 43 6f ::set(t, pByteCo
9e70: 64 65 29 3b 0d 0a 09 09 09 09 62 48 61 73 4d 61 de);......bHasMa
9e80: 78 20 3d 20 54 52 55 45 3b 0d 0a 09 09 09 7d 0d x = TRUE;.....}.
9e90: 0a 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a ...}....break;..
9ea0: 09 63 61 73 65 20 74 6f 4c 65 73 73 45 71 3a 0d .case toLessEq:.
9eb0: 0a 09 09 69 66 28 62 48 61 73 45 71 29 0d 0a 09 ...if(bHasEq)...
9ec0: 09 09 74 79 70 65 64 5f 6f 70 3c 63 6d 70 53 74 ..typed_op<cmpSt
9ed0: 72 69 6e 67 5f 4d 61 78 45 71 5f 45 71 75 61 6c ring_MaxEq_Equal
9ee0: 2c 20 63 6d 70 4e 75 6d 65 72 69 63 5f 4d 61 78 , cmpNumeric_Max
9ef0: 45 71 5f 45 71 75 61 6c 2c 20 63 6d 70 4c 6f 6e Eq_Equal, cmpLon
9f00: 67 5f 4d 61 78 45 71 5f 45 71 75 61 6c 3e 3a 3a g_MaxEq_Equal>::
9f10: 73 65 74 28 74 2c 20 70 42 79 74 65 43 6f 64 65 set(t, pByteCode
9f20: 29 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d );....else....{.
9f30: 0a 09 09 09 69 66 28 62 48 61 73 4d 69 6e 29 0d ....if(bHasMin).
9f40: 0a 09 09 09 09 74 79 70 65 64 5f 6f 70 3c 63 6d .....typed_op<cm
9f50: 70 53 74 72 69 6e 67 5f 4d 61 78 45 71 5f 4d 69 pString_MaxEq_Mi
9f60: 6e 69 6d 75 6d 2c 20 63 6d 70 4e 75 6d 65 72 69 nimum, cmpNumeri
9f70: 63 5f 4d 61 78 45 71 5f 4d 69 6e 69 6d 75 6d 2c c_MaxEq_Minimum,
9f80: 20 63 6d 70 4c 6f 6e 67 5f 4d 61 78 45 71 5f 4d cmpLong_MaxEq_M
9f90: 69 6e 69 6d 75 6d 3e 3a 3a 73 65 74 28 74 2c 20 inimum>::set(t,
9fa0: 70 42 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 09 pByteCode);.....
9fb0: 69 66 28 62 48 61 73 4d 61 78 29 0d 0a 09 09 09 if(bHasMax).....
9fc0: 09 74 79 70 65 64 5f 6f 70 3c 73 65 6c 4d 61 78 .typed_op<selMax
9fd0: 45 71 53 74 72 69 6e 67 2c 20 73 65 6c 4d 61 78 EqString, selMax
9fe0: 45 71 4e 75 6d 65 72 69 63 2c 20 73 65 6c 4d 61 EqNumeric, selMa
9ff0: 78 45 71 4c 6f 6e 67 3e 3a 3a 73 65 74 28 74 2c xEqLong>::set(t,
a000: 20 70 42 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 pByteCode);....
a010: 09 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 .else.....{.....
a020: 09 74 79 70 65 64 5f 6f 70 3c 73 65 74 4d 61 78 .typed_op<setMax
a030: 45 71 53 74 72 69 6e 67 2c 20 73 65 74 4d 61 78 EqString, setMax
a040: 45 71 4e 75 6d 65 72 69 63 2c 20 73 65 74 4d 61 EqNumeric, setMa
a050: 78 45 71 4c 6f 6e 67 3e 3a 3a 73 65 74 28 74 2c xEqLong>::set(t,
a060: 20 70 42 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 pByteCode);....
a070: 09 09 62 48 61 73 4d 61 78 20 3d 20 54 52 55 45 ..bHasMax = TRUE
a080: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 ;.....}....}....
a090: 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 74 6f break;...case to
a0a0: 47 72 61 74 3a 0d 0a 09 09 69 66 28 62 48 61 73 Grat:....if(bHas
a0b0: 45 71 29 0d 0a 09 09 09 74 79 70 65 64 5f 6f 70 Eq).....typed_op
a0c0: 3c 63 6d 70 53 74 72 69 6e 67 5f 4d 69 6e 5f 45 <cmpString_Min_E
a0d0: 71 75 61 6c 2c 20 63 6d 70 4e 75 6d 65 72 69 63 qual, cmpNumeric
a0e0: 5f 4d 69 6e 5f 45 71 75 61 6c 2c 20 63 6d 70 4c _Min_Equal, cmpL
a0f0: 6f 6e 67 5f 4d 69 6e 5f 45 71 75 61 6c 3e 3a 3a ong_Min_Equal>::
a100: 73 65 74 28 74 2c 20 70 42 79 74 65 43 6f 64 65 set(t, pByteCode
a110: 29 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d );....else....{.
a120: 0a 09 09 09 69 66 28 62 48 61 73 4d 69 6e 29 0d ....if(bHasMin).
a130: 0a 09 09 09 09 74 79 70 65 64 5f 6f 70 3c 73 65 .....typed_op<se
a140: 6c 4d 69 6e 53 74 72 69 6e 67 2c 20 73 65 6c 4d lMinString, selM
a150: 69 6e 4e 75 6d 65 72 69 63 2c 20 73 65 6c 4d 69 inNumeric, selMi
a160: 6e 4c 6f 6e 67 3e 3a 3a 73 65 74 28 74 2c 20 70 nLong>::set(t, p
a170: 42 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 09 65 ByteCode);.....e
a180: 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 74 lse.....{......t
a190: 79 70 65 64 5f 6f 70 3c 73 65 74 4d 69 6e 53 74 yped_op<setMinSt
a1a0: 72 69 6e 67 2c 20 73 65 74 4d 69 6e 4e 75 6d 65 ring, setMinNume
a1b0: 72 69 63 2c 20 73 65 74 4d 69 6e 4c 6f 6e 67 3e ric, setMinLong>
a1c0: 3a 3a 73 65 74 28 74 2c 20 70 42 79 74 65 43 6f ::set(t, pByteCo
a1d0: 64 65 29 3b 0d 0a 09 09 09 09 62 48 61 73 4d 69 de);......bHasMi
a1e0: 6e 20 3d 20 54 52 55 45 3b 0d 0a 09 09 09 7d 0d n = TRUE;.....}.
a1f0: 0a 09 09 7d 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a ...}....break;..
a200: 09 63 61 73 65 20 74 6f 47 72 61 74 45 71 3a 0d .case toGratEq:.
a210: 0a 09 09 69 66 28 62 48 61 73 45 71 29 0d 0a 09 ...if(bHasEq)...
a220: 09 09 74 79 70 65 64 5f 6f 70 3c 63 6d 70 53 74 ..typed_op<cmpSt
a230: 72 69 6e 67 5f 4d 69 6e 45 71 5f 45 71 75 61 6c ring_MinEq_Equal
a240: 2c 20 63 6d 70 4e 75 6d 65 72 69 63 5f 4d 69 6e , cmpNumeric_Min
a250: 45 71 5f 45 71 75 61 6c 2c 20 63 6d 70 4c 6f 6e Eq_Equal, cmpLon
a260: 67 5f 4d 69 6e 45 71 5f 45 71 75 61 6c 3e 3a 3a g_MinEq_Equal>::
a270: 73 65 74 28 74 2c 20 70 42 79 74 65 43 6f 64 65 set(t, pByteCode
a280: 29 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d );....else....{.
a290: 0a 09 09 09 69 66 28 62 48 61 73 4d 69 6e 29 0d ....if(bHasMin).
a2a0: 0a 09 09 09 09 74 79 70 65 64 5f 6f 70 3c 73 65 .....typed_op<se
a2b0: 6c 4d 69 6e 45 71 53 74 72 69 6e 67 2c 20 73 65 lMinEqString, se
a2c0: 6c 4d 69 6e 45 71 4e 75 6d 65 72 69 63 2c 20 73 lMinEqNumeric, s
a2d0: 65 6c 4d 69 6e 45 71 4c 6f 6e 67 3e 3a 3a 73 65 elMinEqLong>::se
a2e0: 74 28 74 2c 20 70 42 79 74 65 43 6f 64 65 29 3b t(t, pByteCode);
a2f0: 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 09 7b 0d .....else.....{.
a300: 0a 09 09 09 09 74 79 70 65 64 5f 6f 70 3c 73 65 .....typed_op<se
a310: 74 4d 69 6e 45 71 53 74 72 69 6e 67 2c 20 73 65 tMinEqString, se
a320: 74 4d 69 6e 45 71 4e 75 6d 65 72 69 63 2c 20 73 tMinEqNumeric, s
a330: 65 74 4d 69 6e 45 71 4c 6f 6e 67 3e 3a 3a 73 65 etMinEqLong>::se
a340: 74 28 74 2c 20 70 42 79 74 65 43 6f 64 65 29 3b t(t, pByteCode);
a350: 0d 0a 09 09 09 09 62 48 61 73 4d 69 6e 20 3d 20 ......bHasMin =
a360: 54 52 55 45 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d TRUE;.....}....}
a370: 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 7d 0d 0a ....break;...}..
a380: 7d 0d 0a 0d 0a 76 6f 69 64 20 62 75 69 6c 64 41 }....void buildA
a390: 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 28 75 dditionalTests(u
a3a0: 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 26 20 70 nsigned char*& p
a3b0: 42 79 74 65 43 6f 64 65 2c 20 73 71 6c 69 74 65 ByteCode, sqlite
a3c0: 33 5f 69 6e 64 65 78 5f 69 6e 66 6f 2a 20 70 49 3_index_info* pI
a3d0: 64 78 2c 20 69 6e 74 20 61 72 67 4e 75 6d 2c 20 dx, int argNum,
a3e0: 63 6f 6e 73 74 20 43 56 74 61 62 49 6e 66 6f 26 const CVtabInfo&
a3f0: 20 74 61 62 6c 65 29 0d 0a 7b 0d 0a 09 73 74 72 table)..{...str
a400: 75 63 74 20 6e 6f 64 65 0d 0a 09 7b 0d 0a 09 09 uct node...{....
a410: 69 6e 74 20 6e 46 69 65 6c 64 3b 0d 0a 09 09 54 int nField;....T
a420: 65 73 74 4f 70 20 6f 70 3b 0d 0a 09 09 75 73 61 estOp op;....usa
a430: 67 65 5f 70 74 72 20 70 55 73 61 67 65 3b 0d 0a ge_ptr pUsage;..
a440: 09 09 6e 6f 64 65 2a 20 6e 65 78 74 3b 0d 0a 09 ..node* next;...
a450: 09 73 74 61 74 69 63 20 76 6f 69 64 20 69 6e 73 .static void ins
a460: 65 72 74 28 6e 6f 64 65 2a 26 20 66 69 72 73 74 ert(node*& first
a470: 2c 20 6e 6f 64 65 2a 20 70 4e 6f 64 65 29 0d 0a , node* pNode)..
a480: 09 09 7b 0d 0a 09 09 09 6e 6f 64 65 2a 2a 20 70 ..{.....node** p
a490: 70 4e 6f 64 65 20 3d 20 26 66 69 72 73 74 3b 0d pNode = &first;.
a4a0: 0a 09 09 09 77 68 69 6c 65 28 2a 70 70 4e 6f 64 ....while(*ppNod
a4b0: 65 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 e).....{......if
a4c0: 28 28 2a 70 70 4e 6f 64 65 29 2d 3e 6e 46 69 65 ((*ppNode)->nFie
a4d0: 6c 64 20 3e 20 70 4e 6f 64 65 2d 3e 6e 46 69 65 ld > pNode->nFie
a4e0: 6c 64 29 0d 0a 09 09 09 09 09 62 72 65 61 6b 3b ld).......break;
a4f0: 0d 0a 09 09 09 09 65 6c 73 65 20 69 66 28 28 2a ......else if((*
a500: 70 70 4e 6f 64 65 29 2d 3e 6e 46 69 65 6c 64 20 ppNode)->nField
a510: 3d 3d 20 70 4e 6f 64 65 2d 3e 6e 46 69 65 6c 64 == pNode->nField
a520: 20 26 26 20 28 2a 70 70 4e 6f 64 65 29 2d 3e 6f && (*ppNode)->o
a530: 70 20 3e 3d 20 70 4e 6f 64 65 2d 3e 6f 70 29 0d p >= pNode->op).
a540: 0a 09 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 ......break;....
a550: 09 09 70 70 4e 6f 64 65 20 3d 20 26 28 2a 70 70 ..ppNode = &(*pp
a560: 4e 6f 64 65 29 2d 3e 6e 65 78 74 3b 0d 0a 09 09 Node)->next;....
a570: 09 7d 0d 0a 09 09 09 70 4e 6f 64 65 2d 3e 6e 65 .}.....pNode->ne
a580: 78 74 20 3d 20 2a 70 70 4e 6f 64 65 3b 0d 0a 09 xt = *ppNode;...
a590: 09 09 2a 70 70 4e 6f 64 65 20 3d 20 70 4e 6f 64 ..*ppNode = pNod
a5a0: 65 3b 0d 0a 09 09 7d 0d 0a 09 7d 3b 0d 0a 09 2f e;....}...};.../
a5b0: 2f 20 c4 eb ff 20 ed e0 f7 e0 eb e0 20 f3 ef ee / ... ...... ...
a5c0: f0 ff e4 ee f7 e8 ec 20 ee f1 f2 e0 f2 ea e8 20 ....... .......
a5d0: ef ee 20 ed ee ec e5 f0 e0 ec 20 ef ee eb e5 e9 .. ....... .....
a5e0: 20 e8 20 f1 f0 e0 e2 ed e5 ed e8 ff ec 2e 0d 0a . .............
a5f0: 09 6e 6f 64 65 2a 20 6e 6f 64 65 73 20 3d 20 4e .node* nodes = N
a600: 55 4c 4c 3b 0d 0a 09 63 6f 6e 73 74 72 61 69 6e ULL;...constrain
a610: 74 5f 70 74 72 20 70 43 74 72 20 3d 20 70 49 64 t_ptr pCtr = pId
a620: 78 2d 3e 61 43 6f 6e 73 74 72 61 69 6e 74 3b 0d x->aConstraint;.
a630: 0a 09 75 73 61 67 65 5f 70 74 72 20 70 55 73 67 ..usage_ptr pUsg
a640: 20 3d 20 70 49 64 78 2d 3e 61 43 6f 6e 73 74 72 = pIdx->aConstr
a650: 61 69 6e 74 55 73 61 67 65 3b 0d 0a 09 0d 0a 09 aintUsage;......
a660: 66 6f 72 28 44 57 4f 52 44 20 69 20 3d 20 70 49 for(DWORD i = pI
a670: 64 78 2d 3e 6e 43 6f 6e 73 74 72 61 69 6e 74 20 dx->nConstraint
a680: 3b 20 69 2d 2d 3b 20 70 43 74 72 2b 2b 2c 20 70 ; i--; pCtr++, p
a690: 55 73 67 2b 2b 29 0d 0a 09 7b 0d 0a 09 09 69 66 Usg++)...{....if
a6a0: 28 69 73 43 6f 6e 73 74 72 61 69 6e 74 28 70 43 (isConstraint(pC
a6b0: 74 72 29 20 26 26 20 21 70 55 73 67 2d 3e 61 72 tr) && !pUsg->ar
a6c0: 67 76 49 6e 64 65 78 29 0d 0a 09 09 7b 0d 0a 09 gvIndex)....{...
a6d0: 09 09 6e 6f 64 65 2a 20 70 4e 6f 64 65 20 3d 20 ..node* pNode =
a6e0: 6e 65 77 20 6e 6f 64 65 3b 0d 0a 09 09 09 70 4e new node;.....pN
a6f0: 6f 64 65 2d 3e 6e 46 69 65 6c 64 20 3d 20 70 43 ode->nField = pC
a700: 74 72 2d 3e 69 43 6f 6c 75 6d 6e 3b 0d 0a 09 09 tr->iColumn;....
a710: 09 70 4e 6f 64 65 2d 3e 70 55 73 61 67 65 20 3d .pNode->pUsage =
a720: 20 70 55 73 67 3b 0d 0a 09 09 09 70 4e 6f 64 65 pUsg;.....pNode
a730: 2d 3e 6f 70 20 3d 20 69 6e 64 65 78 5f 73 65 6c ->op = index_sel
a740: 65 63 74 6f 72 3a 3a 73 71 6c 69 74 65 32 54 65 ector::sqlite2Te
a750: 73 74 4f 70 28 70 43 74 72 2d 3e 6f 70 29 3b 0d stOp(pCtr->op);.
a760: 0a 09 09 09 6e 6f 64 65 3a 3a 69 6e 73 65 72 74 ....node::insert
a770: 28 6e 6f 64 65 73 2c 20 70 4e 6f 64 65 29 3b 0d (nodes, pNode);.
a780: 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 6e 6f 64 65 2a ...}...}...node*
a790: 20 70 4e 6f 64 65 20 3d 20 6e 6f 64 65 73 3b 0d pNode = nodes;.
a7a0: 0a 09 0d 0a 09 42 4f 4f 4c 20 62 48 61 73 4d 69 .....BOOL bHasMi
a7b0: 6e 20 3d 20 46 41 4c 53 45 2c 20 62 48 61 73 4d n = FALSE, bHasM
a7c0: 61 78 20 3d 20 46 41 4c 53 45 2c 20 62 48 61 73 ax = FALSE, bHas
a7d0: 45 71 75 61 6c 20 3d 20 46 41 4c 53 45 3b 0d 0a Equal = FALSE;..
a7e0: 09 0d 0a 09 77 68 69 6c 65 28 70 4e 6f 64 65 29 ....while(pNode)
a7f0: 0d 0a 09 7b 0d 0a 09 09 2f 2f 20 ce ef f0 e5 e4 ...{....// .....
a800: e5 eb e8 ec 20 f2 e8 ef 20 f0 e0 e1 ee f2 fb 20 .... ... ......
a810: f1 20 ef ee eb e5 ec 0d 0a 09 09 69 6e 74 20 74 . .........int t
a820: 3b 0d 0a 09 09 63 6f 6e 73 74 20 6f 6e 65 5f 66 ;....const one_f
a830: 69 65 6c 64 26 20 66 69 65 6c 64 20 3d 20 74 61 ield& field = ta
a840: 62 6c 65 2e 66 69 65 6c 64 28 70 4e 6f 64 65 2d ble.field(pNode-
a850: 3e 6e 46 69 65 6c 64 29 3b 0d 0a 09 09 0d 0a 09 >nField);.......
a860: 09 69 66 28 66 69 65 6c 64 2e 69 73 46 69 65 6c .if(field.isFiel
a870: 64 28 29 29 0d 0a 09 09 7b 0d 0a 09 09 09 74 20 d())....{.....t
a880: 3d 20 74 61 62 6c 65 2e 70 68 69 73 49 6e 66 6f = table.phisInfo
a890: 28 29 2e 66 69 65 6c 64 28 66 69 65 6c 64 2e 70 ().field(field.p
a8a0: 6f 73 28 29 29 2e 74 79 70 65 28 29 3b 0d 0a 09 os()).type();...
a8b0: 09 09 69 66 28 74 20 3d 3d 20 66 69 65 6c 64 5f ..if(t == field_
a8c0: 69 6e 66 6f 3a 3a 66 74 4e 75 6d 65 72 69 63 20 info::ftNumeric
a8d0: 26 26 20 74 61 62 6c 65 2e 70 68 69 73 49 6e 66 && table.phisInf
a8e0: 6f 28 29 2e 66 69 65 6c 64 28 66 69 65 6c 64 2e o().field(field.
a8f0: 70 6f 73 28 29 29 2e 70 72 65 63 65 73 73 69 6f pos()).precessio
a900: 6e 28 29 20 3d 3d 20 30 29 0d 0a 09 09 09 09 74 n() == 0)......t
a910: 20 3d 20 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 66 = field_info::f
a920: 74 4e 75 6d 65 72 69 63 20 2b 20 31 3b 0d 0a 09 tNumeric + 1;...
a930: 09 7d 0d 0a 09 09 65 6c 73 65 20 69 66 28 66 69 .}....else if(fi
a940: 65 6c 64 2e 69 73 49 6e 64 65 78 28 29 20 7c 7c eld.isIndex() ||
a950: 20 66 69 65 6c 64 2e 69 73 4c 6e 53 74 72 28 29 field.isLnStr()
a960: 29 0d 0a 09 09 09 74 20 3d 20 66 69 65 6c 64 5f ).....t = field_
a970: 69 6e 66 6f 3a 3a 66 74 54 65 78 74 3b 0d 0a 09 info::ftText;...
a980: 09 65 6c 73 65 20 69 66 28 66 69 65 6c 64 2e 69 .else if(field.i
a990: 73 52 65 63 4e 6f 28 29 29 0d 0a 09 09 09 74 20 sRecNo()).....t
a9a0: 3d 20 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 66 74 = field_info::ft
a9b0: 4e 75 6d 65 72 69 63 20 2b 20 31 3b 0d 0a 0d 0a Numeric + 1;....
a9c0: 09 09 77 72 69 74 65 46 69 65 6c 64 4f 70 28 70 ..writeFieldOp(p
a9d0: 42 79 74 65 43 6f 64 65 2c 20 61 72 67 4e 75 6d ByteCode, argNum
a9e0: 2c 20 70 4e 6f 64 65 2d 3e 70 55 73 61 67 65 2c , pNode->pUsage,
a9f0: 20 74 2c 20 70 4e 6f 64 65 2d 3e 6f 70 2c 20 62 t, pNode->op, b
aa00: 48 61 73 45 71 75 61 6c 2c 20 62 48 61 73 4d 69 HasEqual, bHasMi
aa10: 6e 2c 20 62 48 61 73 4d 61 78 29 3b 0d 0a 09 09 n, bHasMax);....
aa20: 0d 0a 09 09 69 66 28 21 70 4e 6f 64 65 2d 3e 6e ....if(!pNode->n
aa30: 65 78 74 20 7c 7c 20 70 4e 6f 64 65 2d 3e 6e 46 ext || pNode->nF
aa40: 69 65 6c 64 20 21 3d 20 70 4e 6f 64 65 2d 3e 6e ield != pNode->n
aa50: 65 78 74 2d 3e 6e 46 69 65 6c 64 29 0d 0a 09 09 ext->nField)....
aa60: 7b 0d 0a 09 09 09 69 66 28 62 48 61 73 45 71 75 {.....if(bHasEqu
aa70: 61 6c 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 al).....{......i
aa80: 66 28 66 69 65 6c 64 2e 69 73 52 65 63 4e 6f 28 f(field.isRecNo(
aa90: 29 29 0d 0a 09 09 09 09 09 2a 70 42 79 74 65 43 )).......*pByteC
aaa0: 6f 64 65 2b 2b 20 3d 20 61 64 64 54 65 73 74 45 ode++ = addTestE
aab0: 71 75 61 6c 52 65 63 4e 6f 3b 0d 0a 09 09 09 09 qualRecNo;......
aac0: 65 6c 73 65 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 else......{.....
aad0: 09 09 74 79 70 65 64 5f 6f 70 3c 61 64 64 54 65 ..typed_op<addTe
aae0: 73 74 45 71 75 61 6c 54 65 78 74 2c 20 61 64 64 stEqualText, add
aaf0: 54 65 73 74 45 71 75 61 6c 4e 75 6d 65 72 69 63 TestEqualNumeric
ab00: 2c 20 61 64 64 54 65 73 74 45 71 75 61 6c 4c 6f , addTestEqualLo
ab10: 6e 67 3e 3a 3a 73 65 74 28 74 2c 20 70 42 79 74 ng>::set(t, pByt
ab20: 65 43 6f 64 65 29 3b 0d 0a 09 09 09 09 09 77 72 eCode);.......wr
ab30: 69 74 65 4e 75 6d 28 70 42 79 74 65 43 6f 64 65 iteNum(pByteCode
ab40: 2c 20 70 4e 6f 64 65 2d 3e 6e 46 69 65 6c 64 29 , pNode->nField)
ab50: 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 62 48 ;......}......bH
ab60: 61 73 45 71 75 61 6c 20 3d 20 46 41 4c 53 45 3b asEqual = FALSE;
ab70: 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 65 0d .....}.....else.
ab80: 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 62 48 ....{......if(bH
ab90: 61 73 4d 69 6e 29 0d 0a 09 09 09 09 7b 0d 0a 09 asMin)......{...
aba0: 09 09 09 09 69 66 28 66 69 65 6c 64 2e 69 73 52 ....if(field.isR
abb0: 65 63 4e 6f 28 29 29 0d 0a 09 09 09 09 09 09 2a ecNo())........*
abc0: 70 42 79 74 65 43 6f 64 65 2b 2b 20 3d 20 61 64 pByteCode++ = ad
abd0: 64 54 65 73 74 4d 69 6e 69 6d 75 6d 52 65 63 4e dTestMinimumRecN
abe0: 6f 3b 0d 0a 09 09 09 09 09 65 6c 73 65 0d 0a 09 o;.......else...
abf0: 09 09 09 09 7b 0d 0a 09 09 09 09 09 09 74 79 70 ....{........typ
ac00: 65 64 5f 6f 70 3c 61 64 64 54 65 73 74 4d 69 6e ed_op<addTestMin
ac10: 69 6d 75 6d 54 65 78 74 2c 20 61 64 64 54 65 73 imumText, addTes
ac20: 74 4d 69 6e 69 6d 75 6d 4e 75 6d 65 72 69 63 2c tMinimumNumeric,
ac30: 20 61 64 64 54 65 73 74 4d 69 6e 69 6d 75 6d 4c addTestMinimumL
ac40: 6f 6e 67 3e 3a 3a 73 65 74 28 74 2c 20 70 42 79 ong>::set(t, pBy
ac50: 74 65 43 6f 64 65 29 3b 0d 0a 09 09 09 09 09 09 teCode);........
ac60: 77 72 69 74 65 4e 75 6d 28 70 42 79 74 65 43 6f writeNum(pByteCo
ac70: 64 65 2c 20 70 4e 6f 64 65 2d 3e 6e 46 69 65 6c de, pNode->nFiel
ac80: 64 29 3b 0d 0a 09 09 09 09 09 7d 0d 0a 09 09 09 d);.......}.....
ac90: 09 09 62 48 61 73 4d 69 6e 20 3d 20 46 41 4c 53 ..bHasMin = FALS
aca0: 45 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 09 69 E;......}......i
acb0: 66 28 62 48 61 73 4d 61 78 29 0d 0a 09 09 09 09 f(bHasMax)......
acc0: 7b 0d 0a 09 09 09 09 09 69 66 28 66 69 65 6c 64 {.......if(field
acd0: 2e 69 73 52 65 63 4e 6f 28 29 29 0d 0a 09 09 09 .isRecNo()).....
ace0: 09 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 ...*pByteCode++
acf0: 3d 20 61 64 64 54 65 73 74 4d 61 78 69 6d 75 6d = addTestMaximum
ad00: 52 65 63 4e 6f 3b 0d 0a 09 09 09 09 09 65 6c 73 RecNo;.......els
ad10: 65 0d 0a 09 09 09 09 09 7b 0d 0a 09 09 09 09 09 e.......{.......
ad20: 09 74 79 70 65 64 5f 6f 70 3c 61 64 64 54 65 73 .typed_op<addTes
ad30: 74 4d 61 78 69 6d 75 6d 54 65 78 74 2c 20 61 64 tMaximumText, ad
ad40: 64 54 65 73 74 4d 61 78 69 6d 75 6d 4e 75 6d 65 dTestMaximumNume
ad50: 72 69 63 2c 20 61 64 64 54 65 73 74 4d 61 78 69 ric, addTestMaxi
ad60: 6d 75 6d 4c 6f 6e 67 3e 3a 3a 73 65 74 28 74 2c mumLong>::set(t,
ad70: 20 70 42 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 pByteCode);....
ad80: 09 09 09 09 77 72 69 74 65 4e 75 6d 28 70 42 79 ....writeNum(pBy
ad90: 74 65 43 6f 64 65 2c 20 70 4e 6f 64 65 2d 3e 6e teCode, pNode->n
ada0: 46 69 65 6c 64 29 3b 0d 0a 09 09 09 09 09 7d 0d Field);.......}.
adb0: 0a 09 09 09 09 09 62 48 61 73 4d 61 78 20 3d 20 ......bHasMax =
adc0: 46 41 4c 53 45 3b 0d 0a 09 09 09 09 7d 0d 0a 09 FALSE;......}...
add0: 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 70 4e 6f 64 ..}....}....pNod
ade0: 65 20 3d 20 70 4e 6f 64 65 2d 3e 6e 65 78 74 3b e = pNode->next;
adf0: 0d 0a 09 7d 0d 0a 0d 0a 09 77 68 69 6c 65 28 6e ...}.....while(n
ae00: 6f 64 65 73 29 0d 0a 09 7b 0d 0a 09 09 6e 6f 64 odes)...{....nod
ae10: 65 2a 20 70 44 65 6c 20 3d 20 6e 6f 64 65 73 3b e* pDel = nodes;
ae20: 0d 0a 09 09 6e 6f 64 65 73 20 3d 20 6e 6f 64 65 ....nodes = node
ae30: 73 2d 3e 6e 65 78 74 3b 0d 0a 09 09 64 65 6c 65 s->next;....dele
ae40: 74 65 20 70 44 65 6c 3b 0d 0a 09 7d 0d 0a 7d 0d te pDel;...}..}.
ae50: 0a 0d 0a 73 74 61 74 69 63 20 69 6e 74 20 62 75 ...static int bu
ae60: 69 6c 64 49 6e 64 65 78 57 6f 72 6b 28 75 6e 73 ildIndexWork(uns
ae70: 69 67 6e 65 64 20 63 68 61 72 2a 26 20 70 42 79 igned char*& pBy
ae80: 74 65 43 6f 64 65 2c 20 63 6f 6e 73 74 20 43 56 teCode, const CV
ae90: 74 61 62 49 6e 66 6f 26 20 74 61 62 6c 65 2c 0d tabInfo& table,.
aea0: 0a 09 09 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 ...sqlite3_index
aeb0: 5f 69 6e 66 6f 2a 20 70 49 64 78 2c 20 63 6f 6e _info* pIdx, con
aec0: 73 74 20 69 64 78 5f 6e 6f 64 65 2a 20 70 42 65 st idx_node* pBe
aed0: 73 74 2c 20 42 4f 4f 4c 26 20 62 48 61 73 4d 69 st, BOOL& bHasMi
aee0: 6e 4b 65 79 2c 20 42 4f 4f 4c 26 20 62 48 61 73 nKey, BOOL& bHas
aef0: 4d 61 78 4b 65 79 29 0d 0a 7b 0d 0a 09 69 6e 74 MaxKey)..{...int
af00: 20 61 72 67 4e 75 6d 20 3d 20 31 3b 0d 0a 09 42 argNum = 1;...B
af10: 4f 4f 4c 20 62 48 61 73 46 75 6c 6c 45 71 75 61 OOL bHasFullEqua
af20: 6c 20 3d 20 46 41 4c 53 45 2c 20 62 48 61 73 46 l = FALSE, bHasF
af30: 75 6c 6c 4d 69 6e 20 3d 20 46 41 4c 53 45 2c 20 ullMin = FALSE,
af40: 62 48 61 73 46 75 6c 6c 4d 61 78 20 3d 20 46 41 bHasFullMax = FA
af50: 4c 53 45 3b 0d 0a 09 42 4f 4f 4c 20 62 48 61 73 LSE;...BOOL bHas
af60: 50 61 72 74 45 71 75 61 6c 20 3d 20 46 41 4c 53 PartEqual = FALS
af70: 45 2c 20 62 48 61 73 50 61 72 74 4d 69 6e 20 3d E, bHasPartMin =
af80: 20 46 41 4c 53 45 2c 20 62 48 61 73 50 61 72 74 FALSE, bHasPart
af90: 4d 61 78 20 3d 20 46 41 4c 53 45 3b 0d 0a 09 0d Max = FALSE;....
afa0: 0a 09 69 66 28 70 42 65 73 74 2d 3e 69 6e 64 65 ..if(pBest->inde
afb0: 78 4e 75 6d 20 3d 3d 20 2d 31 29 09 2f 2f 20 72 xNum == -1).// r
afc0: 65 63 4e 6f 0d 0a 09 7b 0d 0a 09 09 66 6f 72 28 ecNo...{....for(
afd0: 6f 70 5f 6e 6f 64 65 2a 20 70 4f 70 20 3d 20 70 op_node* pOp = p
afe0: 42 65 73 74 2d 3e 66 69 65 6c 64 73 2d 3e 63 6f Best->fields->co
aff0: 6d 70 61 72 65 73 3b 20 70 4f 70 20 3b 20 70 4f mpares; pOp ; pO
b000: 70 20 3d 20 70 4f 70 2d 3e 6e 65 78 74 29 0d 0a p = pOp->next)..
b010: 09 09 09 77 72 69 74 65 46 69 65 6c 64 4f 70 28 ...writeFieldOp(
b020: 70 42 79 74 65 43 6f 64 65 2c 20 61 72 67 4e 75 pByteCode, argNu
b030: 6d 2c 20 70 4f 70 2d 3e 70 55 73 61 67 65 2c 20 m, pOp->pUsage,
b040: 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 66 74 4e 75 field_info::ftNu
b050: 6d 65 72 69 63 20 2b 20 31 2c 20 70 4f 70 2d 3e meric + 1, pOp->
b060: 43 6f 6d 70 61 72 65 4f 70 2c 20 62 48 61 73 46 CompareOp, bHasF
b070: 75 6c 6c 45 71 75 61 6c 2c 20 62 48 61 73 46 75 ullEqual, bHasFu
b080: 6c 6c 4d 69 6e 2c 20 62 48 61 73 46 75 6c 6c 4d llMin, bHasFullM
b090: 61 78 29 3b 0d 0a 09 09 2a 70 42 79 74 65 43 6f ax);....*pByteCo
b0a0: 64 65 2b 2b 20 3d 20 73 74 6f 72 65 52 65 63 4e de++ = storeRecN
b0b0: 6f 3b 0d 0a 09 09 72 65 74 75 72 6e 20 61 72 67 o;....return arg
b0c0: 4e 75 6d 3b 09 0d 0a 09 7d 0d 0a 0d 0a 09 0d 0a Num;....}.......
b0d0: 09 44 57 4f 52 44 20 70 6f 73 49 6e 49 64 78 20 .DWORD posInIdx
b0e0: 3d 20 30 3b 0d 0a 09 63 6f 6e 73 74 20 69 6e 64 = 0;...const ind
b0f0: 65 78 5f 69 6e 66 6f 2a 20 70 49 6e 64 65 78 49 ex_info* pIndexI
b100: 6e 66 6f 20 3d 20 74 61 62 6c 65 2e 70 68 69 73 nfo = table.phis
b110: 49 6e 66 6f 28 29 2e 69 6e 64 65 78 28 70 42 65 Info().index(pBe
b120: 73 74 2d 3e 69 6e 64 65 78 4e 75 6d 29 3b 0d 0a st->indexNum);..
b130: 09 63 6f 6e 73 74 20 69 64 78 5f 66 69 65 6c 64 .const idx_field
b140: 5f 69 6e 66 6f 2a 20 70 46 69 65 6c 64 49 6e 66 _info* pFieldInf
b150: 6f 20 3d 20 70 49 6e 64 65 78 49 6e 66 6f 2d 3e o = pIndexInfo->
b160: 66 69 65 6c 64 73 28 29 3b 0d 0a 0d 0a 09 2f 2f fields();.....//
b170: 20 c2 fb e1 e5 f0 e5 ec 20 e8 ed e4 e5 ea f1 0d ....... .......
b180: 0a 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 3d ..*pByteCode++ =
b190: 20 73 65 6c 65 63 74 49 64 78 3b 0d 0a 09 77 72 selectIdx;...wr
b1a0: 69 74 65 4e 75 6d 28 70 42 79 74 65 43 6f 64 65 iteNum(pByteCode
b1b0: 2c 20 70 42 65 73 74 2d 3e 69 6e 64 65 78 4e 75 , pBest->indexNu
b1c0: 6d 29 3b 0d 0a 0d 0a 09 66 6f 72 28 69 64 78 5f m);.....for(idx_
b1d0: 66 69 65 6c 64 5f 6e 6f 64 65 2a 20 70 46 69 65 field_node* pFie
b1e0: 6c 64 20 3d 20 70 42 65 73 74 2d 3e 66 69 65 6c ld = pBest->fiel
b1f0: 64 73 3b 20 70 46 69 65 6c 64 3b 20 70 46 69 65 ds; pField; pFie
b200: 6c 64 20 3d 20 70 46 69 65 6c 64 2d 3e 6e 65 78 ld = pField->nex
b210: 74 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 70 46 69 t)...{....if(pFi
b220: 65 6c 64 2d 3e 70 6f 73 49 6e 49 64 78 20 3d 3d eld->posInIdx ==
b230: 20 2d 31 29 09 2f 2f 20 cf ee eb ed fb e9 20 e8 -1).// ...... .
b240: ed e4 e5 ea f1 0d 0a 09 09 7b 0d 0a 09 09 09 66 .........{.....f
b250: 6f 72 28 6f 70 5f 6e 6f 64 65 2a 20 70 4f 70 20 or(op_node* pOp
b260: 3d 20 70 46 69 65 6c 64 2d 3e 63 6f 6d 70 61 72 = pField->compar
b270: 65 73 20 3b 20 70 4f 70 20 3b 20 70 4f 70 20 3d es ; pOp ; pOp =
b280: 20 70 4f 70 2d 3e 6e 65 78 74 29 0d 0a 09 09 09 pOp->next).....
b290: 09 77 72 69 74 65 46 69 65 6c 64 4f 70 28 70 42 .writeFieldOp(pB
b2a0: 79 74 65 43 6f 64 65 2c 20 61 72 67 4e 75 6d 2c yteCode, argNum,
b2b0: 20 70 4f 70 2d 3e 70 55 73 61 67 65 2c 20 66 69 pOp->pUsage, fi
b2c0: 65 6c 64 5f 69 6e 66 6f 3a 3a 66 74 54 65 78 74 eld_info::ftText
b2d0: 2c 20 70 4f 70 2d 3e 43 6f 6d 70 61 72 65 4f 70 , pOp->CompareOp
b2e0: 2c 20 62 48 61 73 46 75 6c 6c 45 71 75 61 6c 2c , bHasFullEqual,
b2f0: 20 62 48 61 73 46 75 6c 6c 4d 69 6e 2c 20 62 48 bHasFullMin, bH
b300: 61 73 46 75 6c 6c 4d 61 78 29 3b 0d 0a 09 09 09 asFullMax);.....
b310: 0d 0a 09 09 09 69 66 28 62 48 61 73 46 75 6c 6c .....if(bHasFull
b320: 45 71 75 61 6c 29 0d 0a 09 09 09 09 2a 70 42 79 Equal)......*pBy
b330: 74 65 43 6f 64 65 2b 2b 20 3d 20 73 65 74 46 75 teCode++ = setFu
b340: 6c 6c 4b 65 79 45 71 75 61 6c 3b 0d 0a 09 09 09 llKeyEqual;.....
b350: 65 6c 73 65 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 else.....{......
b360: 69 66 28 62 48 61 73 46 75 6c 6c 4d 69 6e 29 0d if(bHasFullMin).
b370: 0a 09 09 09 09 09 2a 70 42 79 74 65 43 6f 64 65 ......*pByteCode
b380: 2b 2b 20 3d 20 73 65 74 46 75 6c 6c 4b 65 79 4d ++ = setFullKeyM
b390: 69 6e 69 6d 75 6d 3b 0d 0a 09 09 09 09 69 66 28 inimum;......if(
b3a0: 62 48 61 73 46 75 6c 6c 4d 61 78 29 0d 0a 09 09 bHasFullMax)....
b3b0: 09 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 ...*pByteCode++
b3c0: 3d 20 73 65 74 46 75 6c 6c 4b 65 79 4d 61 78 69 = setFullKeyMaxi
b3d0: 6d 75 6d 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d mum;.....}....}.
b3e0: 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 ...else....{....
b3f0: 09 69 66 28 70 46 69 65 6c 64 2d 3e 70 6f 73 49 .if(pField->posI
b400: 6e 49 64 78 20 3e 20 70 6f 73 49 6e 49 64 78 29 nIdx > posInIdx)
b410: 0d 0a 09 09 09 09 62 72 65 61 6b 3b 0d 0a 0d 0a ......break;....
b420: 09 09 09 69 6e 74 20 74 20 3d 20 70 46 69 65 6c ...int t = pFiel
b430: 64 49 6e 66 6f 2d 3e 69 6e 66 6f 28 29 2e 74 79 dInfo->info().ty
b440: 70 65 28 29 3b 0d 0a 09 09 09 69 66 28 74 20 3d pe();.....if(t =
b450: 3d 20 66 69 65 6c 64 5f 69 6e 66 6f 3a 3a 66 74 = field_info::ft
b460: 4e 75 6d 65 72 69 63 20 26 26 20 70 46 69 65 6c Numeric && pFiel
b470: 64 49 6e 66 6f 2d 3e 69 6e 66 6f 28 29 2e 70 72 dInfo->info().pr
b480: 65 63 65 73 73 69 6f 6e 28 29 20 3d 3d 20 30 29 ecession() == 0)
b490: 0d 0a 09 09 09 09 74 20 3d 20 66 69 65 6c 64 5f ......t = field_
b4a0: 69 6e 66 6f 3a 3a 66 74 4e 75 6d 65 72 69 63 20 info::ftNumeric
b4b0: 2b 20 31 3b 0d 0a 0d 0a 09 09 09 62 48 61 73 50 + 1;.......bHasP
b4c0: 61 72 74 45 71 75 61 6c 20 3d 20 62 48 61 73 50 artEqual = bHasP
b4d0: 61 72 74 4d 69 6e 20 3d 20 62 48 61 73 50 61 72 artMin = bHasPar
b4e0: 74 4d 61 78 20 3d 20 46 41 4c 53 45 3b 0d 0a 09 tMax = FALSE;...
b4f0: 09 09 66 6f 72 28 6f 70 5f 6e 6f 64 65 2a 20 70 ..for(op_node* p
b500: 4f 70 20 3d 20 70 46 69 65 6c 64 2d 3e 63 6f 6d Op = pField->com
b510: 70 61 72 65 73 3b 20 70 4f 70 3b 20 70 4f 70 20 pares; pOp; pOp
b520: 3d 20 70 4f 70 2d 3e 6e 65 78 74 29 0d 0a 09 09 = pOp->next)....
b530: 09 09 77 72 69 74 65 46 69 65 6c 64 4f 70 28 70 ..writeFieldOp(p
b540: 42 79 74 65 43 6f 64 65 2c 20 61 72 67 4e 75 6d ByteCode, argNum
b550: 2c 20 70 4f 70 2d 3e 70 55 73 61 67 65 2c 20 74 , pOp->pUsage, t
b560: 2c 20 70 4f 70 2d 3e 43 6f 6d 70 61 72 65 4f 70 , pOp->CompareOp
b570: 2c 20 62 48 61 73 50 61 72 74 45 71 75 61 6c 2c , bHasPartEqual,
b580: 20 62 48 61 73 50 61 72 74 4d 69 6e 2c 20 62 48 bHasPartMin, bH
b590: 61 73 50 61 72 74 4d 61 78 29 3b 0d 0a 09 09 09 asPartMax);.....
b5a0: 0d 0a 09 09 09 2f 2f 20 cf f0 ee f8 eb e8 20 e2 .....// ...... .
b5b0: f1 e5 20 f3 f1 eb ee e2 ff 20 e4 eb ff 20 fd f2 .. ...... ... ..
b5c0: ee e3 ee 20 ef ee eb ff 2e 0d 0a 09 09 09 69 66 ... ..........if
b5d0: 28 62 48 61 73 50 61 72 74 45 71 75 61 6c 29 0d (bHasPartEqual).
b5e0: 0a 09 09 09 7b 0d 0a 09 09 09 09 74 79 70 65 64 ....{......typed
b5f0: 5f 6f 70 3c 73 65 74 50 61 72 74 4b 65 79 45 71 _op<setPartKeyEq
b600: 75 61 6c 54 65 78 74 2c 20 73 65 74 50 61 72 74 ualText, setPart
b610: 4b 65 79 45 71 75 61 6c 4e 75 6d 65 72 69 63 2c KeyEqualNumeric,
b620: 20 73 65 74 50 61 72 74 4b 65 79 45 71 75 61 6c setPartKeyEqual
b630: 4c 6f 6e 67 3e 3a 3a 73 65 74 28 74 2c 20 70 42 Long>::set(t, pB
b640: 79 74 65 43 6f 64 65 29 3b 0d 0a 09 09 09 09 2f yteCode);....../
b650: 2f 20 c4 eb ff 20 ef ee eb ff 20 e5 f1 f2 fc 20 / ... .... ....
b660: f3 f1 eb ee e2 e8 e5 20 3d 2c 20 ec ee e6 ed ee ....... =, .....
b670: 20 e4 e2 e8 e3 e0 f2 fc f1 ff 20 e4 e0 eb fc f8 ......... .....
b680: e5 20 ef ee 20 e8 ed e4 e5 ea f1 f3 2e 0d 0a 09 . .. ...........
b690: 09 09 09 2b 2b 70 46 69 65 6c 64 49 6e 66 6f 3b ...++pFieldInfo;
b6a0: 0d 0a 09 09 09 09 70 6f 73 49 6e 49 64 78 2b 2b ......posInIdx++
b6b0: 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 65 ;.....}.....else
b6c0: 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 69 66 28 62 .....{......if(b
b6d0: 48 61 73 50 61 72 74 4d 69 6e 29 0d 0a 09 09 09 HasPartMin).....
b6e0: 09 09 74 79 70 65 64 5f 6f 70 3c 73 65 74 50 61 ..typed_op<setPa
b6f0: 72 74 4b 65 79 4d 69 6e 69 6d 75 6d 54 65 78 74 rtKeyMinimumText
b700: 2c 20 73 65 74 50 61 72 74 4b 65 79 4d 69 6e 69 , setPartKeyMini
b710: 6d 75 6d 4e 75 6d 65 72 69 63 2c 20 73 65 74 50 mumNumeric, setP
b720: 61 72 74 4b 65 79 4d 69 6e 69 6d 75 6d 4c 6f 6e artKeyMinimumLon
b730: 67 3e 3a 3a 73 65 74 28 74 2c 20 70 42 79 74 65 g>::set(t, pByte
b740: 43 6f 64 65 29 3b 0d 0a 09 09 09 09 69 66 28 62 Code);......if(b
b750: 48 61 73 50 61 72 74 4d 61 78 29 0d 0a 09 09 09 HasPartMax).....
b760: 09 09 74 79 70 65 64 5f 6f 70 3c 73 65 74 50 61 ..typed_op<setPa
b770: 72 74 4b 65 79 4d 61 78 69 6d 75 6d 54 65 78 74 rtKeyMaximumText
b780: 2c 20 73 65 74 50 61 72 74 4b 65 79 4d 61 78 69 , setPartKeyMaxi
b790: 6d 75 6d 4e 75 6d 65 72 69 63 2c 20 73 65 74 50 mumNumeric, setP
b7a0: 61 72 74 4b 65 79 4d 61 78 69 6d 75 6d 4c 6f 6e artKeyMaximumLon
b7b0: 67 3e 3a 3a 73 65 74 28 74 2c 20 70 42 79 74 65 g>::set(t, pByte
b7c0: 43 6f 64 65 29 3b 0d 0a 09 09 09 09 62 72 65 61 Code);......brea
b7d0: 6b 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 k;.....}....}...
b7e0: 7d 0d 0a 09 2f 2f 20 ce ef f0 e5 e4 e5 eb e8 ec }...// .........
b7f0: 2c 20 e5 f1 f2 fc 20 eb e8 20 ec e8 ed 2f ec e0 , .... .. .../..
b800: ea f1 20 e3 f0 e0 ed e8 f6 fb 2c 20 e8 20 e2 fb .. ......., . ..
b810: e1 e5 f0 e5 ec 20 e8 f5 2e 0d 0a 09 42 4f 4f 4c ..... ......BOOL
b820: 20 62 50 6f 73 73 69 62 6c 79 43 68 61 6e 67 65 bPossiblyChange
b830: 54 79 70 65 4f 66 42 6f 75 6e 64 20 3d 20 46 41 TypeOfBound = FA
b840: 4c 53 45 3b 0d 0a 09 44 57 4f 52 44 20 69 73 50 LSE;...DWORD isP
b850: 61 72 74 45 71 75 61 6c 20 3d 20 62 48 61 73 50 artEqual = bHasP
b860: 61 72 74 45 71 75 61 6c 20 7c 7c 20 28 21 62 48 artEqual || (!bH
b870: 61 73 50 61 72 74 4d 69 6e 20 26 26 20 70 6f 73 asPartMin && pos
b880: 49 6e 49 64 78 20 3e 20 30 29 3b 0d 0a 09 2f 2f InIdx > 0);...//
b890: 20 c2 fb e1 ee f0 20 ec e8 ed e8 ec e0 eb fc ed ..... .........
b8a0: ee e3 ee 20 ea eb fe f7 e0 0d 0a 09 2f 2f 20 20 ... ........//
b8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b8c0: 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20 20 1
b8d0: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20 20 2
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 34 20 20 20 4
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
b900: 20 38 0d 0a 09 44 57 4f 52 44 20 74 79 70 65 4f 8...DWORD typeO
b910: 66 42 6f 75 6e 64 20 3d 20 62 48 61 73 46 75 6c fBound = bHasFul
b920: 6c 45 71 75 61 6c 20 7c 20 28 62 48 61 73 46 75 lEqual | (bHasFu
b930: 6c 6c 4d 69 6e 20 3c 3c 20 31 29 20 7c 20 28 69 llMin << 1) | (i
b940: 73 50 61 72 74 45 71 75 61 6c 3c 3c 20 32 29 20 sPartEqual<< 2)
b950: 7c 20 28 62 48 61 73 50 61 72 74 4d 69 6e 20 3c | (bHasPartMin <
b960: 3c 20 33 29 3b 0d 0a 09 62 48 61 73 4d 69 6e 4b < 3);...bHasMinK
b970: 65 79 20 3d 20 54 52 55 45 3b 0d 0a 09 73 77 69 ey = TRUE;...swi
b980: 74 63 68 28 74 79 70 65 4f 66 42 6f 75 6e 64 29 tch(typeOfBound)
b990: 0d 0a 09 7b 0d 0a 09 63 61 73 65 20 30 20 7c 20 ...{...case 0 |
b9a0: 30 3a 09 2f 2f 20 cd e8 e6 ed e5 e9 20 e3 f0 e0 0:.// ...... ...
b9b0: ed e8 f6 fb 20 ed e5 f2 0d 0a 09 09 62 48 61 73 .... .......bHas
b9c0: 4d 69 6e 4b 65 79 20 3d 20 46 41 4c 53 45 3b 0d MinKey = FALSE;.
b9d0: 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 ...break;...case
b9e0: 20 30 20 7c 20 34 3a 09 2f 2f 20 cd e8 e6 ed ff 0 | 4:.// .....
b9f0: ff 20 e3 f0 e0 ed e8 f6 e0 20 e7 e0 e4 e0 ed e0 . ....... ......
ba00: 20 ef ee eb e5 e8 ed e4 e5 ea f1 e0 3d 0d 0a 09 ...........=...
ba10: 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 3d 20 .*pByteCode++ =
ba20: 73 65 74 4d 69 6e 4b 65 79 5f 50 4b 45 71 75 61 setMinKey_PKEqua
ba30: 6c 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 l;....break;...c
ba40: 61 73 65 20 30 20 7c 20 38 3a 09 2f 2f 20 cd e8 ase 0 | 8:.// ..
ba50: e6 ed ff ff 20 e3 f0 e0 ed e8 f6 e0 20 e7 e0 e4 .... ....... ...
ba60: e0 ed e0 20 ef ee eb e5 e8 ed e4 e5 ea f1 e0 3e ... ...........>
ba70: 0d 0a 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b ....*pByteCode++
ba80: 20 3d 20 73 65 74 4d 69 6e 4b 65 79 5f 50 4b 4d = setMinKey_PKM
ba90: 69 6e 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 in;....break;...
baa0: 63 61 73 65 20 31 20 7c 20 30 3a 09 2f 2f 20 cd case 1 | 0:.// .
bab0: e8 e6 ed ff ff 20 e3 f0 e0 ed e8 f6 e0 20 e7 e0 ..... ....... ..
bac0: e4 e0 ed e0 20 e8 ed e4 e5 ea f1 3d 0d 0a 09 09 .... ......=....
bad0: 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 3d 20 73 *pByteCode++ = s
bae0: 65 74 4d 69 6e 4b 65 79 5f 46 4b 45 71 75 61 6c etMinKey_FKEqual
baf0: 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 ;....break;...ca
bb00: 73 65 20 31 20 7c 20 34 3a 09 2f 2f 20 cd e8 e6 se 1 | 4:.// ...
bb10: ed ff ff 20 e3 f0 e0 ed e8 f6 e0 20 e7 e0 e4 e0 ... ....... ....
bb20: ed e0 20 e8 ed e4 e5 ea f1 3d 20 61 6e 64 20 ef .. ......= and .
bb30: ee eb e5 e8 ed e4 e5 ea f1 e0 3d 0d 0a 09 09 2a ..........=....*
bb40: 70 42 79 74 65 43 6f 64 65 2b 2b 20 3d 20 73 65 pByteCode++ = se
bb50: 6c 4d 69 6e 4b 65 79 5f 46 4b 45 71 75 61 6c 5f lMinKey_FKEqual_
bb60: 50 4b 45 71 75 61 6c 3b 0d 0a 09 09 62 50 6f 73 PKEqual;....bPos
bb70: 73 69 62 6c 79 43 68 61 6e 67 65 54 79 70 65 4f siblyChangeTypeO
bb80: 66 42 6f 75 6e 64 20 3d 20 54 52 55 45 3b 0d 0a fBound = TRUE;..
bb90: 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 ..break;...case
bba0: 31 20 7c 20 38 3a 20 2f 2f 20 cd e8 e6 ed ff ff 1 | 8: // ......
bbb0: 20 e3 f0 e0 ed e8 f6 e0 20 e7 e0 e4 e0 ed e0 20 ....... ......
bbc0: e8 ed e4 e5 ea f1 3d 20 61 6e 64 20 ef ee eb e5 ......= and ....
bbd0: e8 ed e4 e5 ea f1 e0 3e 0d 0a 09 09 2a 70 42 79 .......>....*pBy
bbe0: 74 65 43 6f 64 65 2b 2b 20 3d 20 73 65 6c 4d 69 teCode++ = selMi
bbf0: 6e 4b 65 79 5f 46 4b 45 71 75 61 6c 5f 50 4b 4d nKey_FKEqual_PKM
bc00: 69 6e 3b 0d 0a 09 09 62 50 6f 73 73 69 62 6c 79 in;....bPossibly
bc10: 43 68 61 6e 67 65 54 79 70 65 4f 66 42 6f 75 6e ChangeTypeOfBoun
bc20: 64 20 3d 20 54 52 55 45 3b 0d 0a 09 09 62 72 65 d = TRUE;....bre
bc30: 61 6b 3b 0d 0a 09 63 61 73 65 20 32 20 7c 20 30 ak;...case 2 | 0
bc40: 3a 09 2f 2f 20 cd e8 e6 ed ff ff 20 e3 f0 e0 ed :.// ...... ....
bc50: e8 f6 e0 20 e7 e0 e4 e0 ed e0 20 e8 ed e4 e5 ea ... ...... .....
bc60: f1 3e 0d 0a 09 09 2a 70 42 79 74 65 43 6f 64 65 .>....*pByteCode
bc70: 2b 2b 20 3d 20 73 65 74 4d 69 6e 4b 65 79 5f 46 ++ = setMinKey_F
bc80: 4b 4d 69 6e 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d KMin;....break;.
bc90: 0a 09 63 61 73 65 20 32 20 7c 20 34 3a 09 2f 2f ..case 2 | 4:.//
bca0: 20 cd e8 e6 ed ff ff 20 e3 f0 e0 ed e8 f6 e0 20 ...... .......
bcb0: e7 e0 e4 e0 ed e0 20 e8 ed e4 e5 ea f1 3e 20 61 ...... ......> a
bcc0: 6e 64 20 ef ee eb e5 e8 ed e4 e5 ea f1 e0 3d 0d nd ...........=.
bcd0: 0a 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 ...*pByteCode++
bce0: 3d 20 73 65 6c 4d 69 6e 4b 65 79 5f 46 4b 4d 69 = selMinKey_FKMi
bcf0: 6e 5f 50 4b 45 71 75 61 6c 3b 0d 0a 09 09 62 50 n_PKEqual;....bP
bd00: 6f 73 73 69 62 6c 79 43 68 61 6e 67 65 54 79 70 ossiblyChangeTyp
bd10: 65 4f 66 42 6f 75 6e 64 20 3d 20 54 52 55 45 3b eOfBound = TRUE;
bd20: 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 ....break;...cas
bd30: 65 20 32 20 7c 20 38 3a 09 2f 2f 20 cd e8 e6 ed e 2 | 8:.// ....
bd40: ff ff 20 e3 f0 e0 ed e8 f6 e0 20 e7 e0 e4 e0 ed .. ....... .....
bd50: e0 20 e8 ed e4 e5 ea f1 3e 20 61 6e 64 20 ef ee . ......> and ..
bd60: eb e5 e8 ed e4 e5 ea f1 e0 3e 0d 0a 09 09 2a 70 .........>....*p
bd70: 42 79 74 65 43 6f 64 65 2b 2b 20 3d 20 73 65 6c ByteCode++ = sel
bd80: 4d 69 6e 4b 65 79 5f 46 4b 4d 69 6e 5f 50 4b 4d MinKey_FKMin_PKM
bd90: 69 6e 3b 0d 0a 09 09 62 50 6f 73 73 69 62 6c 79 in;....bPossibly
bda0: 43 68 61 6e 67 65 54 79 70 65 4f 66 42 6f 75 6e ChangeTypeOfBoun
bdb0: 64 20 3d 20 54 52 55 45 3b 0d 0a 09 09 62 72 65 d = TRUE;....bre
bdc0: 61 6b 3b 0d 0a 09 7d 0d 0a 09 2f 2f 20 c2 fb e1 ak;...}...// ...
bdd0: ee f0 20 ec e0 ea f1 e8 ec e0 eb fc ed ee e3 ee .. .............
bde0: 20 ea eb fe f7 e0 0d 0a 09 69 73 50 61 72 74 45 ........isPartE
bdf0: 71 75 61 6c 20 3d 20 62 48 61 73 50 61 72 74 45 qual = bHasPartE
be00: 71 75 61 6c 20 7c 7c 20 28 21 62 48 61 73 50 61 qual || (!bHasPa
be10: 72 74 4d 61 78 20 26 26 20 70 6f 73 49 6e 49 64 rtMax && posInId
be20: 78 20 3e 20 30 29 3b 0d 0a 09 74 79 70 65 4f 66 x > 0);...typeOf
be30: 42 6f 75 6e 64 20 3d 20 62 48 61 73 46 75 6c 6c Bound = bHasFull
be40: 45 71 75 61 6c 20 7c 20 28 62 48 61 73 46 75 6c Equal | (bHasFul
be50: 6c 4d 61 78 20 3c 3c 20 31 29 20 7c 20 28 69 73 lMax << 1) | (is
be60: 50 61 72 74 45 71 75 61 6c 20 3c 3c 20 32 29 20 PartEqual << 2)
be70: 7c 20 28 62 48 61 73 50 61 72 74 4d 61 78 20 3c | (bHasPartMax <
be80: 3c 20 33 29 3b 0d 0a 09 62 48 61 73 4d 61 78 4b < 3);...bHasMaxK
be90: 65 79 20 3d 20 54 52 55 45 3b 0d 0a 09 73 77 69 ey = TRUE;...swi
bea0: 74 63 68 28 74 79 70 65 4f 66 42 6f 75 6e 64 29 tch(typeOfBound)
beb0: 0d 0a 09 7b 0d 0a 09 63 61 73 65 20 30 20 7c 20 ...{...case 0 |
bec0: 30 3a 09 2f 2f 20 c2 e5 f0 f5 ed e5 e9 20 e3 f0 0:.// ....... ..
bed0: e0 ed e8 f6 fb 20 ed e5 f2 0d 0a 09 09 62 48 61 ..... .......bHa
bee0: 73 4d 61 78 4b 65 79 20 3d 20 46 41 4c 53 45 3b sMaxKey = FALSE;
bef0: 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 ....break;...cas
bf00: 65 20 30 20 7c 20 34 3a 09 2f 2f 20 c2 e5 f0 f5 e 0 | 4:.// ....
bf10: ed ff ff 20 e3 f0 e0 ed e8 f6 e0 20 e7 e0 e4 e0 ... ....... ....
bf20: ed e0 20 ef ee eb e5 e8 ed e4 e5 ea f1 e0 3d 0d .. ...........=.
bf30: 0a 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 ...*pByteCode++
bf40: 3d 20 73 65 74 4d 61 78 4b 65 79 5f 50 4b 45 71 = setMaxKey_PKEq
bf50: 75 61 6c 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a ual;....break;..
bf60: 09 63 61 73 65 20 30 20 7c 20 38 3a 09 2f 2f 20 .case 0 | 8:.//
bf70: c2 e5 f0 f5 ed ff ff 20 e3 f0 e0 ed e8 f6 e0 20 ....... .......
bf80: e7 e0 e4 e0 ed e0 20 ef ee eb e5 e8 ed e4 e5 ea ...... .........
bf90: f1 e0 3c 0d 0a 09 09 2a 70 42 79 74 65 43 6f 64 ..<....*pByteCod
bfa0: 65 2b 2b 20 3d 20 73 65 74 4d 61 78 4b 65 79 5f e++ = setMaxKey_
bfb0: 50 4b 4d 61 78 3b 0d 0a 09 09 62 72 65 61 6b 3b PKMax;....break;
bfc0: 0d 0a 09 63 61 73 65 20 31 20 7c 20 30 3a 09 2f ...case 1 | 0:./
bfd0: 2f 20 c2 e5 f0 f5 ed ff ff 20 e3 f0 e0 ed e8 f6 / ....... ......
bfe0: e0 20 e7 e0 e4 e0 ed e0 20 e8 ed e4 e5 ea f1 3d . ...... ......=
bff0: 0d 0a 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b ....*pByteCode++
c000: 20 3d 20 73 65 74 4d 61 78 4b 65 79 5f 46 4b 45 = setMaxKey_FKE
c010: 71 75 61 6c 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d qual;....break;.
c020: 0a 09 63 61 73 65 20 31 20 7c 20 34 3a 09 2f 2f ..case 1 | 4:.//
c030: 20 c2 e5 f0 f5 ed ff ff 20 e3 f0 e0 ed e8 f6 e0 ....... .......
c040: 20 e7 e0 e4 e0 ed e0 20 e8 ed e4 e5 ea f1 3d 20 ...... ......=
c050: 61 6e 64 20 ef ee eb e5 e8 ed e4 e5 ea f1 e0 3d and ...........=
c060: 0d 0a 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b ....*pByteCode++
c070: 20 3d 20 73 65 6c 4d 61 78 4b 65 79 5f 46 4b 45 = selMaxKey_FKE
c080: 71 75 61 6c 5f 50 4b 45 71 75 61 6c 3b 0d 0a 09 qual_PKEqual;...
c090: 09 62 50 6f 73 73 69 62 6c 79 43 68 61 6e 67 65 .bPossiblyChange
c0a0: 54 79 70 65 4f 66 42 6f 75 6e 64 20 3d 20 54 52 TypeOfBound = TR
c0b0: 55 45 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 UE;....break;...
c0c0: 63 61 73 65 20 31 20 7c 20 38 3a 20 2f 2f 20 c2 case 1 | 8: // .
c0d0: e5 f0 f5 ed ff ff 20 e3 f0 e0 ed e8 f6 e0 20 e7 ...... ....... .
c0e0: e0 e4 e0 ed e0 20 e8 ed e4 e5 ea f1 3d 20 61 6e ..... ......= an
c0f0: 64 20 ef ee eb e5 e8 ed e4 e5 ea f1 e0 3c 0d 0a d ...........<..
c100: 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 3d ..*pByteCode++ =
c110: 20 73 65 6c 4d 61 78 4b 65 79 5f 46 4b 45 71 75 selMaxKey_FKEqu
c120: 61 6c 5f 50 4b 4d 61 78 3b 0d 0a 09 09 62 50 6f al_PKMax;....bPo
c130: 73 73 69 62 6c 79 43 68 61 6e 67 65 54 79 70 65 ssiblyChangeType
c140: 4f 66 42 6f 75 6e 64 20 3d 20 54 52 55 45 3b 0d OfBound = TRUE;.
c150: 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 ...break;...case
c160: 20 32 20 7c 20 30 3a 09 2f 2f 20 c2 e5 f0 f5 ed 2 | 0:.// .....
c170: ff ff 20 e3 f0 e0 ed e8 f6 e0 20 e7 e0 e4 e0 ed .. ....... .....
c180: e0 20 e8 ed e4 e5 ea f1 3c 0d 0a 09 09 2a 70 42 . ......<....*pB
c190: 79 74 65 43 6f 64 65 2b 2b 20 3d 20 73 65 74 4d yteCode++ = setM
c1a0: 61 78 4b 65 79 5f 46 4b 4d 61 78 3b 0d 0a 09 09 axKey_FKMax;....
c1b0: 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 32 20 break;...case 2
c1c0: 7c 20 34 3a 09 2f 2f 20 c2 e5 f0 f5 ed ff ff 20 | 4:.// .......
c1d0: e3 f0 e0 ed e8 f6 e0 20 e7 e0 e4 e0 ed e0 20 e8 ....... ...... .
c1e0: ed e4 e5 ea f1 3c 20 61 6e 64 20 ef ee eb e5 e8 .....< and .....
c1f0: ed e4 e5 ea f1 e0 3d 0d 0a 09 09 2a 70 42 79 74 ......=....*pByt
c200: 65 43 6f 64 65 2b 2b 20 3d 20 73 65 6c 4d 61 78 eCode++ = selMax
c210: 4b 65 79 5f 46 4b 4d 61 78 5f 50 4b 45 71 75 61 Key_FKMax_PKEqua
c220: 6c 3b 0d 0a 09 09 62 50 6f 73 73 69 62 6c 79 43 l;....bPossiblyC
c230: 68 61 6e 67 65 54 79 70 65 4f 66 42 6f 75 6e 64 hangeTypeOfBound
c240: 20 3d 20 54 52 55 45 3b 0d 0a 09 09 62 72 65 61 = TRUE;....brea
c250: 6b 3b 0d 0a 09 63 61 73 65 20 32 20 7c 20 38 3a k;...case 2 | 8:
c260: 09 2f 2f 20 c2 e5 f0 f5 ed ff ff 20 e3 f0 e0 ed .// ....... ....
c270: e8 f6 e0 20 e7 e0 e4 e0 ed e0 20 e8 ed e4 e5 ea ... ...... .....
c280: f1 3c 20 61 6e 64 20 ef ee eb e5 e8 ed e4 e5 ea .< and .........
c290: f1 e0 3c 0d 0a 09 09 2a 70 42 79 74 65 43 6f 64 ..<....*pByteCod
c2a0: 65 2b 2b 20 3d 20 73 65 6c 4d 61 78 4b 65 79 5f e++ = selMaxKey_
c2b0: 46 4b 4d 61 78 5f 50 4b 4d 61 78 3b 0d 0a 09 09 FKMax_PKMax;....
c2c0: 62 50 6f 73 73 69 62 6c 79 43 68 61 6e 67 65 54 bPossiblyChangeT
c2d0: 79 70 65 4f 66 42 6f 75 6e 64 20 3d 20 54 52 55 ypeOfBound = TRU
c2e0: 45 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 7d E;....break;...}
c2f0: 0d 0a 09 69 66 28 62 48 61 73 4d 69 6e 4b 65 79 ...if(bHasMinKey
c300: 20 26 26 20 62 48 61 73 4d 61 78 4b 65 79 20 26 && bHasMaxKey &
c310: 26 20 62 50 6f 73 73 69 62 6c 79 43 68 61 6e 67 & bPossiblyChang
c320: 65 54 79 70 65 4f 66 42 6f 75 6e 64 29 0d 0a 09 eTypeOfBound)...
c330: 7b 0d 0a 09 09 2f 2f 20 c5 f1 f2 fc 20 e8 20 e2 {....// .... . .
c340: e5 f0 f5 ed ff ff 20 e8 20 ed e8 e6 ed ff ff 20 ...... . ......
c350: e3 f0 e0 ed e8 f6 e0 2c 20 e8 20 e5 e5 20 f2 e8 ......., . .. ..
c360: ef 20 ec ee e6 e5 f2 20 e8 e7 ec e5 ed e8 f2 f1 . ..... ........
c370: ff 0d 0a 09 09 2a 70 42 79 74 65 43 6f 64 65 2b .....*pByteCode+
c380: 2b 20 3d 20 63 6d 70 4d 69 6e 4d 61 78 4b 65 79 + = cmpMinMaxKey
c390: 73 3b 0d 0a 09 7d 0d 0a 09 72 65 74 75 72 6e 20 s;...}...return
c3a0: 61 72 67 4e 75 6d 3b 0d 0a 7d 0d 0a 0d 0a 76 6f argNum;..}....vo
c3b0: 69 64 20 46 69 6c 74 65 72 4d 61 63 68 69 6e 65 id FilterMachine
c3c0: 3a 3a 62 75 69 6c 64 28 63 6f 6e 73 74 20 43 56 ::build(const CV
c3d0: 74 61 62 49 6e 66 6f 26 20 74 61 62 6c 65 2c 20 tabInfo& table,
c3e0: 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f 69 6e sqlite3_index_in
c3f0: 66 6f 2a 20 70 49 64 78 2c 20 63 6f 6e 73 74 20 fo* pIdx, const
c400: 69 64 78 5f 6e 6f 64 65 2a 20 70 42 65 73 74 29 idx_node* pBest)
c410: 0d 0a 7b 0d 0a 09 2f 2f 20 d2 e5 f1 f2 2c 20 f7 ..{...// ...., .
c420: f2 ee 20 ee ef ea ee e4 fb 20 e2 ec e5 f9 e0 fe .. ...... ......
c430: f2 f1 ff 20 e2 20 31 20 e1 e0 e9 f2 0d 0a 09 63 ... . 1 .......c
c440: 68 61 72 20 74 65 73 74 4f 70 43 6f 64 65 53 69 har testOpCodeSi
c450: 7a 65 5b 6c 61 73 74 4f 70 43 6f 64 65 20 3e 20 ze[lastOpCode >
c460: 30 78 46 46 20 3f 20 2d 31 20 3a 20 31 5d 20 3d 0xFF ? -1 : 1] =
c470: 20 7b 30 7d 3b 0d 0a 09 0d 0a 09 2f 2f 20 cf f0 {0};......// ..
c480: e8 ec e5 f0 ed ee 20 ef f0 e8 ec e5 ec 2c 20 f7 ...... ......, .
c490: f2 ee 20 ed e0 20 ea e0 e6 e4 ee e5 20 ee e3 f0 .. .. ...... ...
c4a0: e0 ed e8 f7 e5 ed e8 e5 20 f3 f5 ee e4 e8 f2 20 ........ ......
c4b0: e0 e6 20 f6 e5 eb fb f5 20 36 34 20 e1 e0 e9 f2 .. ..... 64 ....
c4c0: e0 0d 0a 09 2f 2f 20 ed e0 f8 e5 e3 ee 20 e1 e0 ....// ...... ..
c4d0: e9 f2 2d ea ee e4 e0 2e 20 c4 f3 ec e0 fe 2c 20 ..-..... .....,
c4e0: e2 20 fd f2 ee f2 20 f0 e0 e7 ec e5 f0 20 f3 eb . .... ...... ..
c4f0: ee e6 e8 ec f1 ff 2e 0d 0a 09 42 59 54 45 20 2a ..........BYTE *
c500: 70 53 74 61 72 74 42 79 74 65 43 6f 64 65 20 3d pStartByteCode =
c510: 20 6e 65 77 20 42 59 54 45 5b 28 70 49 64 78 2d new BYTE[(pIdx-
c520: 3e 6e 43 6f 6e 73 74 72 61 69 6e 74 20 2b 20 31 >nConstraint + 1
c530: 30 29 20 2a 20 36 34 5d 2c 20 2a 70 42 79 74 65 0) * 64], *pByte
c540: 43 6f 64 65 20 3d 20 70 53 74 61 72 74 42 79 74 Code = pStartByt
c550: 65 43 6f 64 65 3b 0d 0a 09 42 4f 4f 4c 20 62 48 eCode;...BOOL bH
c560: 61 73 4d 69 6e 4b 65 79 2c 20 62 48 61 73 4d 61 asMinKey, bHasMa
c570: 78 4b 65 79 3b 0d 0a 09 69 6e 74 20 61 72 67 4e xKey;...int argN
c580: 75 6d 3b 0d 0a 09 0d 0a 09 69 66 28 70 42 65 73 um;......if(pBes
c590: 74 29 0d 0a 09 7b 0d 0a 09 09 70 49 64 78 2d 3e t)...{....pIdx->
c5a0: 69 64 78 4e 75 6d 20 3d 20 70 42 65 73 74 2d 3e idxNum = pBest->
c5b0: 69 6e 64 65 78 4e 75 6d 3b 0d 0a 09 09 69 66 28 indexNum;....if(
c5c0: 70 42 65 73 74 2d 3e 6f 72 64 65 72 20 21 3d 20 pBest->order !=
c5d0: 6e 6f 6f 4e 61 29 0d 0a 09 09 09 70 49 64 78 2d nooNa).....pIdx-
c5e0: 3e 6f 72 64 65 72 42 79 43 6f 6e 73 75 6d 65 64 >orderByConsumed
c5f0: 20 3d 20 54 52 55 45 3b 0d 0a 09 09 61 72 67 4e = TRUE;....argN
c600: 75 6d 20 3d 20 62 75 69 6c 64 49 6e 64 65 78 57 um = buildIndexW
c610: 6f 72 6b 28 70 42 79 74 65 43 6f 64 65 2c 20 74 ork(pByteCode, t
c620: 61 62 6c 65 2c 20 70 49 64 78 2c 20 70 42 65 73 able, pIdx, pBes
c630: 74 2c 20 62 48 61 73 4d 69 6e 4b 65 79 2c 20 62 t, bHasMinKey, b
c640: 48 61 73 4d 61 78 4b 65 79 29 3b 0d 0a 09 7d 0d HasMaxKey);...}.
c650: 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09 70 49 ..else...{....pI
c660: 64 78 2d 3e 69 64 78 4e 75 6d 20 3d 20 2d 31 3b dx->idxNum = -1;
c670: 0d 0a 09 09 70 49 64 78 2d 3e 6f 72 64 65 72 42 ....pIdx->orderB
c680: 79 43 6f 6e 73 75 6d 65 64 20 3d 20 46 41 4c 53 yConsumed = FALS
c690: 45 3b 0d 0a 09 09 61 72 67 4e 75 6d 20 3d 20 31 E;....argNum = 1
c6a0: 3b 0d 0a 09 7d 0d 0a 0d 0a 09 2f 2f 20 c7 e4 e5 ;...}.....// ...
c6b0: f1 fc 20 e4 ee e1 e0 e2 e8 ec 20 f1 ee e7 e4 e0 .. ....... .....
c6c0: ed e8 e5 20 ea ee e4 e0 20 e4 eb ff 20 ef f0 ee ... .... ... ...
c6d0: e2 e5 f0 ea e8 20 e4 ee ef 2e f3 f1 eb ee e2 e8 ..... ..........
c6e0: e9 2c 20 ed e5 20 ef ee ef e0 e2 f8 e8 f5 20 e2 ., .. ........ .
c6f0: 20 e8 ed e4 e5 ea f1 0d 0a 09 62 75 69 6c 64 41 .........buildA
c700: 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 28 70 dditionalTests(p
c710: 42 79 74 65 43 6f 64 65 2c 20 70 49 64 78 2c 20 ByteCode, pIdx,
c720: 61 72 67 4e 75 6d 2c 20 74 61 62 6c 65 29 3b 0d argNum, table);.
c730: 0a 0d 0a 09 69 66 28 70 42 65 73 74 29 0d 0a 09 ....if(pBest)...
c740: 7b 0d 0a 09 09 69 66 28 70 42 65 73 74 2d 3e 69 {....if(pBest->i
c750: 6e 64 65 78 4e 75 6d 20 3d 3d 20 2d 31 29 0d 0a ndexNum == -1)..
c760: 09 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 ...*pByteCode++
c770: 3d 20 67 6f 74 6f 54 6f 52 6f 77 3b 0d 0a 09 09 = gotoToRow;....
c780: 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f else....{.....//
c790: 20 ce ef f0 e5 e4 e5 eb e8 ec 20 ed e0 ef f0 e0 ......... .....
c7a0: e2 eb e5 ed e8 e5 20 e2 fb e1 ee f0 ea e8 2e 0d ...... .........
c7b0: 0a 09 09 09 42 4f 4f 4c 20 62 52 65 76 65 72 73 ....BOOL bRevers
c7c0: 65 20 3d 20 46 41 4c 53 45 3b 0d 0a 09 09 09 69 e = FALSE;.....i
c7d0: 66 28 70 42 65 73 74 2d 3e 6f 72 64 65 72 20 3d f(pBest->order =
c7e0: 3d 20 6e 6f 6f 44 65 73 63 29 09 2f 2f 20 c5 f1 = nooDesc).// ..
c7f0: eb e8 20 ef ee e4 ef e8 f1 e0 eb e8 f1 fc 20 e2 .. ........... .
c800: fb e4 e0 f2 fc 20 e2 20 ee e1 f0 e0 f2 ed ee ec ..... . ........
c810: 20 ef ee f0 ff e4 ea e5 2c 20 ed e8 f7 e5 e3 ee ......., ......
c820: 20 ed e5 20 ef ee ef e8 f8 e5 f8 fc 2e 0d 0a 09 .. ............
c830: 09 09 09 62 52 65 76 65 72 73 65 20 3d 20 54 52 ...bReverse = TR
c840: 55 45 3b 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 UE;.....else if(
c850: 70 42 65 73 74 2d 3e 6f 72 64 65 72 20 3d 3d 20 pBest->order ==
c860: 6e 6f 6f 4e 61 29 09 2f 2f 20 cd e5 20 ef ee e4 nooNa).// .. ...
c870: ef e8 f1 fb e2 e0 eb e8 f1 fc 20 ed e0 20 f1 ee .......... .. ..
c880: f0 f2 e8 f0 ee e2 ea f3 2e 0d 0a 09 09 09 7b 0d ..............{.
c890: 0a 09 09 09 09 69 66 28 62 48 61 73 4d 61 78 4b .....if(bHasMaxK
c8a0: 65 79 20 26 26 20 21 62 48 61 73 4d 69 6e 4b 65 ey && !bHasMinKe
c8b0: 79 29 09 2f 2f 20 cf f0 ee f9 e5 20 e4 e2 e8 ed y).// ..... ....
c8c0: f3 f2 fc 20 e2 20 ea ee ed e5 f6 2c 20 e8 20 e8 ... . ....., . .
c8d0: e4 f2 e8 20 ea 20 ed e0 f7 e0 eb f3 2c 20 ed e5 ... . ......, ..
c8e0: 20 ef f0 ee e2 e5 f0 ff ff 20 ea eb fe f7 e0 0d ........ ......
c8f0: 0a 09 09 09 09 09 62 52 65 76 65 72 73 65 20 3d ......bReverse =
c900: 20 54 52 55 45 3b 0d 0a 09 09 09 7d 0d 0a 09 09 TRUE;.....}....
c910: 09 69 66 28 62 52 65 76 65 72 73 65 29 0d 0a 09 .if(bReverse)...
c920: 09 09 09 2a 70 42 79 74 65 43 6f 64 65 2b 2b 20 ...*pByteCode++
c930: 3d 20 62 48 61 73 4d 61 78 4b 65 79 20 3f 20 28 = bHasMaxKey ? (
c940: 62 48 61 73 4d 69 6e 4b 65 79 20 3f 20 67 6f 74 bHasMinKey ? got
c950: 6f 4d 61 78 54 6f 4d 69 6e 20 3a 20 67 6f 74 6f oMaxToMin : goto
c960: 4d 61 78 54 6f 46 69 72 73 74 29 20 3a 20 28 62 MaxToFirst) : (b
c970: 48 61 73 4d 69 6e 4b 65 79 20 3f 20 67 6f 74 6f HasMinKey ? goto
c980: 4c 61 73 74 54 6f 4d 69 6e 20 3a 20 67 6f 74 6f LastToMin : goto
c990: 4c 61 73 74 54 6f 46 69 72 73 74 29 3b 0d 0a 09 LastToFirst);...
c9a0: 09 09 65 6c 73 65 0d 0a 09 09 09 09 2a 70 42 79 ..else......*pBy
c9b0: 74 65 43 6f 64 65 2b 2b 20 3d 20 62 48 61 73 4d teCode++ = bHasM
c9c0: 69 6e 4b 65 79 20 3f 20 28 62 48 61 73 4d 61 78 inKey ? (bHasMax
c9d0: 4b 65 79 20 3f 20 67 6f 74 6f 4d 69 6e 54 6f 4d Key ? gotoMinToM
c9e0: 61 78 20 3a 20 67 6f 74 6f 4d 69 6e 54 6f 4c 61 ax : gotoMinToLa
c9f0: 73 74 29 20 3a 20 28 62 48 61 73 4d 61 78 4b 65 st) : (bHasMaxKe
ca00: 79 20 3f 20 67 6f 74 6f 46 69 72 73 74 54 6f 4d y ? gotoFirstToM
ca10: 61 78 20 3a 20 67 6f 74 6f 46 69 72 73 74 54 6f ax : gotoFirstTo
ca20: 4c 61 73 74 29 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d Last);....}...}.
ca30: 0a 09 65 6c 73 65 0d 0a 09 7b 0d 0a 09 09 2f 2f ..else...{....//
ca40: 20 c8 ed e4 e5 ea f1 20 ed e5 20 e2 fb e1 f0 e0 ...... .. .....
ca50: ed 2e 20 d1 ee e7 e4 e0 e4 e8 ec 20 ea ee e4 20 .. ........ ...
ca60: ef f0 ee f1 f2 ee e3 ee 20 ef e5 f0 e5 e1 ee f0 ........ .......
ca70: e0 2e 0d 0a 09 09 2a 70 42 79 74 65 43 6f 64 65 ......*pByteCode
ca80: 2b 2b 20 3d 20 67 6f 74 6f 46 69 72 73 74 54 6f ++ = gotoFirstTo
ca90: 4c 61 73 74 3b 0d 0a 09 7d 0d 0a 09 2a 70 42 79 Last;...}...*pBy
caa0: 74 65 43 6f 64 65 2b 2b 20 3d 20 73 74 6f 70 3b teCode++ = stop;
cab0: 0d 0a 0d 0a 09 43 53 74 72 69 6e 67 20 69 64 78 .....CString idx
cac0: 53 74 72 2c 20 62 79 74 65 43 6f 64 65 3b 0d 0a Str, byteCode;..
cad0: 09 62 79 74 65 43 6f 64 65 54 6f 53 74 72 28 70 .byteCodeToStr(p
cae0: 53 74 61 72 74 42 79 74 65 43 6f 64 65 2c 20 70 StartByteCode, p
caf0: 42 79 74 65 43 6f 64 65 2c 20 62 79 74 65 43 6f ByteCode, byteCo
cb00: 64 65 29 3b 0d 0a 0d 0a 09 69 64 78 53 74 72 2e de);.....idxStr.
cb10: 46 6f 72 6d 61 74 28 22 25 73 3b 25 73 22 2c 20 Format("%s;%s",
cb20: 70 42 65 73 74 20 3f 20 28 70 42 65 73 74 2d 3e pBest ? (pBest->
cb30: 69 6e 64 65 78 4e 75 6d 20 3d 3d 20 2d 31 20 3f indexNum == -1 ?
cb40: 20 22 72 65 63 4e 6f 22 20 3a 20 74 61 62 6c 65 "recNo" : table
cb50: 2e 74 61 62 6c 65 28 29 2d 3e 69 6e 64 65 78 28 .table()->index(
cb60: 70 42 65 73 74 2d 3e 69 6e 64 65 78 4e 75 6d 29 pBest->indexNum)
cb70: 2d 3e 73 7a 4e 61 6d 65 29 20 3a 20 22 6e 6f 49 ->szName) : "noI
cb80: 64 78 22 2c 20 62 79 74 65 43 6f 64 65 29 3b 0d dx", byteCode);.
cb90: 0a 09 69 6e 74 20 69 64 78 53 74 72 4c 65 6e 20 ..int idxStrLen
cba0: 3d 20 69 64 78 53 74 72 2e 47 65 74 4c 65 6e 67 = idxStr.GetLeng
cbb0: 74 68 28 29 20 2b 20 31 3b 0d 0a 0d 0a 09 70 49 th() + 1;.....pI
cbc0: 64 78 2d 3e 69 64 78 53 74 72 20 3d 20 28 63 68 dx->idxStr = (ch
cbd0: 61 72 2a 29 73 71 6c 69 74 65 33 5f 6d 61 6c 6c ar*)sqlite3_mall
cbe0: 6f 63 28 69 64 78 53 74 72 4c 65 6e 29 3b 0d 0a oc(idxStrLen);..
cbf0: 09 70 49 64 78 2d 3e 6e 65 65 64 54 6f 46 72 65 .pIdx->needToFre
cc00: 65 49 64 78 53 74 72 20 3d 20 54 52 55 45 3b 0d eIdxStr = TRUE;.
cc10: 0a 09 6d 65 6d 63 70 79 28 70 49 64 78 2d 3e 69 ..memcpy(pIdx->i
cc20: 64 78 53 74 72 2c 20 28 4c 50 43 53 54 52 29 69 dxStr, (LPCSTR)i
cc30: 64 78 53 74 72 2c 20 69 64 78 53 74 72 4c 65 6e dxStr, idxStrLen
cc40: 29 3b 0d 0a 09 64 65 6c 65 74 65 20 5b 5d 20 70 );...delete [] p
cc50: 53 74 61 72 74 42 79 74 65 43 6f 64 65 3b 0d 0a StartByteCode;..
cc60: 7d 0d 0a 0d 0a 73 65 6c 65 63 74 5f 69 74 65 72 }....select_iter
cc70: 61 74 6f 72 2a 20 46 69 6c 74 65 72 4d 61 63 68 ator* FilterMach
cc80: 69 6e 65 3a 3a 70 61 72 73 65 46 69 6c 74 65 72 ine::parseFilter
cc90: 28 63 75 72 73 6f 72 5f 64 61 74 61 26 20 63 75 (cursor_data& cu
cca0: 72 73 6f 72 2c 20 63 6f 6e 73 74 20 43 56 74 61 rsor, const CVta
ccb0: 62 49 6e 66 6f 26 20 74 61 62 6c 65 2c 20 63 6f bInfo& table, co
ccc0: 6e 73 74 20 63 68 61 72 2a 20 69 64 78 53 74 72 nst char* idxStr
ccd0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a , sqlite3_value*
cce0: 2a 20 61 72 67 73 29 0d 0a 7b 0d 0a 09 46 69 6c * args)..{...Fil
ccf0: 74 65 72 4d 61 63 68 69 6e 65 20 6d 61 63 68 69 terMachine machi
cd00: 6e 65 28 74 61 62 6c 65 2c 20 63 75 72 73 6f 72 ne(table, cursor
cd10: 29 3b 0d 0a 09 42 59 54 45 2a 20 70 42 79 74 65 );...BYTE* pByte
cd20: 43 6f 64 65 20 3d 20 73 74 72 54 6f 42 79 74 65 Code = strToByte
cd30: 43 6f 64 65 28 73 74 72 63 68 72 28 69 64 78 53 Code(strchr(idxS
cd40: 74 72 2c 20 27 3b 27 29 20 2b 20 31 29 3b 0d 0a tr, ';') + 1);..
cd50: 09 73 65 6c 65 63 74 5f 69 74 65 72 61 74 6f 72 .select_iterator
cd60: 2a 20 69 74 20 3d 20 6d 61 63 68 69 6e 65 2e 70 * it = machine.p
cd70: 72 6f 63 65 73 73 28 70 42 79 74 65 43 6f 64 65 rocess(pByteCode
cd80: 2c 20 61 72 67 73 29 3b 0d 0a 09 64 65 6c 65 74 , args);...delet
cd90: 65 20 5b 5d 20 70 42 79 74 65 43 6f 64 65 3b 0d e [] pByteCode;.
cda0: 0a 09 72 65 74 75 72 6e 20 69 74 3b 0d 0a 7d 0d ..return it;..}.
cdb0: 0a 0d 0a 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f .../////////////
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
cdf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f ////////////////
ce00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 2f 2f 20 ca //////////..// .
ce10: eb e0 f1 f1 fb 20 f0 e0 e7 ed fb f5 20 e8 f2 e5 ..... ...... ...
ce20: f0 e0 f2 ee f0 ee e2 0d 0a 0d 0a 2f 2f 20 c8 f2 ...........// ..
ce30: e5 f0 e0 f2 ee f0 20 e1 e5 e7 20 ef f0 ee e2 e5 ...... ... .....
ce40: f0 ea e8 20 f1 f2 ee ef 2d ea eb fe f7 e0 20 e8 ... ....-..... .
ce50: 20 e4 ee ef 2e f3 f1 eb ee e2 e8 e9 2e 0d 0a 74 ..............t
ce60: 65 6d 70 6c 61 74 65 3c 4e 61 76 43 74 72 6c 20 emplate<NavCtrl
ce70: 64 69 72 65 63 74 69 6f 6e 3e 0d 0a 73 74 72 75 direction>..stru
ce80: 63 74 20 69 74 65 72 4e 6f 53 74 6f 70 4b 65 79 ct iterNoStopKey
ce90: 4e 6f 54 65 73 74 20 3a 20 73 65 6c 65 63 74 5f NoTest : select_
cea0: 69 74 65 72 61 74 6f 72 0d 0a 7b 0d 0a 09 76 69 iterator..{...vi
ceb0: 72 74 75 61 6c 20 42 4f 4f 4c 20 64 6f 4e 65 78 rtual BOOL doNex
cec0: 74 28 63 75 72 73 6f 72 5f 64 61 74 61 26 20 63 t(cursor_data& c
ced0: 75 72 73 6f 72 2c 20 63 6f 6e 73 74 20 43 56 74 ursor, const CVt
cee0: 61 62 49 6e 66 6f 26 20 74 61 62 6c 65 29 0d 0a abInfo& table)..
cef0: 09 7b 0d 0a 09 09 72 65 74 75 72 6e 20 63 75 72 .{....return cur
cf00: 73 6f 72 2e 73 74 6f 72 65 2e 47 6f 74 6f 28 64 sor.store.Goto(d
cf10: 69 72 65 63 74 69 6f 6e 2c 20 30 29 3b 0d 0a 09 irection, 0);...
cf20: 7d 0d 0a 7d 3b 0d 0a 0d 0a 0d 0a 2f 2f 20 c8 f2 }..};......// ..
cf30: e5 f0 e0 f2 ee f0 20 f1 20 ef f0 ee e2 e5 f0 ea ...... . .......
cf40: ee e9 20 f1 f2 ee ef 2d ea eb fe f7 e0 20 ed ee .. ....-..... ..
cf50: 20 e1 e5 e7 20 ef f0 ee e2 e5 f0 ea e8 20 e4 ee ... ........ ..
cf60: ef 2e f3 f1 eb ee e2 e8 e9 2e 0d 0a 74 65 6d 70 ............temp
cf70: 6c 61 74 65 3c 4e 61 76 43 74 72 6c 20 64 69 72 late<NavCtrl dir
cf80: 65 63 74 69 6f 6e 3e 0d 0a 73 74 72 75 63 74 20 ection>..struct
cf90: 69 74 65 72 53 74 6f 70 4b 65 79 73 4e 6f 54 65 iterStopKeysNoTe
cfa0: 73 74 73 20 3a 20 73 65 6c 65 63 74 5f 69 74 65 sts : select_ite
cfb0: 72 61 74 6f 72 0d 0a 7b 0d 0a 09 74 65 73 74 43 rator..{...testC
cfc0: 6f 6e 73 74 72 61 69 6e 74 2a 20 70 55 6e 74 69 onstraint* pUnti
cfd0: 6c 3b 0d 0a 09 69 74 65 72 53 74 6f 70 4b 65 79 l;...iterStopKey
cfe0: 73 4e 6f 54 65 73 74 73 28 74 65 73 74 43 6f 6e sNoTests(testCon
cff0: 73 74 72 61 69 6e 74 2a 26 20 70 53 29 20 3a 20 straint*& pS) :
d000: 70 55 6e 74 69 6c 28 70 53 29 0d 0a 09 7b 0d 0a pUntil(pS)...{..
d010: 09 09 70 53 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 7d ..pS = NULL;...}
d020: 0d 0a 09 7e 69 74 65 72 53 74 6f 70 4b 65 79 73 ...~iterStopKeys
d030: 4e 6f 54 65 73 74 73 28 29 0d 0a 09 7b 0d 0a 09 NoTests()...{...
d040: 09 64 65 6c 65 74 65 20 70 55 6e 74 69 6c 3b 0d .delete pUntil;.
d050: 0a 09 7d 0d 0a 09 76 69 72 74 75 61 6c 20 42 4f ..}...virtual BO
d060: 4f 4c 20 64 6f 4e 65 78 74 28 63 75 72 73 6f 72 OL doNext(cursor
d070: 5f 64 61 74 61 26 20 63 75 72 73 6f 72 2c 20 63 _data& cursor, c
d080: 6f 6e 73 74 20 43 56 74 61 62 49 6e 66 6f 26 20 onst CVtabInfo&
d090: 74 61 62 6c 65 29 0d 0a 09 7b 0d 0a 09 09 69 66 table)...{....if
d0a0: 28 21 63 75 72 73 6f 72 2e 73 74 6f 72 65 2e 47 (!cursor.store.G
d0b0: 6f 74 6f 28 64 69 72 65 63 74 69 6f 6e 2c 20 30 oto(direction, 0
d0c0: 29 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 46 41 )).....return FA
d0d0: 4c 53 45 3b 0d 0a 09 09 69 66 28 21 74 65 73 74 LSE;....if(!test
d0e0: 43 6f 6e 73 74 72 61 69 6e 74 3a 3a 64 6f 54 65 Constraint::doTe
d0f0: 73 74 28 70 55 6e 74 69 6c 2c 20 63 75 72 73 6f st(pUntil, curso
d100: 72 29 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 46 r)).....return F
d110: 41 4c 53 45 3b 0d 0a 09 09 72 65 74 75 72 6e 20 ALSE;....return
d120: 54 52 55 45 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d TRUE;...}..};...
d130: 0a 2f 2f 20 c8 f2 e5 f0 e0 f2 ee f0 20 e1 e5 e7 .// ........ ...
d140: 20 ef f0 ee e2 e5 f0 ea e8 20 f1 f2 ee ef 2d ea ........ ....-.
d150: eb fe f7 e0 2c 20 ed ee 20 f1 20 ef f0 ee e2 e5 ...., .. . .....
d160: f0 ea ee e9 20 e4 ee ef 2e f3 f1 eb ee e2 e8 e9 .... ...........
d170: 2e 0d 0a 74 65 6d 70 6c 61 74 65 3c 4e 61 76 43 ...template<NavC
d180: 74 72 6c 20 64 69 72 65 63 74 69 6f 6e 3e 0d 0a trl direction>..
d190: 73 74 72 75 63 74 20 69 74 65 72 4e 6f 53 74 6f struct iterNoSto
d1a0: 70 4b 65 79 73 54 65 73 74 73 20 3a 20 73 65 6c pKeysTests : sel
d1b0: 65 63 74 5f 69 74 65 72 61 74 6f 72 0d 0a 7b 0d ect_iterator..{.
d1c0: 0a 09 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 ..testConstraint
d1d0: 2a 20 70 54 65 73 74 73 3b 0d 0a 09 69 74 65 72 * pTests;...iter
d1e0: 4e 6f 53 74 6f 70 4b 65 79 73 54 65 73 74 73 28 NoStopKeysTests(
d1f0: 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 2a 26 testConstraint*&
d200: 20 70 54 29 20 3a 20 70 54 65 73 74 73 28 70 54 pT) : pTests(pT
d210: 29 0d 0a 09 7b 0d 0a 09 09 70 54 20 3d 20 4e 55 )...{....pT = NU
d220: 4c 4c 3b 0d 0a 09 7d 0d 0a 09 7e 69 74 65 72 4e LL;...}...~iterN
d230: 6f 53 74 6f 70 4b 65 79 73 54 65 73 74 73 28 29 oStopKeysTests()
d240: 0d 0a 09 7b 0d 0a 09 09 64 65 6c 65 74 65 20 70 ...{....delete p
d250: 54 65 73 74 73 3b 0d 0a 09 7d 0d 0a 09 76 69 72 Tests;...}...vir
d260: 74 75 61 6c 20 42 4f 4f 4c 20 64 6f 4e 65 78 74 tual BOOL doNext
d270: 28 63 75 72 73 6f 72 5f 64 61 74 61 26 20 63 75 (cursor_data& cu
d280: 72 73 6f 72 2c 20 63 6f 6e 73 74 20 43 56 74 61 rsor, const CVta
d290: 62 49 6e 66 6f 26 20 74 61 62 6c 65 29 0d 0a 09 bInfo& table)...
d2a0: 7b 0d 0a 09 09 66 6f 72 28 3b 3b 29 0d 0a 09 09 {....for(;;)....
d2b0: 7b 0d 0a 09 09 09 69 66 28 21 63 75 72 73 6f 72 {.....if(!cursor
d2c0: 2e 73 74 6f 72 65 2e 47 6f 74 6f 28 64 69 72 65 .store.Goto(dire
d2d0: 63 74 69 6f 6e 2c 20 30 29 29 0d 0a 09 09 09 09 ction, 0))......
d2e0: 72 65 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 return FALSE;...
d2f0: 09 09 69 66 28 21 74 65 73 74 43 6f 6e 73 74 72 ..if(!testConstr
d300: 61 69 6e 74 3a 3a 64 6f 54 65 73 74 28 70 54 65 aint::doTest(pTe
d310: 73 74 73 2c 20 63 75 72 73 6f 72 29 29 0d 0a 09 sts, cursor))...
d320: 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0d 0a 09 09 ...continue;....
d330: 09 72 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 .return TRUE;...
d340: 09 7d 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f .}...}..};....//
d350: 20 c8 f2 e5 f0 e0 f2 ee f0 20 f1 20 ef f0 ee e2 ........ . ....
d360: e5 f0 ea ee e9 20 f1 f2 ee ef 2d ea eb fe f7 e0 ..... ....-.....
d370: 20 e8 20 e4 ee ef 2e f3 f1 eb ee e2 e8 e9 0d 0a . .............
d380: 74 65 6d 70 6c 61 74 65 3c 4e 61 76 43 74 72 6c template<NavCtrl
d390: 20 64 69 72 65 63 74 69 6f 6e 3e 0d 0a 73 74 72 direction>..str
d3a0: 75 63 74 20 69 74 65 72 53 74 6f 70 4b 65 79 73 uct iterStopKeys
d3b0: 54 65 73 74 73 20 3a 20 73 65 6c 65 63 74 5f 69 Tests : select_i
d3c0: 74 65 72 61 74 6f 72 0d 0a 7b 0d 0a 09 74 65 73 terator..{...tes
d3d0: 74 43 6f 6e 73 74 72 61 69 6e 74 20 2a 70 55 6e tConstraint *pUn
d3e0: 74 69 6c 2c 20 2a 70 54 65 73 74 3b 0d 0a 09 69 til, *pTest;...i
d3f0: 74 65 72 53 74 6f 70 4b 65 79 73 54 65 73 74 73 terStopKeysTests
d400: 28 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 2a (testConstraint*
d410: 26 20 70 53 2c 20 74 65 73 74 43 6f 6e 73 74 72 & pS, testConstr
d420: 61 69 6e 74 2a 26 20 70 54 29 20 3a 20 70 55 6e aint*& pT) : pUn
d430: 74 69 6c 28 70 53 29 2c 20 70 54 65 73 74 28 70 til(pS), pTest(p
d440: 54 29 0d 0a 09 7b 0d 0a 09 09 70 53 20 3d 20 4e T)...{....pS = N
d450: 55 4c 4c 3b 0d 0a 09 09 70 54 20 3d 20 4e 55 4c ULL;....pT = NUL
d460: 4c 3b 0d 0a 09 7d 0d 0a 09 7e 69 74 65 72 53 74 L;...}...~iterSt
d470: 6f 70 4b 65 79 73 54 65 73 74 73 28 29 0d 0a 09 opKeysTests()...
d480: 7b 0d 0a 09 09 64 65 6c 65 74 65 20 70 55 6e 74 {....delete pUnt
d490: 69 6c 3b 0d 0a 09 09 64 65 6c 65 74 65 20 70 54 il;....delete pT
d4a0: 65 73 74 3b 0d 0a 09 7d 0d 0a 09 76 69 72 74 75 est;...}...virtu
d4b0: 61 6c 20 42 4f 4f 4c 20 64 6f 4e 65 78 74 28 63 al BOOL doNext(c
d4c0: 75 72 73 6f 72 5f 64 61 74 61 26 20 63 75 72 73 ursor_data& curs
d4d0: 6f 72 2c 20 63 6f 6e 73 74 20 43 56 74 61 62 49 or, const CVtabI
d4e0: 6e 66 6f 26 20 74 61 62 6c 65 29 0d 0a 09 7b 0d nfo& table)...{.
d4f0: 0a 09 09 66 6f 72 28 3b 3b 29 0d 0a 09 09 7b 0d ...for(;;)....{.
d500: 0a 09 09 09 69 66 28 21 63 75 72 73 6f 72 2e 73 ....if(!cursor.s
d510: 74 6f 72 65 2e 47 6f 74 6f 28 64 69 72 65 63 74 tore.Goto(direct
d520: 69 6f 6e 2c 20 30 29 29 0d 0a 09 09 09 09 72 65 ion, 0))......re
d530: 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 09 turn FALSE;.....
d540: 69 66 28 21 74 65 73 74 43 6f 6e 73 74 72 61 69 if(!testConstrai
d550: 6e 74 3a 3a 64 6f 54 65 73 74 28 70 55 6e 74 69 nt::doTest(pUnti
d560: 6c 2c 20 63 75 72 73 6f 72 29 29 0d 0a 09 09 09 l, cursor)).....
d570: 09 72 65 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a .return FALSE;..
d580: 09 09 09 69 66 28 21 74 65 73 74 43 6f 6e 73 74 ...if(!testConst
d590: 72 61 69 6e 74 3a 3a 64 6f 54 65 73 74 28 70 54 raint::doTest(pT
d5a0: 65 73 74 2c 20 63 75 72 73 6f 72 29 29 0d 0a 09 est, cursor))...
d5b0: 09 09 09 63 6f 6e 74 69 6e 75 65 3b 0d 0a 09 09 ...continue;....
d5c0: 09 72 65 74 75 72 6e 20 54 52 55 45 3b 0d 0a 09 .return TRUE;...
d5d0: 09 7d 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f .}...}..};....//
d5e0: 20 ca eb e0 f1 f1 20 f3 ed e8 e2 e5 f0 f1 e0 eb ..... .........
d5f0: fc ed ee e3 ee 20 f3 f1 f2 e0 ed ee e2 f9 e8 ea ..... ..........
d600: e0 20 ea eb fe f7 e0 20 ed e0 20 e8 ed e4 e5 ea . ..... .. .....
d610: f1 0d 0a 63 6c 61 73 73 20 43 55 6e 69 4b 65 79 ...class CUniKey
d620: 4f 62 6a 20 3a 20 70 75 62 6c 69 63 20 43 4b 65 Obj : public CKe
d630: 79 4f 62 6a 0d 0a 7b 0d 0a 70 75 62 6c 69 63 3a yObj..{..public:
d640: 0d 0a 09 43 55 6e 69 4b 65 79 4f 62 6a 28 43 49 ...CUniKeyObj(CI
d650: 6e 64 65 78 2a 20 70 49 2c 20 63 6f 6e 73 74 20 ndex* pI, const
d660: 43 53 74 72 69 6e 67 26 20 6b 65 79 2c 20 63 6f CString& key, co
d670: 6e 73 74 20 69 6e 64 65 78 5f 69 6e 66 6f 2a 20 nst index_info*
d680: 70 49 6e 64 65 78 49 6e 66 6f 29 0d 0a 09 09 3a pIndexInfo)....:
d690: 20 43 4b 65 79 4f 62 6a 28 70 49 2c 20 30 2c 20 CKeyObj(pI, 0,
d6a0: 30 29 2c 20 6d 5f 73 74 72 4b 65 79 28 6b 65 79 0), m_strKey(key
d6b0: 29 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 28 ), m_pIndexInfo(
d6c0: 70 49 6e 64 65 78 49 6e 66 6f 29 0d 0a 09 7b 0d pIndexInfo)...{.
d6d0: 0a 09 7d 0d 0a 09 76 69 72 74 75 61 6c 20 76 6f ..}...virtual vo
d6e0: 69 64 20 50 72 65 70 61 72 65 4b 65 79 28 29 0d id PrepareKey().
d6f0: 0a 09 7b 0d 0a 09 09 4c 50 43 53 54 52 20 70 74 ..{....LPCSTR pt
d700: 72 20 3d 20 6d 5f 73 74 72 4b 65 79 3b 0d 0a 09 r = m_strKey;...
d710: 09 63 6f 6e 73 74 20 69 64 78 5f 66 69 65 6c 64 .const idx_field
d720: 5f 69 6e 66 6f 2a 20 70 49 64 78 46 69 65 6c 64 _info* pIdxField
d730: 49 6e 66 6f 20 3d 20 6d 5f 70 49 6e 64 65 78 49 Info = m_pIndexI
d740: 6e 66 6f 2d 3e 66 69 65 6c 64 73 28 29 3b 0d 0a nfo->fields();..
d750: 09 09 66 6f 72 28 44 57 4f 52 44 20 69 20 3d 20 ..for(DWORD i =
d760: 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 2d 3e 66 69 m_pIndexInfo->fi
d770: 65 6c 64 73 43 6f 75 6e 74 28 29 3b 20 69 2d 2d eldsCount(); i--
d780: 20 3b 20 70 49 64 78 46 69 65 6c 64 49 6e 66 6f ; pIdxFieldInfo
d790: 2b 2b 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 6e 74 ++)....{.....int
d7a0: 20 6c 65 6e 20 3d 20 70 49 64 78 46 69 65 6c 64 len = pIdxField
d7b0: 49 6e 66 6f 2d 3e 69 6e 66 6f 28 29 2e 6c 65 6e Info->info().len
d7c0: 67 74 68 28 29 3b 0d 0a 09 09 09 6d 5f 70 53 74 gth();.....m_pSt
d7d0: 6f 72 65 4f 62 6a 2d 3e 46 58 5f 53 74 72 69 6e oreObj->FX_Strin
d7e0: 67 28 70 49 64 78 46 69 65 6c 64 49 6e 66 6f 2d g(pIdxFieldInfo-
d7f0: 3e 6e 75 6d 49 6e 54 61 62 6c 65 28 29 2c 20 28 >numInTable(), (
d800: 63 68 61 72 2a 29 70 74 72 2c 20 6c 65 6e 2c 20 char*)ptr, len,
d810: 31 29 3b 0d 0a 09 09 09 70 74 72 20 2b 3d 20 6c 1);.....ptr += l
d820: 65 6e 3b 0d 0a 09 09 7d 0d 0a 09 7d 0d 0a 09 4c en;....}...}...L
d830: 50 43 53 54 52 20 6d 5f 73 74 72 4b 65 79 3b 0d PCSTR m_strKey;.
d840: 0a 09 63 6f 6e 73 74 20 69 6e 64 65 78 5f 69 6e ..const index_in
d850: 66 6f 2a 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f fo* m_pIndexInfo
d860: 3b 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f 20 d8 e0 e1 eb ;..};....// ....
d870: ee ed ed e0 ff 20 f4 f3 ed ea f6 e8 ff 20 ef e5 ..... ....... ..
d880: f0 e5 f5 ee e4 e0 20 ef ee 20 ea eb fe f7 f3 0d ...... .. ......
d890: 0a 74 65 6d 70 6c 61 74 65 20 3c 54 65 73 74 4f .template <TestO
d8a0: 70 20 6f 70 2c 20 42 4f 4f 4c 20 62 46 75 6c 6c p op, BOOL bFull
d8b0: 4b 65 79 3e 0d 0a 73 74 72 75 63 74 20 4b 65 79 Key>..struct Key
d8c0: 0d 0a 7b 0d 0a 09 73 74 61 74 69 63 20 69 6e 74 ..{...static int
d8d0: 20 4d 6f 76 65 28 43 53 74 6f 72 65 4f 62 6a 26 Move(CStoreObj&
d8e0: 20 73 74 6f 72 65 2c 20 63 6f 6e 73 74 20 43 53 store, const CS
d8f0: 74 72 69 6e 67 26 20 6b 65 79 4f 72 69 67 2c 20 tring& keyOrig,
d900: 63 6f 6e 73 74 20 69 6e 64 65 78 5f 69 6e 66 6f const index_info
d910: 2a 20 70 49 6e 64 65 78 49 6e 66 6f 29 0d 0a 09 * pIndexInfo)...
d920: 7b 0d 0a 09 09 2f 2f 20 d1 fe e4 e0 20 ed e5 20 {....// .... ..
d930: e4 ee eb e6 ed ee 20 ef ee ef e0 e4 e0 f2 fc 20 ...... ........
d940: f3 f1 eb ee e2 e8 e5 20 74 6f 45 71 75 61 6c 2e ....... toEqual.
d950: 0d 0a 09 09 63 68 61 72 20 74 65 73 74 5f 62 75 ....char test_bu
d960: 66 5b 6f 70 20 3d 3d 20 74 6f 45 71 75 61 6c 20 f[op == toEqual
d970: 3f 20 30 20 3a 20 31 5d 3d 7b 30 7d 3b 0d 0a 09 ? 0 : 1]={0};...
d980: 09 69 6e 74 20 43 6f 75 6e 74 42 79 74 65 49 6e .int CountByteIn
d990: 49 64 78 20 3d 20 70 49 6e 64 65 78 49 6e 66 6f Idx = pIndexInfo
d9a0: 2d 3e 6b 65 79 53 69 7a 65 28 29 3b 0d 0a 09 09 ->keySize();....
d9b0: 43 6f 6d 70 43 74 6c 20 64 69 72 65 63 74 69 6f CompCtl directio
d9c0: 6e 3b 0d 0a 09 09 43 53 74 72 69 6e 67 20 6b 65 n;....CString ke
d9d0: 79 28 6b 65 79 4f 72 69 67 29 3b 0d 0a 0d 0a 09 y(keyOrig);.....
d9e0: 09 69 66 28 74 6f 4c 65 73 73 20 3d 3d 20 6f 70 .if(toLess == op
d9f0: 29 0d 0a 09 09 09 64 69 72 65 63 74 69 6f 6e 20 ).....direction
da00: 3d 20 63 63 4c 3b 0d 0a 09 09 65 6c 73 65 20 69 = ccL;....else i
da10: 66 28 74 6f 4c 65 73 73 45 71 20 3d 3d 20 6f 70 f(toLessEq == op
da20: 29 0d 0a 09 09 09 64 69 72 65 63 74 69 6f 6e 20 ).....direction
da30: 3d 20 63 63 4c 45 3b 0d 0a 09 09 65 6c 73 65 20 = ccLE;....else
da40: 69 66 28 74 6f 47 72 61 74 20 3d 3d 20 6f 70 29 if(toGrat == op)
da50: 0d 0a 09 09 09 64 69 72 65 63 74 69 6f 6e 20 3d .....direction =
da60: 20 63 63 47 3b 0d 0a 09 09 65 6c 73 65 20 69 66 ccG;....else if
da70: 28 74 6f 47 72 61 74 45 71 20 3d 3d 20 6f 70 29 (toGratEq == op)
da80: 0d 0a 09 09 09 64 69 72 65 63 74 69 6f 6e 20 3d .....direction =
da90: 20 63 63 47 45 3b 0d 0a 09 09 0d 0a 09 09 69 6e ccGE;........in
daa0: 74 20 6c 65 6e 20 3d 20 6b 65 79 2e 47 65 74 4c t len = key.GetL
dab0: 65 6e 67 74 68 28 29 3b 0d 0a 09 09 0d 0a 09 09 ength();........
dac0: 69 66 28 62 46 75 6c 6c 4b 65 79 29 0d 0a 09 09 if(bFullKey)....
dad0: 7b 0d 0a 09 09 09 69 66 28 6c 65 6e 20 3e 20 43 {.....if(len > C
dae0: 6f 75 6e 74 42 79 74 65 49 6e 49 64 78 29 0d 0a ountByteInIdx)..
daf0: 09 09 09 7b 0d 0a 09 09 09 09 69 6e 74 20 72 6f ...{......int ro
db00: 77 20 3d 20 61 74 6f 6c 28 28 4c 50 43 53 54 52 w = atol((LPCSTR
db10: 29 6b 65 79 20 2b 20 43 6f 75 6e 74 42 79 74 65 )key + CountByte
db20: 49 6e 49 64 78 29 3b 0d 0a 09 09 09 09 6b 65 79 InIdx);......key
db30: 2e 47 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e .GetBufferSetLen
db40: 67 74 68 28 43 6f 75 6e 74 42 79 74 65 49 6e 49 gth(CountByteInI
db50: 64 78 29 3b 0d 0a 09 09 09 09 69 66 28 72 6f 77 dx);......if(row
db60: 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 2f )......{......./
db70: 2f 20 c2 20 ea eb fe f7 e5 20 e5 f9 e5 20 e8 20 / . ..... ... .
db80: ed ee ec e5 f0 20 f1 f2 f0 ee ea e8 2e 0d 0a 09 ..... ..........
db90: 09 09 09 09 2f 2f 20 cf ee fd f2 ee ec f3 20 e2 ....// ....... .
dba0: ee e7 ec ee e6 ed ee 20 ed e0 e4 ee 20 e7 e0 ec ....... .... ...
dbb0: e5 ed e8 f2 fc 20 e5 f9 e5 20 e8 20 f2 e8 ef 20 ..... ... . ...
dbc0: f3 f1 eb ee e2 e8 ff 2e 0d 0a 09 09 09 09 09 2f .............../
dbd0: 2f 20 d2 e0 ea 2c 20 e5 f1 eb e8 20 e1 fb eb ee / ..., .... ....
dbe0: 20 3e 22 61 61 61 61 61 7c 31 30 22 2c 20 f2 ee >"aaaaa|10", ..
dbf0: 20 ed e5 eb fc e7 ff 20 e4 e5 eb e0 f2 fc 20 ef ...... ...... .
dc00: ee e8 f1 ea 20 3e 22 61 61 61 61 61 22 2c 0d 0a .... >"aaaaa",..
dc10: 09 09 09 09 09 2f 2f 20 ed e0 e4 ee 20 e4 e5 eb .....// .... ...
dc20: e0 f2 fc 20 ef ee e8 f1 ea 20 3e 3d 22 61 61 61 ... ..... >="aaa
dc30: 61 61 22 2c 20 e8 20 ef ee f2 ee ec 20 f0 f3 f7 aa", . ..... ...
dc40: ea e0 ec e8 20 e4 ee e4 e2 e8 e3 e0 f2 fc 20 e2 .... ......... .
dc50: ef e5 f0 e5 e4 2c 0d 0a 09 09 09 09 09 2f 2f 20 .....,.......//
dc60: ef ee ea e0 20 e2 fb ef ee eb ed ff e5 f2 f1 ff .... ...........
dc70: 20 f3 f1 eb ee e2 e8 e5 20 28 ea eb fe f7 3d 3d ....... (....==
dc80: 22 61 61 61 61 61 22 20 e8 20 ed ee ec e5 f0 20 "aaaaa" . .....
dc90: e7 e0 ef e8 f1 e8 20 3c 3d 31 30 29 0d 0a 09 09 ...... <=10)....
dca0: 09 09 09 2f 2f 20 c0 ed e0 eb ee e3 e8 f7 ed ee ...// ..........
dcb0: 20 ef f0 e8 20 f3 f1 eb ee e2 e8 e8 20 3c 2e 0d ... ....... <..
dcc0: 0a 09 09 09 09 09 69 66 28 74 6f 47 72 61 74 20 ......if(toGrat
dcd0: 3d 3d 20 6f 70 29 0d 0a 09 09 09 09 09 09 64 69 == op)........di
dce0: 72 65 63 74 69 6f 6e 20 3d 20 63 63 47 45 3b 0d rection = ccGE;.
dcf0: 0a 09 09 09 09 09 65 6c 73 65 20 69 66 28 74 6f ......else if(to
dd00: 4c 65 73 73 20 3d 3d 20 6f 70 29 0d 0a 09 09 09 Less == op).....
dd10: 09 09 09 64 69 72 65 63 74 69 6f 6e 20 3d 20 63 ...direction = c
dd20: 63 4c 45 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 09 cLE;......}.....
dd30: 7d 0d 0a 09 09 09 65 6c 73 65 20 69 66 28 6c 65 }.....else if(le
dd40: 6e 20 3c 20 43 6f 75 6e 74 42 79 74 65 49 6e 49 n < CountByteInI
dd50: 64 78 29 0d 0a 09 09 09 09 6d 65 6d 73 65 74 28 dx)......memset(
dd60: 6b 65 79 2e 47 65 74 42 75 66 66 65 72 53 65 74 key.GetBufferSet
dd70: 4c 65 6e 67 74 68 28 43 6f 75 6e 74 42 79 74 65 Length(CountByte
dd80: 49 6e 49 64 78 29 2c 20 27 20 27 2c 20 43 6f 75 InIdx), ' ', Cou
dd90: 6e 74 42 79 74 65 49 6e 49 64 78 20 2d 20 6c 65 ntByteInIdx - le
dda0: 6e 29 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 n);....}....else
ddb0: 09 2f 2f 20 d7 e0 f1 f2 e8 f7 ed fb e9 20 ea eb .// ......... ..
ddc0: fe f7 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 6c ......{.....if(l
ddd0: 65 6e 20 3c 20 43 6f 75 6e 74 42 79 74 65 49 6e en < CountByteIn
dde0: 49 64 78 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 09 Idx).....{......
ddf0: 2f 2f 20 cd e0 e4 ee 20 e4 ee ef ee eb ed e8 f2 // .... ........
de00: fc 20 ea eb fe f7 20 e4 ee 20 ef ee eb ed ee e3 . .... .. ......
de10: ee 2e 0d 0a 09 09 09 09 2f 2f 20 cf f0 e8 20 fd ........// ... .
de20: f2 ee ec 20 e5 f1 eb e8 20 f1 f0 e0 e2 ed e5 ed ... .... .......
de30: e8 e5 20 e7 e0 ea e0 ed f7 e8 e2 e0 eb ee f1 fc .. .............
de40: 20 ed e0 20 3e 20 e8 eb e8 20 3c 3d 2c 20 f2 ee .. > ... <=, ..
de50: 20 e4 ee ef ee eb ed ff f2 fc 20 ed e0 e4 ee 20 ......... ....
de60: f1 e8 ec e2 ee eb e0 ec e8 20 30 78 46 46 0d 0a ......... 0xFF..
de70: 09 09 09 09 6d 65 6d 73 65 74 28 6b 65 79 2e 47 ....memset(key.G
de80: 65 74 42 75 66 66 65 72 53 65 74 4c 65 6e 67 74 etBufferSetLengt
de90: 68 28 43 6f 75 6e 74 42 79 74 65 49 6e 49 64 78 h(CountByteInIdx
dea0: 29 20 2b 20 6c 65 6e 2c 20 74 6f 47 72 61 74 20 ) + len, toGrat
deb0: 3d 3d 20 6f 70 20 7c 7c 20 74 6f 4c 65 73 73 45 == op || toLessE
dec0: 71 20 3d 3d 20 6f 70 20 3f 20 30 78 46 46 20 3a q == op ? 0xFF :
ded0: 20 27 20 27 2c 20 43 6f 75 6e 74 42 79 74 65 49 ' ', CountByteI
dee0: 6e 49 64 78 20 2d 20 6c 65 6e 29 3b 0d 0a 09 09 nIdx - len);....
def0: 09 7d 0d 0a 09 09 7d 0d 0a 09 09 2f 2f 20 c4 e0 .}....}....// ..
df00: eb e5 e5 20 ed e5 e1 ee eb fc f8 e0 ff 20 e7 e0 ... ......... ..
df10: ea e0 e2 fb ea e0 20 f1 20 e4 e2 e8 e6 ea ee ec ...... . .......
df20: 20 31 d1 0d 0a 09 09 2f 2f 20 e5 f1 eb e8 20 e5 1.....// .... .
df30: f1 f2 fc 20 f2 e0 e1 eb e8 f6 e0 0d 0a 09 09 2f ... .........../
df40: 2f 20 31 2e 20 27 61 27 0d 0a 09 09 2f 2f 20 32 / 1. 'a'....// 2
df50: 2e 20 27 61 27 0d 0a 09 09 2f 2f 20 33 2e 20 27 . 'a'....// 3. '
df60: 64 27 0d 0a 09 09 2f 2f 20 e8 20 e4 e5 eb e0 e5 d'....// . .....
df70: ec 20 ef ee e8 f1 ea 20 3c 3d 27 61 27 2c 20 f2 . ..... <='a', .
df80: ee 20 31 43 20 ed e0 e9 e4 e5 f2 20 e7 e0 ef e8 . 1C ...... ....
df90: f1 fc 20 b9 20 31 2e 0d 0a 09 09 2f 2f 20 cd ee .. . 1.....// ..
dfa0: 20 f3 20 ed e0 f1 20 f2 e0 ea ee e5 20 f3 f1 eb . ... ..... ...
dfb0: ee e2 e8 e5 20 ec ee e6 e5 f2 20 ef f0 e8 ec e5 .... ..... .....
dfc0: ed ff f2 fc f1 ff 20 f2 ee eb fc ea ee 20 e4 eb ...... ...... ..
dfd0: ff 20 ee e1 f5 ee e4 e0 0d 0a 09 09 2f 2f 20 e8 . ..........// .
dfe0: ed e4 e5 ea f1 e0 20 e2 20 ee e1 f0 e0 f2 ed ee ...... . .......
dff0: ec 20 ef ee f0 ff e4 ea e5 2c 20 e8 20 e2 20 e4 . ......., . . .
e000: e0 ed ed ee ec 20 f1 eb f3 f7 e0 e5 20 f5 ee f2 ..... ...... ...
e010: e5 eb ee f1 fc 20 e1 fb 20 e2 f1 f2 e0 f2 fc 0d ..... .. .......
e020: 0a 09 09 2f 2f 20 ed e0 20 e7 e0 ef e8 f1 fc 20 ...// .. ......
e030: b9 20 32 2e 20 cf ee fd f2 ee ec f3 20 f3 f1 eb . 2. ....... ...
e040: ee e2 e8 e5 20 3c 3d 27 61 27 20 ed e0 e4 ee 20 .... <='a' ....
e050: e8 e7 ec e5 ed e8 f2 fc 20 ed e0 20 3c 27 62 27 ........ .. <'b'
e060: 2e 0d 0a 09 09 69 66 28 63 63 4c 45 20 3d 3d 20 .....if(ccLE ==
e070: 64 69 72 65 63 74 69 6f 6e 29 0d 0a 09 09 7b 0d direction)....{.
e080: 0a 09 09 09 69 66 28 32 20 3d 3d 20 6e 65 78 74 ....if(2 == next
e090: 47 72 61 74 53 74 72 69 6e 67 55 70 70 65 72 28 GratStringUpper(
e0a0: 6b 65 79 2c 20 43 6f 75 6e 74 42 79 74 65 49 6e key, CountByteIn
e0b0: 49 64 78 29 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 Idx)).....{.....
e0c0: 09 2f 2f 20 d1 eb e5 e4 f3 fe f9 f3 fe 20 e1 ee .// ......... ..
e0d0: eb fc f8 f3 fe 20 f1 f2 f0 ee ea f3 20 ef ee eb ..... ...... ...
e0e0: f3 f7 e8 f2 fc 20 ed e5 20 f3 e4 e0 eb ee f1 fc ..... .. .......
e0f0: 2c 20 ed e0 ef f0 e8 ec e5 f0 20 e1 fb eb ee 20 , ........ ....
e100: 3c 3d 27 ff ff ff ff ff ff ff 27 0d 0a 09 09 09 <='.......'.....
e110: 09 2f 2f 20 ce f7 e5 e2 e8 e4 ed ee 2c 20 f7 f2 .// ........, ..
e120: ee 20 ed e0 e4 ee 20 e4 e2 e8 e3 e0 f2 fc 20 e2 . .... ....... .
e130: 20 ea ee ed e5 f6 20 e8 ed e4 e5 ea f1 e0 0d 0a ..... .........
e140: 09 09 09 09 72 65 74 75 72 6e 20 73 74 6f 72 65 ....return store
e150: 2e 47 6f 74 6f 28 6e 61 76 4c 61 73 74 2c 20 30 .Goto(navLast, 0
e160: 29 3b 0d 0a 09 09 09 7d 0d 0a 09 09 09 65 6c 73 );.....}.....els
e170: 65 0d 0a 09 09 09 09 64 69 72 65 63 74 69 6f 6e e......direction
e180: 20 3d 20 63 63 4c 3b 0d 0a 09 09 7d 0d 0a 09 09 = ccL;....}....
e190: 0d 0a 09 09 43 55 6e 69 4b 65 79 4f 62 6a 20 69 ....CUniKeyObj i
e1a0: 64 78 4b 65 79 28 73 74 6f 72 65 2e 70 49 6e 64 dxKey(store.pInd
e1b0: 65 78 2c 20 6b 65 79 2c 20 70 49 6e 64 65 78 49 ex, key, pIndexI
e1c0: 6e 66 6f 29 3b 0d 0a 09 09 72 65 74 75 72 6e 20 nfo);....return
e1d0: 73 74 6f 72 65 2e 47 6f 74 6f 28 26 69 64 78 4b store.Goto(&idxK
e1e0: 65 79 2c 20 64 69 72 65 63 74 69 6f 6e 2c 20 30 ey, direction, 0
e1f0: 29 3b 0d 0a 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 0d 0a );...}..};......
e200: 2f 2f 20 ce e1 f0 e0 e1 ee f2 f7 e8 ea e8 20 f0 // ........... .
e210: e0 e7 ed fb f5 20 ef ee f0 ff e4 ea ee e2 20 e2 ..... ........ .
e220: fb e1 ee f0 ea e8 0d 0a 0d 0a 2f 2f 20 c4 e2 e8 ..........// ...
e230: e3 e0 f2 fc f1 ff 20 ef ee 20 f2 e0 e1 eb e8 f6 ...... .. ......
e240: e5 20 ee f2 20 ed e0 f7 e0 eb e0 20 e4 ee 20 ea . .. ...... .. .
e250: ee ed f6 e0 0d 0a 73 65 6c 65 63 74 5f 69 74 65 ......select_ite
e260: 72 61 74 6f 72 2a 20 46 69 6c 74 65 72 4d 61 63 rator* FilterMac
e270: 68 69 6e 65 3a 3a 47 6f 74 6f 46 69 72 73 74 54 hine::GotoFirstT
e280: 6f 4c 61 73 74 28 29 0d 0a 7b 0d 0a 09 2f 2f 20 oLast()..{...//
e290: c4 e2 e8 e3 e0 e5 ec f1 ff 20 e2 20 ed e0 f7 e0 ......... . ....
e2a0: eb ee 0d 0a 09 69 66 28 21 6d 5f 63 75 72 73 6f .....if(!m_curso
e2b0: 72 2e 73 74 6f 72 65 2e 47 6f 74 6f 28 6e 61 76 r.store.Goto(nav
e2c0: 46 69 72 73 74 2c 20 30 29 29 0d 0a 09 09 72 65 First, 0))....re
e2d0: 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 2f 2f 20 turn NULL;...//
e2e0: c5 f1 eb e8 20 e4 ee ef 2e f3 f1 eb ee e2 e8 e9 .... ...........
e2f0: 20 ed e5 f2 2c 20 e2 e5 f0 ed e5 ec 20 e8 f2 e5 ..., ...... ...
e300: f0 e0 f2 ee f0 0d 0a 09 69 66 28 21 6d 5f 70 41 ........if(!m_pA
e310: 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 29 0d dditionalTests).
e320: 0a 09 09 72 65 74 75 72 6e 20 6e 65 77 20 69 74 ...return new it
e330: 65 72 4e 6f 53 74 6f 70 4b 65 79 4e 6f 54 65 73 erNoStopKeyNoTes
e340: 74 3c 6e 61 76 4e 65 78 74 3e 3b 0d 0a 09 0d 0a t<navNext>;.....
e350: 09 2f 2f 20 c1 f3 e4 e5 ec 20 e8 f1 ea e0 f2 fc .// ..... ......
e360: 20 ef e5 f0 e2 f3 fe 20 e7 e0 ef e8 f1 fc 2c 20 ...... ......,
e370: f3 e4 ee e2 eb e5 f2 e2 ee f0 ff fe f9 f3 fe 20 ...............
e380: e4 ee ef 2e f3 f1 eb ee e2 e8 ff ec 0d 0a 09 66 ...............f
e390: 6f 72 28 3b 3b 29 0d 0a 09 7b 0d 0a 09 09 69 66 or(;;)...{....if
e3a0: 28 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 3a (testConstraint:
e3b0: 3a 64 6f 54 65 73 74 28 6d 5f 70 41 64 64 69 74 :doTest(m_pAddit
e3c0: 69 6f 6e 61 6c 54 65 73 74 73 2c 20 6d 5f 63 75 ionalTests, m_cu
e3d0: 72 73 6f 72 29 29 0d 0a 09 09 09 72 65 74 75 72 rsor)).....retur
e3e0: 6e 20 6e 65 77 20 69 74 65 72 4e 6f 53 74 6f 70 n new iterNoStop
e3f0: 4b 65 79 73 54 65 73 74 73 3c 6e 61 76 4e 65 78 KeysTests<navNex
e400: 74 3e 28 6d 5f 70 41 64 64 69 74 69 6f 6e 61 6c t>(m_pAdditional
e410: 54 65 73 74 73 29 3b 0d 0a 09 09 69 66 28 21 6d Tests);....if(!m
e420: 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 2e 47 6f _cursor.store.Go
e430: 74 6f 28 6e 61 76 4e 65 78 74 2c 20 30 29 29 0d to(navNext, 0)).
e440: 0a 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b ....return NULL;
e450: 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 2f 2f 20 c4 e2 ...}..}....// ..
e460: e8 e3 e0 f2 fc f1 ff 20 ef ee 20 f2 e0 e1 eb e8 ....... .. .....
e470: f6 e5 20 ee f2 20 ed e0 f7 e0 eb e0 20 e4 ee 20 .. .. ...... ..
e480: ec e0 ea f1 e8 ec e0 eb fc ed ee e3 ee 20 ea eb ............. ..
e490: fe f7 e0 0d 0a 73 65 6c 65 63 74 5f 69 74 65 72 .....select_iter
e4a0: 61 74 6f 72 2a 20 46 69 6c 74 65 72 4d 61 63 68 ator* FilterMach
e4b0: 69 6e 65 3a 3a 47 6f 74 6f 46 69 72 73 74 54 6f ine::GotoFirstTo
e4c0: 4d 61 78 28 29 0d 0a 7b 0d 0a 09 2f 2f 20 c8 e4 Max()..{...// ..
e4d0: e5 ec 20 e2 20 ed e0 f7 e0 eb ee 0d 0a 09 69 66 .. . .........if
e4e0: 28 21 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 (!m_cursor.store
e4f0: 2e 47 6f 74 6f 28 6e 61 76 46 69 72 73 74 2c 20 .Goto(navFirst,
e500: 30 29 29 0d 0a 09 09 72 65 74 75 72 6e 20 4e 55 0))....return NU
e510: 4c 4c 3b 0d 0a 09 2f 2f 20 cf ee f1 f2 f0 ee e8 LL;...// .......
e520: ec 20 ef f0 ee e2 e5 f0 ff eb fc f9 e8 ea e8 20 . .............
e530: ec e0 ea f1 e8 ec e0 eb fc ed ee e3 ee 20 ea eb ............. ..
e540: fe f7 e0 2c 20 e2 e7 e0 e2 e8 f1 e8 ec ee f1 f2 ..., ...........
e550: e8 20 ee f2 20 f2 e8 ef e0 20 e3 f0 e0 ed e8 f6 . .. .... ......
e560: fb 2e 0d 0a 09 74 65 73 74 43 6f 6e 73 74 72 61 .....testConstra
e570: 69 6e 74 2a 20 70 55 6e 74 69 6c 20 3d 20 4e 55 int* pUntil = NU
e580: 4c 4c 3b 0d 0a 09 73 77 69 74 63 68 28 6d 5f 6d LL;...switch(m_m
e590: 61 78 4b 54 79 70 65 29 0d 0a 09 7b 0d 0a 09 2f axKType)...{.../
e5a0: 2f 63 61 73 65 20 6b 65 79 50 4b 45 71 3a 09 d2 /case keyPKEq:..
e5b0: e0 ea ee e3 ee 20 f2 e8 ef e0 20 e3 f0 e0 ed e8 ..... .... .....
e5c0: f6 fb 20 e7 e4 e5 f1 fc 20 e1 fb f2 fc 20 ed e5 .. ..... .... ..
e5d0: 20 ec ee e6 e5 f2 2c 20 f2 e0 ea 20 ea e0 ea 20 ....., ... ...
e5e0: ea ee e3 e4 e0 20 ee e4 e8 ed 0d 0a 09 2f 2f 20 ..... .......//
e5f0: e8 e7 20 f2 e8 ef ee e2 20 e3 f0 e0 ed e8 f6 fb .. ..... .......
e600: 20 22 f0 e0 e2 e5 ed f1 f2 e2 ee 22 2c 20 f2 ee ".........", ..
e610: 20 ee e1 ff e7 e0 f2 e5 eb fc ed ee 20 e5 f1 f2 ........... ...
e620: fc 20 e3 f0 e0 ed e8 f6 e0 20 f1 20 e4 f0 f3 e3 . ....... . ....
e630: ee e9 20 f1 f2 ee f0 ee ed fb 09 0d 0a 09 2f 2f .. ...........//
e640: 09 70 55 6e 74 69 6c 20 3d 20 6d 5f 70 50 61 72 .pUntil = m_pPar
e650: 74 45 71 43 6f 6e 73 74 72 3b 0d 0a 09 2f 2f 09 tEqConstr;...//.
e660: 6d 5f 70 50 61 72 74 45 71 43 6f 6e 73 74 72 20 m_pPartEqConstr
e670: 3d 20 4e 55 4c 4c 3b 09 2f 2f 20 d7 f2 ee e1 20 = NULL;.// ....
e680: ed e5 20 f3 e4 e0 eb e8 eb e8 0d 0a 09 2f 2f 09 .. ..........//.
e690: 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 6b 65 break;...case ke
e6a0: 79 50 4b 6e 45 71 3a 0d 0a 09 09 74 65 73 74 43 yPKnEq:....testC
e6b0: 6f 6e 73 74 72 61 69 6e 74 3a 3a 61 70 70 65 6e onstraint::appen
e6c0: 64 28 70 55 6e 74 69 6c 2c 20 6d 5f 70 50 4b 4d d(pUntil, m_pPKM
e6d0: 61 78 43 6f 6e 73 74 72 2c 20 6d 5f 70 50 4b 45 axConstr, m_pPKE
e6e0: 71 43 6f 6e 73 74 72 29 3b 0d 0a 09 09 62 72 65 qConstr);....bre
e6f0: 61 6b 3b 0d 0a 09 2f 2f 63 61 73 65 20 6b 65 79 ak;...//case key
e700: 46 4b 45 71 3a 0d 0a 09 2f 2f 09 6e 65 77 20 74 FKEq:...//.new t
e710: 63 46 75 6c 6c 4b 65 79 28 70 55 6e 74 69 6c 2c cFullKey(pUntil,
e720: 20 74 6f 45 71 75 61 6c 2c 20 6d 5f 66 75 6c 6c toEqual, m_full
e730: 4b 65 79 45 71 2c 20 6d 5f 70 49 6e 64 65 78 49 KeyEq, m_pIndexI
e740: 6e 66 6f 29 3b 0d 0a 09 63 61 73 65 20 6b 65 79 nfo);...case key
e750: 46 4b 6e 45 71 3a 0d 0a 09 09 69 66 28 6d 5f 68 FKnEq:....if(m_h
e760: 61 72 64 46 4b 4d 61 78 29 0d 0a 09 09 09 6e 65 ardFKMax).....ne
e770: 77 20 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 4c 65 w tcFullKey<toLe
e780: 73 73 3e 28 70 55 6e 74 69 6c 2c 20 6d 5f 66 75 ss>(pUntil, m_fu
e790: 6c 6c 4b 65 79 4d 61 78 2c 20 6d 5f 70 49 6e 64 llKeyMax, m_pInd
e7a0: 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 65 6c 73 65 exInfo);....else
e7b0: 0d 0a 09 09 09 6e 65 77 20 74 63 46 75 6c 6c 4b .....new tcFullK
e7c0: 65 79 3c 74 6f 4c 65 73 73 45 71 3e 28 70 55 6e ey<toLessEq>(pUn
e7d0: 74 69 6c 2c 20 6d 5f 66 75 6c 6c 4b 65 79 4d 61 til, m_fullKeyMa
e7e0: 78 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 x, m_pIndexInfo)
e7f0: 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 7d 0d ;....break;...}.
e800: 0a 09 66 6f 72 28 3b 3b 29 0d 0a 09 7b 0d 0a 09 ..for(;;)...{...
e810: 09 2f 2f 20 cf f0 ee e2 e5 f0 e8 ec 2c 20 e0 20 .// ........, .
e820: ed e5 20 ef ee f0 e0 20 eb e8 20 f3 e6 e5 20 ee .. .... .. ... .
e830: f1 f2 e0 ed ee e2 e8 f2 f1 ff 3f 0d 0a 09 09 69 ..........?....i
e840: 66 28 21 74 65 73 74 43 6f 6e 73 74 72 61 69 6e f(!testConstrain
e850: 74 3a 3a 64 6f 54 65 73 74 28 70 55 6e 74 69 6c t::doTest(pUntil
e860: 2c 20 6d 5f 63 75 72 73 6f 72 29 29 0d 0a 09 09 , m_cursor))....
e870: 09 62 72 65 61 6b 3b 0d 0a 09 09 2f 2f 20 cf f0 .break;....// ..
e880: ee e2 e5 f0 e8 ec 20 ed e0 20 e4 ee ef 2e f3 f1 ...... .. ......
e890: eb ee e2 e8 ff 20 28 e5 f1 eb e8 20 e8 f5 20 ed ..... (.... .. .
e8a0: e5 f2 2c 20 ef f0 ee e2 e5 f0 ea e0 20 e2 f1 e5 .., ........ ...
e8b0: e3 e4 e0 20 e1 f3 e4 e5 f2 20 54 52 55 45 29 0d ... ..... TRUE).
e8c0: 0a 09 09 69 66 28 74 65 73 74 43 6f 6e 73 74 72 ...if(testConstr
e8d0: 61 69 6e 74 3a 3a 64 6f 54 65 73 74 28 6d 5f 70 aint::doTest(m_p
e8e0: 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 2c AdditionalTests,
e8f0: 20 6d 5f 63 75 72 73 6f 72 29 29 0d 0a 09 09 7b m_cursor))....{
e900: 0d 0a 09 09 09 69 66 28 6d 5f 70 41 64 64 69 74 .....if(m_pAddit
e910: 69 6f 6e 61 6c 54 65 73 74 73 29 0d 0a 09 09 09 ionalTests).....
e920: 09 72 65 74 75 72 6e 20 6e 65 77 20 69 74 65 72 .return new iter
e930: 53 74 6f 70 4b 65 79 73 54 65 73 74 73 3c 6e 61 StopKeysTests<na
e940: 76 4e 65 78 74 3e 28 70 55 6e 74 69 6c 2c 20 6d vNext>(pUntil, m
e950: 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 _pAdditionalTest
e960: 73 29 3b 0d 0a 09 09 09 65 6c 73 65 0d 0a 09 09 s);.....else....
e970: 09 09 72 65 74 75 72 6e 20 6e 65 77 20 69 74 65 ..return new ite
e980: 72 53 74 6f 70 4b 65 79 73 4e 6f 54 65 73 74 73 rStopKeysNoTests
e990: 3c 6e 61 76 4e 65 78 74 3e 28 70 55 6e 74 69 6c <navNext>(pUntil
e9a0: 29 3b 0d 0a 09 09 7d 0d 0a 09 09 2f 2f 20 c7 e0 );....}....// ..
e9b0: ef e8 f1 fc 20 ed e5 20 ef ee e4 f5 ee e4 e8 f2 .... .. ........
e9c0: 20 ef ee 20 e4 ee ef 2e f3 f1 eb ee e2 e8 ff ec .. ............
e9d0: 2e 20 cf ee ef f0 ee e1 f3 e5 ec 20 f1 eb e5 e4 . ......... ....
e9e0: f3 fe f9 f3 fe 0d 0a 09 09 69 66 28 21 6d 5f 63 .........if(!m_c
e9f0: 75 72 73 6f 72 2e 73 74 6f 72 65 2e 47 6f 74 6f ursor.store.Goto
ea00: 28 6e 61 76 4e 65 78 74 2c 20 30 29 29 0d 0a 09 (navNext, 0))...
ea10: 09 09 62 72 65 61 6b 3b 0d 0a 09 7d 0d 0a 09 64 ..break;...}...d
ea20: 65 6c 65 74 65 20 70 55 6e 74 69 6c 3b 0d 0a 09 elete pUntil;...
ea30: 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 7d 0d return NULL;..}.
ea40: 0a 0d 0a 2f 2f 20 c4 e2 e8 e3 e0 f2 fc f1 ff 20 ...// .........
ea50: ef ee 20 f2 e0 e1 eb e8 f6 e5 20 ee f2 20 ec e8 .. ....... .. ..
ea60: ed e8 ec e0 eb fc ed ee e3 ee 20 ea eb fe f7 e0 .......... .....
ea70: 20 e4 ee 20 ea ee ed f6 e0 20 f2 e0 e1 eb e8 f6 .. ..... ......
ea80: fb 0d 0a 73 65 6c 65 63 74 5f 69 74 65 72 61 74 ...select_iterat
ea90: 6f 72 2a 20 46 69 6c 74 65 72 4d 61 63 68 69 6e or* FilterMachin
eaa0: 65 3a 3a 47 6f 74 6f 4d 69 6e 54 6f 4c 61 73 74 e::GotoMinToLast
eab0: 28 29 0d 0a 7b 0d 0a 09 2f 2f 20 d3 e4 e0 eb ee ()..{...// .....
eac0: f1 fc 20 eb e8 20 ef e5 f0 e5 e9 f2 e8 20 ed e0 .. .. ....... ..
ead0: 20 ec e8 ed e8 ec e0 eb fc ed fb e9 20 ea eb fe ........... ...
eae0: f7 0d 0a 09 42 4f 4f 4c 20 62 4d 6f 76 65 64 3b ....BOOL bMoved;
eaf0: 0d 0a 09 2f 2f 20 c2 ee e7 ec ee e6 ed ee 2c 20 ...// ........,
eb00: ec e8 ed 2e ea eb fe f7 20 e7 e0 e4 e0 ed 20 ef ........ ..... .
eb10: ee eb ed fb ec 20 ea eb fe f7 ee ec 2c 20 f1 20 ..... ......, .
eb20: ed ee ec e5 f0 ee ec 20 f1 f2 f0 ee ea e8 2c 20 ....... ......,
eb30: e8 20 ed e0 e4 ee 20 e1 f3 e4 e5 f2 0d 0a 09 2f . .... ......../
eb40: 2f 20 e4 ee e4 e2 e8 e3 e0 f2 fc 20 22 f0 f3 f7 / ......... "...
eb50: ea e0 ec e8 22 0d 0a 09 74 65 73 74 43 6f 6e 73 ...."...testCons
eb60: 74 72 61 69 6e 74 2a 20 70 53 74 61 72 74 46 75 traint* pStartFu
eb70: 6c 6c 4b 65 79 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 llKey = NULL;...
eb80: 0d 0a 09 73 77 69 74 63 68 28 6d 5f 6d 69 6e 4b ...switch(m_minK
eb90: 54 79 70 65 29 0d 0a 09 7b 0d 0a 09 2f 2f 20 c4 Type)...{...// .
eba0: e0 ed ed fb e5 20 ea fd e9 f1 fb 20 ed e5 20 ec ..... ..... .. .
ebb0: ee e6 e5 f2 20 e2 ee e7 ed e8 ea ed f3 f2 fc 2c .... ..........,
ebc0: 20 f2 e0 ea 20 ea e0 ea 20 e5 f1 eb e8 20 ee e4 ... ... .... ..
ebd0: ed e0 20 e8 e7 20 e3 f0 e0 ed e8 f6 20 ee e1 ee .. .. ...... ...
ebe0: e7 ed e0 f7 e5 ed e0 20 ea e0 ea 0d 0a 09 2f 2f ....... ......//
ebf0: 20 ef ee ff e2 e8 e2 f8 e5 ff f1 ff 20 e8 e7 20 ........... ..
ec00: f0 e0 e2 e5 ed f1 f2 e2 e0 2c 20 f2 ee 20 ee e1 ........., .. ..
ec10: ff e7 e0 f2 e5 eb fc ed ee 20 e1 f3 e4 e5 f2 20 ......... .....
ec20: e8 20 e2 f2 ee f0 e0 ff 20 e3 f0 e0 ed e8 f6 e0 . ...... .......
ec30: 2e 0d 0a 09 2f 2f 63 61 73 65 20 6b 65 79 50 4b ....//case keyPK
ec40: 45 71 3a 0d 0a 09 2f 2f 63 61 73 65 20 6b 65 79 Eq:...//case key
ec50: 46 4b 45 71 3a 09 0d 0a 09 63 61 73 65 20 6b 65 FKEq:....case ke
ec60: 79 50 4b 6e 45 71 3a 0d 0a 09 09 69 66 28 6d 5f yPKnEq:....if(m_
ec70: 68 61 72 64 50 4b 4d 69 6e 29 0d 0a 09 09 09 62 hardPKMin).....b
ec80: 4d 6f 76 65 64 20 3d 20 4b 65 79 3c 74 6f 47 72 Moved = Key<toGr
ec90: 61 74 2c 20 46 41 4c 53 45 3e 3a 3a 4d 6f 76 65 at, FALSE>::Move
eca0: 28 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 2c (m_cursor.store,
ecb0: 20 6d 5f 70 61 72 74 4b 65 79 4d 69 6e 2c 20 6d m_partKeyMin, m
ecc0: 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 _pIndexInfo);...
ecd0: 09 65 6c 73 65 0d 0a 09 09 09 62 4d 6f 76 65 64 .else.....bMoved
ece0: 20 3d 20 4b 65 79 3c 74 6f 47 72 61 74 45 71 2c = Key<toGratEq,
ecf0: 20 46 41 4c 53 45 3e 3a 3a 4d 6f 76 65 28 6d 5f FALSE>::Move(m_
ed00: 63 75 72 73 6f 72 2e 73 74 6f 72 65 2c 20 6d 5f cursor.store, m_
ed10: 70 61 72 74 4b 65 79 4d 69 6e 2c 20 6d 5f 70 49 partKeyMin, m_pI
ed20: 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 62 72 ndexInfo);....br
ed30: 65 61 6b 3b 0d 0a 09 63 61 73 65 20 6b 65 79 46 eak;...case keyF
ed40: 4b 6e 45 71 3a 0d 0a 09 09 2f 2f 20 cd e0 f7 e0 KnEq:....// ....
ed50: eb fc ed fb e9 20 ea eb fe f7 20 e7 e0 e4 e0 e5 ..... .... .....
ed60: f2 f1 ff 20 ef ee eb ed fb ec 20 ea eb fe f7 ee ... ...... .....
ed70: ec 2c 20 ef ee fd f2 ee ec f3 20 e2 ee e7 ec ee ., ....... .....
ed80: e6 ed ee 2c 20 e2 20 ed e5 ec 20 e5 f9 e5 20 e8 ..., . ... ... .
ed90: 20 ed ee ec e5 f0 20 e7 e0 ef e8 f1 e8 2e 0d 0a ..... .........
eda0: 09 09 2f 2f 20 c8 20 f2 ee e3 e4 e0 20 e5 e3 ee ..// . ..... ...
edb0: 20 ed e0 e4 ee 20 e4 ee e4 e2 e8 e3 e0 f2 fc 20 .... .........
edc0: f0 f3 f7 ea e0 ec e8 2e 0d 0a 09 09 69 66 28 6d ............if(m
edd0: 5f 68 61 72 64 46 4b 4d 69 6e 29 0d 0a 09 09 7b _hardFKMin)....{
ede0: 0d 0a 09 09 09 6e 65 77 20 74 63 46 75 6c 6c 4b .....new tcFullK
edf0: 65 79 3c 74 6f 47 72 61 74 3e 28 70 53 74 61 72 ey<toGrat>(pStar
ee00: 74 46 75 6c 6c 4b 65 79 2c 20 6d 5f 66 75 6c 6c tFullKey, m_full
ee10: 4b 65 79 4d 69 6e 2c 20 6d 5f 70 49 6e 64 65 78 KeyMin, m_pIndex
ee20: 49 6e 66 6f 29 3b 0d 0a 09 09 09 62 4d 6f 76 65 Info);.....bMove
ee30: 64 20 3d 20 4b 65 79 3c 74 6f 47 72 61 74 2c 20 d = Key<toGrat,
ee40: 54 52 55 45 3e 3a 3a 4d 6f 76 65 28 6d 5f 63 75 TRUE>::Move(m_cu
ee50: 72 73 6f 72 2e 73 74 6f 72 65 2c 20 6d 5f 66 75 rsor.store, m_fu
ee60: 6c 6c 4b 65 79 4d 69 6e 2c 20 6d 5f 70 49 6e 64 llKeyMin, m_pInd
ee70: 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 7d 0d 0a 09 exInfo);....}...
ee80: 09 65 6c 73 65 0d 0a 09 09 7b 0d 0a 09 09 09 6e .else....{.....n
ee90: 65 77 20 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 47 ew tcFullKey<toG
eea0: 72 61 74 45 71 3e 28 70 53 74 61 72 74 46 75 6c ratEq>(pStartFul
eeb0: 6c 4b 65 79 2c 20 6d 5f 66 75 6c 6c 4b 65 79 4d lKey, m_fullKeyM
eec0: 69 6e 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f in, m_pIndexInfo
eed0: 29 3b 0d 0a 09 09 09 62 4d 6f 76 65 64 20 3d 20 );.....bMoved =
eee0: 4b 65 79 3c 74 6f 47 72 61 74 45 71 2c 20 54 52 Key<toGratEq, TR
eef0: 55 45 3e 3a 3a 4d 6f 76 65 28 6d 5f 63 75 72 73 UE>::Move(m_curs
ef00: 6f 72 2e 73 74 6f 72 65 2c 20 6d 5f 66 75 6c 6c or.store, m_full
ef10: 4b 65 79 4d 69 6e 2c 20 6d 5f 70 49 6e 64 65 78 KeyMin, m_pIndex
ef20: 49 6e 66 6f 29 3b 0d 0a 09 09 7d 0d 0a 09 09 62 Info);....}....b
ef30: 72 65 61 6b 3b 0d 0a 09 2f 2f 64 65 66 61 75 6c reak;...//defaul
ef40: 74 3a 0d 0a 09 2f 2f 09 62 4d 6f 76 65 64 20 3d t:...//.bMoved =
ef50: 20 46 41 4c 53 45 3b 0d 0a 09 7d 0d 0a 09 69 66 FALSE;...}...if
ef60: 28 70 53 74 61 72 74 46 75 6c 6c 4b 65 79 29 0d (pStartFullKey).
ef70: 0a 09 7b 0d 0a 09 09 69 66 28 62 4d 6f 76 65 64 ..{....if(bMoved
ef80: 29 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 ca eb )....{.....// ..
ef90: fe f7 20 e7 e0 e4 e0 ed 20 ef ee eb ed fb ec 20 .. ..... ......
efa0: ea eb fe f7 ee ec 2c 20 e2 ee e7 ec ee e6 ed ee ......, ........
efb0: 20 e2 20 ed e5 ec 20 ed ee ec e5 f0 20 e7 e0 ef . ... ..... ...
efc0: e8 f1 e8 20 e8 20 ed e0 e4 ee 20 e4 ee e4 e2 e8 ... . .... .....
efd0: e3 e0 f2 fc 20 e7 e0 ef e8 f1 fc 0d 0a 09 09 09 .... ...........
efe0: 66 6f 72 28 3b 3b 29 0d 0a 09 09 09 7b 0d 0a 09 for(;;).....{...
eff0: 09 09 09 69 66 28 74 65 73 74 43 6f 6e 73 74 72 ...if(testConstr
f000: 61 69 6e 74 3a 3a 64 6f 54 65 73 74 28 70 53 74 aint::doTest(pSt
f010: 61 72 74 46 75 6c 6c 4b 65 79 2c 20 6d 5f 63 75 artFullKey, m_cu
f020: 72 73 6f 72 29 29 0d 0a 09 09 09 09 09 62 72 65 rsor)).......bre
f030: 61 6b 3b 0d 0a 09 09 09 09 69 66 28 21 6d 5f 63 ak;......if(!m_c
f040: 75 72 73 6f 72 2e 73 74 6f 72 65 2e 47 6f 74 6f ursor.store.Goto
f050: 28 6e 61 76 4e 65 78 74 2c 20 30 29 29 0d 0a 09 (navNext, 0))...
f060: 09 09 09 7b 0d 0a 09 09 09 09 09 62 4d 6f 76 65 ...{.......bMove
f070: 64 20 3d 20 46 41 4c 53 45 3b 0d 0a 09 09 09 09 d = FALSE;......
f080: 09 62 72 65 61 6b 3b 0d 0a 09 09 09 09 7d 0d 0a .break;......}..
f090: 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 09 64 65 6c ...}....}....del
f0a0: 65 74 65 20 70 53 74 61 72 74 46 75 6c 6c 4b 65 ete pStartFullKe
f0b0: 79 3b 0d 0a 09 7d 0d 0a 0d 0a 09 69 66 28 21 62 y;...}.....if(!b
f0c0: 4d 6f 76 65 64 29 0d 0a 09 09 72 65 74 75 72 6e Moved)....return
f0d0: 20 4e 55 4c 4c 3b 0d 0a 0d 0a 09 69 66 28 21 6d NULL;.....if(!m
f0e0: 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 _pAdditionalTest
f0f0: 73 29 0d 0a 09 09 72 65 74 75 72 6e 20 6e 65 77 s)....return new
f100: 20 69 74 65 72 4e 6f 53 74 6f 70 4b 65 79 4e 6f iterNoStopKeyNo
f110: 54 65 73 74 3c 6e 61 76 4e 65 78 74 3e 3b 0d 0a Test<navNext>;..
f120: 09 0d 0a 09 66 6f 72 28 3b 3b 29 0d 0a 09 7b 0d ....for(;;)...{.
f130: 0a 09 09 69 66 28 74 65 73 74 43 6f 6e 73 74 72 ...if(testConstr
f140: 61 69 6e 74 3a 3a 64 6f 54 65 73 74 28 6d 5f 70 aint::doTest(m_p
f150: 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 2c AdditionalTests,
f160: 20 6d 5f 63 75 72 73 6f 72 29 29 0d 0a 09 09 09 m_cursor)).....
f170: 72 65 74 75 72 6e 20 6e 65 77 20 69 74 65 72 4e return new iterN
f180: 6f 53 74 6f 70 4b 65 79 73 54 65 73 74 73 3c 6e oStopKeysTests<n
f190: 61 76 4e 65 78 74 3e 28 6d 5f 70 41 64 64 69 74 avNext>(m_pAddit
f1a0: 69 6f 6e 61 6c 54 65 73 74 73 29 3b 0d 0a 09 09 ionalTests);....
f1b0: 69 66 28 21 6d 5f 63 75 72 73 6f 72 2e 73 74 6f if(!m_cursor.sto
f1c0: 72 65 2e 47 6f 74 6f 28 6e 61 76 4e 65 78 74 2c re.Goto(navNext,
f1d0: 20 30 29 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 0)).....return
f1e0: 4e 55 4c 4c 3b 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a NULL;...}..}....
f1f0: 73 65 6c 65 63 74 5f 69 74 65 72 61 74 6f 72 2a select_iterator*
f200: 20 46 69 6c 74 65 72 4d 61 63 68 69 6e 65 3a 3a FilterMachine::
f210: 47 6f 74 6f 4d 69 6e 54 6f 4d 61 78 28 29 0d 0a GotoMinToMax()..
f220: 7b 0d 0a 09 42 4f 4f 4c 20 62 4d 6f 76 65 64 3b {...BOOL bMoved;
f230: 0d 0a 09 74 65 73 74 43 6f 6e 73 74 72 61 69 6e ...testConstrain
f240: 74 2a 20 70 53 74 61 72 74 46 75 6c 6c 4b 65 79 t* pStartFullKey
f250: 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 73 77 69 74 63 = NULL;...switc
f260: 68 28 6d 5f 6d 69 6e 4b 54 79 70 65 29 0d 0a 09 h(m_minKType)...
f270: 7b 0d 0a 09 63 61 73 65 20 6b 65 79 50 4b 45 71 {...case keyPKEq
f280: 3a 0d 0a 09 09 62 4d 6f 76 65 64 20 3d 20 4b 65 :....bMoved = Ke
f290: 79 3c 74 6f 47 72 61 74 45 71 2c 20 46 41 4c 53 y<toGratEq, FALS
f2a0: 45 3e 3a 3a 4d 6f 76 65 28 6d 5f 63 75 72 73 6f E>::Move(m_curso
f2b0: 72 2e 73 74 6f 72 65 2c 20 6d 5f 70 61 72 74 4b r.store, m_partK
f2c0: 65 79 45 71 2c 20 6d 5f 70 49 6e 64 65 78 49 6e eyEq, m_pIndexIn
f2d0: 66 6f 29 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a fo);....break;..
f2e0: 09 63 61 73 65 20 6b 65 79 50 4b 6e 45 71 3a 0d .case keyPKnEq:.
f2f0: 0a 09 09 69 66 28 6d 5f 68 61 72 64 50 4b 4d 69 ...if(m_hardPKMi
f300: 6e 29 0d 0a 09 09 09 62 4d 6f 76 65 64 20 3d 20 n).....bMoved =
f310: 4b 65 79 3c 74 6f 47 72 61 74 2c 20 46 41 4c 53 Key<toGrat, FALS
f320: 45 3e 3a 3a 4d 6f 76 65 28 6d 5f 63 75 72 73 6f E>::Move(m_curso
f330: 72 2e 73 74 6f 72 65 2c 20 6d 5f 70 61 72 74 4b r.store, m_partK
f340: 65 79 4d 69 6e 2c 20 6d 5f 70 49 6e 64 65 78 49 eyMin, m_pIndexI
f350: 6e 66 6f 29 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 nfo);....else...
f360: 09 09 62 4d 6f 76 65 64 20 3d 20 4b 65 79 3c 74 ..bMoved = Key<t
f370: 6f 47 72 61 74 45 71 2c 20 46 41 4c 53 45 3e 3a oGratEq, FALSE>:
f380: 3a 4d 6f 76 65 28 6d 5f 63 75 72 73 6f 72 2e 73 :Move(m_cursor.s
f390: 74 6f 72 65 2c 20 6d 5f 70 61 72 74 4b 65 79 4d tore, m_partKeyM
f3a0: 69 6e 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f in, m_pIndexInfo
f3b0: 29 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 );....break;...c
f3c0: 61 73 65 20 6b 65 79 46 4b 45 71 3a 0d 0a 09 09 ase keyFKEq:....
f3d0: 2f 2f 20 cd e0 f7 e0 eb fc ed fb e9 20 ea eb fe // ......... ...
f3e0: f7 20 e7 e0 e4 e0 e5 f2 f1 ff 20 ef ee eb ed fb . ........ .....
f3f0: ec 20 ea eb fe f7 ee ec 2c 20 ef ee fd f2 ee ec . ......, ......
f400: f3 20 e2 ee e7 ec ee e6 ed ee 2c 20 e2 20 ed e5 . ........, . ..
f410: ec 20 e5 f9 e5 20 e8 20 ed ee ec e5 f0 20 e7 e0 . ... . ..... ..
f420: ef e8 f1 e8 2e 0d 0a 09 09 2f 2f 20 c8 20 f2 ee .........// . ..
f430: e3 e4 e0 20 e5 e3 ee 20 ed e0 e4 ee 20 e4 ee e4 ... ... .... ...
f440: e2 e8 e3 e0 f2 fc 20 f0 f3 f7 ea e0 ec e8 2e 0d ...... .........
f450: 0a 09 09 6e 65 77 20 74 63 46 75 6c 6c 4b 65 79 ...new tcFullKey
f460: 3c 74 6f 47 72 61 74 45 71 3e 28 70 53 74 61 72 <toGratEq>(pStar
f470: 74 46 75 6c 6c 4b 65 79 2c 20 6d 5f 66 75 6c 6c tFullKey, m_full
f480: 4b 65 79 45 71 2c 20 6d 5f 70 49 6e 64 65 78 49 KeyEq, m_pIndexI
f490: 6e 66 6f 29 3b 0d 0a 09 09 62 4d 6f 76 65 64 20 nfo);....bMoved
f4a0: 3d 20 4b 65 79 3c 74 6f 47 72 61 74 45 71 2c 20 = Key<toGratEq,
f4b0: 54 52 55 45 3e 3a 3a 4d 6f 76 65 28 6d 5f 63 75 TRUE>::Move(m_cu
f4c0: 72 73 6f 72 2e 73 74 6f 72 65 2c 20 6d 5f 66 75 rsor.store, m_fu
f4d0: 6c 6c 4b 65 79 45 71 2c 20 6d 5f 70 49 6e 64 65 llKeyEq, m_pInde
f4e0: 78 49 6e 66 6f 29 3b 0d 0a 09 09 62 72 65 61 6b xInfo);....break
f4f0: 3b 0d 0a 09 63 61 73 65 20 6b 65 79 46 4b 6e 45 ;...case keyFKnE
f500: 71 3a 0d 0a 09 09 2f 2f 20 cd e0 f7 e0 eb fc ed q:....// .......
f510: fb e9 20 ea eb fe f7 20 e7 e0 e4 e0 e5 f2 f1 ff .. .... ........
f520: 20 ef ee eb ed fb ec 20 ea eb fe f7 ee ec 2c 20 ...... ......,
f530: ef ee fd f2 ee ec f3 20 e2 ee e7 ec ee e6 ed ee ....... ........
f540: 2c 20 e2 20 ed e5 ec 20 e5 f9 e5 20 e8 20 ed ee , . ... ... . ..
f550: ec e5 f0 20 e7 e0 ef e8 f1 e8 2e 0d 0a 09 09 2f ... .........../
f560: 2f 20 c8 20 f2 ee e3 e4 e0 20 e5 e3 ee 20 ed e0 / . ..... ... ..
f570: e4 ee 20 e4 ee e4 e2 e8 e3 e0 f2 fc 20 f0 f3 f7 .. ......... ...
f580: ea e0 ec e8 2e 0d 0a 09 09 69 66 28 6d 5f 68 61 .........if(m_ha
f590: 72 64 46 4b 4d 69 6e 29 0d 0a 09 09 7b 0d 0a 09 rdFKMin)....{...
f5a0: 09 09 6e 65 77 20 74 63 46 75 6c 6c 4b 65 79 3c ..new tcFullKey<
f5b0: 74 6f 47 72 61 74 3e 28 70 53 74 61 72 74 46 75 toGrat>(pStartFu
f5c0: 6c 6c 4b 65 79 2c 20 6d 5f 66 75 6c 6c 4b 65 79 llKey, m_fullKey
f5d0: 4d 69 6e 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 Min, m_pIndexInf
f5e0: 6f 29 3b 0d 0a 09 09 09 62 4d 6f 76 65 64 20 3d o);.....bMoved =
f5f0: 20 4b 65 79 3c 74 6f 47 72 61 74 2c 20 54 52 55 Key<toGrat, TRU
f600: 45 3e 3a 3a 4d 6f 76 65 28 6d 5f 63 75 72 73 6f E>::Move(m_curso
f610: 72 2e 73 74 6f 72 65 2c 20 6d 5f 66 75 6c 6c 4b r.store, m_fullK
f620: 65 79 4d 69 6e 2c 20 6d 5f 70 49 6e 64 65 78 49 eyMin, m_pIndexI
f630: 6e 66 6f 29 3b 0d 0a 09 09 7d 0d 0a 09 09 65 6c nfo);....}....el
f640: 73 65 0d 0a 09 09 7b 0d 0a 09 09 09 6e 65 77 20 se....{.....new
f650: 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 47 72 61 74 tcFullKey<toGrat
f660: 45 71 3e 28 70 53 74 61 72 74 46 75 6c 6c 4b 65 Eq>(pStartFullKe
f670: 79 2c 20 6d 5f 66 75 6c 6c 4b 65 79 4d 69 6e 2c y, m_fullKeyMin,
f680: 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d m_pIndexInfo);.
f690: 0a 09 09 09 62 4d 6f 76 65 64 20 3d 20 4b 65 79 ....bMoved = Key
f6a0: 3c 74 6f 47 72 61 74 45 71 2c 20 54 52 55 45 3e <toGratEq, TRUE>
f6b0: 3a 3a 4d 6f 76 65 28 6d 5f 63 75 72 73 6f 72 2e ::Move(m_cursor.
f6c0: 73 74 6f 72 65 2c 20 6d 5f 66 75 6c 6c 4b 65 79 store, m_fullKey
f6d0: 4d 69 6e 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 Min, m_pIndexInf
f6e0: 6f 29 3b 0d 0a 09 09 7d 0d 0a 09 09 62 72 65 61 o);....}....brea
f6f0: 6b 3b 0d 0a 09 7d 0d 0a 09 0d 0a 09 69 66 28 70 k;...}......if(p
f700: 53 74 61 72 74 46 75 6c 6c 4b 65 79 29 0d 0a 09 StartFullKey)...
f710: 7b 0d 0a 09 09 69 66 28 62 4d 6f 76 65 64 29 0d {....if(bMoved).
f720: 0a 09 09 7b 0d 0a 09 09 09 2f 2f 20 ca eb fe f7 ...{.....// ....
f730: 20 e7 e0 e4 e0 ed 20 ef ee eb ed fb ec 20 ea eb ..... ...... ..
f740: fe f7 ee ec 2c 20 e2 ee e7 ec ee e6 ed ee 20 e2 ...., ........ .
f750: 20 ed e5 ec 20 ed ee ec e5 f0 20 e7 e0 ef e8 f1 ... ..... .....
f760: e8 20 e8 20 ed e0 e4 ee 20 e4 ee e4 e2 e8 e3 e0 . . .... .......
f770: f2 fc 20 e7 e0 ef e8 f1 fc 0d 0a 09 09 09 66 6f .. ...........fo
f780: 72 28 3b 3b 29 0d 0a 09 09 09 7b 0d 0a 09 09 09 r(;;).....{.....
f790: 09 69 66 28 74 65 73 74 43 6f 6e 73 74 72 61 69 .if(testConstrai
f7a0: 6e 74 3a 3a 64 6f 54 65 73 74 28 70 53 74 61 72 nt::doTest(pStar
f7b0: 74 46 75 6c 6c 4b 65 79 2c 20 6d 5f 63 75 72 73 tFullKey, m_curs
f7c0: 6f 72 29 29 0d 0a 09 09 09 09 09 62 72 65 61 6b or)).......break
f7d0: 3b 0d 0a 09 09 09 09 69 66 28 21 6d 5f 63 75 72 ;......if(!m_cur
f7e0: 73 6f 72 2e 73 74 6f 72 65 2e 47 6f 74 6f 28 6e sor.store.Goto(n
f7f0: 61 76 4e 65 78 74 2c 20 30 29 29 0d 0a 09 09 09 avNext, 0)).....
f800: 09 7b 0d 0a 09 09 09 09 09 62 4d 6f 76 65 64 20 .{.......bMoved
f810: 3d 20 46 41 4c 53 45 3b 0d 0a 09 09 09 09 09 62 = FALSE;.......b
f820: 72 65 61 6b 3b 0d 0a 09 09 09 09 7d 0d 0a 09 09 reak;......}....
f830: 09 7d 0d 0a 09 09 7d 0d 0a 09 09 64 65 6c 65 74 .}....}....delet
f840: 65 20 70 53 74 61 72 74 46 75 6c 6c 4b 65 79 3b e pStartFullKey;
f850: 0d 0a 09 7d 0d 0a 09 69 66 28 21 62 4d 6f 76 65 ...}...if(!bMove
f860: 64 29 0d 0a 09 09 72 65 74 75 72 6e 20 4e 55 4c d)....return NUL
f870: 4c 3b 0d 0a 09 2f 2f 20 d2 e5 ef e5 f0 fc 20 ea L;...// ...... .
f880: ee ed e5 f7 ed fb e9 20 ea eb fe f7 0d 0a 09 74 ....... .......t
f890: 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 2a 20 70 estConstraint* p
f8a0: 55 6e 74 69 6c 20 3d 20 4e 55 4c 4c 3b 0d 0a 09 Until = NULL;...
f8b0: 73 77 69 74 63 68 28 6d 5f 6d 61 78 4b 54 79 70 switch(m_maxKTyp
f8c0: 65 29 0d 0a 09 7b 0d 0a 09 63 61 73 65 20 6b 65 e)...{...case ke
f8d0: 79 50 4b 45 71 3a 0d 0a 09 09 70 55 6e 74 69 6c yPKEq:....pUntil
f8e0: 20 3d 20 6d 5f 70 50 4b 45 71 43 6f 6e 73 74 72 = m_pPKEqConstr
f8f0: 3b 0d 0a 09 09 6d 5f 70 50 4b 45 71 43 6f 6e 73 ;....m_pPKEqCons
f900: 74 72 20 3d 20 4e 55 4c 4c 3b 09 2f 2f 20 d7 f2 tr = NULL;.// ..
f910: ee e1 20 ed e5 20 f3 e4 e0 eb e8 eb e8 0d 0a 09 .. .. ..........
f920: 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 6b .break;...case k
f930: 65 79 50 4b 6e 45 71 3a 0d 0a 09 09 74 65 73 74 eyPKnEq:....test
f940: 43 6f 6e 73 74 72 61 69 6e 74 3a 3a 61 70 70 65 Constraint::appe
f950: 6e 64 28 70 55 6e 74 69 6c 2c 20 6d 5f 70 50 4b nd(pUntil, m_pPK
f960: 4d 61 78 43 6f 6e 73 74 72 2c 20 6d 5f 70 50 4b MaxConstr, m_pPK
f970: 45 71 43 6f 6e 73 74 72 29 3b 0d 0a 09 09 62 72 EqConstr);....br
f980: 65 61 6b 3b 0d 0a 09 63 61 73 65 20 6b 65 79 46 eak;...case keyF
f990: 4b 45 71 3a 0d 0a 09 09 6e 65 77 20 74 63 46 75 KEq:....new tcFu
f9a0: 6c 6c 4b 65 79 3c 74 6f 45 71 75 61 6c 3e 28 70 llKey<toEqual>(p
f9b0: 55 6e 74 69 6c 2c 20 6d 5f 66 75 6c 6c 4b 65 79 Until, m_fullKey
f9c0: 45 71 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f Eq, m_pIndexInfo
f9d0: 29 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 );....break;...c
f9e0: 61 73 65 20 6b 65 79 46 4b 6e 45 71 3a 0d 0a 09 ase keyFKnEq:...
f9f0: 09 69 66 28 6d 5f 68 61 72 64 46 4b 4d 61 78 29 .if(m_hardFKMax)
fa00: 0d 0a 09 09 09 6e 65 77 20 74 63 46 75 6c 6c 4b .....new tcFullK
fa10: 65 79 3c 74 6f 4c 65 73 73 3e 28 70 55 6e 74 69 ey<toLess>(pUnti
fa20: 6c 2c 20 6d 5f 66 75 6c 6c 4b 65 79 4d 61 78 2c l, m_fullKeyMax,
fa30: 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d m_pIndexInfo);.
fa40: 0a 09 09 65 6c 73 65 0d 0a 09 09 09 6e 65 77 20 ...else.....new
fa50: 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 4c 65 73 73 tcFullKey<toLess
fa60: 45 71 3e 28 70 55 6e 74 69 6c 2c 20 6d 5f 66 75 Eq>(pUntil, m_fu
fa70: 6c 6c 4b 65 79 4d 61 78 2c 20 6d 5f 70 49 6e 64 llKeyMax, m_pInd
fa80: 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 62 72 65 61 exInfo);....brea
fa90: 6b 3b 0d 0a 09 7d 0d 0a 0d 0a 09 66 6f 72 28 3b k;...}.....for(;
faa0: 3b 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 21 74 65 ;)...{....if(!te
fab0: 73 74 43 6f 6e 73 74 72 61 69 6e 74 3a 3a 64 6f stConstraint::do
fac0: 54 65 73 74 28 70 55 6e 74 69 6c 2c 20 6d 5f 63 Test(pUntil, m_c
fad0: 75 72 73 6f 72 29 29 0d 0a 09 09 09 62 72 65 61 ursor)).....brea
fae0: 6b 3b 0d 0a 09 09 69 66 28 74 65 73 74 43 6f 6e k;....if(testCon
faf0: 73 74 72 61 69 6e 74 3a 3a 64 6f 54 65 73 74 28 straint::doTest(
fb00: 6d 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 m_pAdditionalTes
fb10: 74 73 2c 20 6d 5f 63 75 72 73 6f 72 29 29 0d 0a ts, m_cursor))..
fb20: 09 09 7b 0d 0a 09 09 09 69 66 28 6d 5f 70 41 64 ..{.....if(m_pAd
fb30: 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 29 0d 0a ditionalTests)..
fb40: 09 09 09 09 72 65 74 75 72 6e 20 6e 65 77 20 69 ....return new i
fb50: 74 65 72 53 74 6f 70 4b 65 79 73 54 65 73 74 73 terStopKeysTests
fb60: 3c 6e 61 76 4e 65 78 74 3e 28 70 55 6e 74 69 6c <navNext>(pUntil
fb70: 2c 20 6d 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 , m_pAdditionalT
fb80: 65 73 74 73 29 3b 0d 0a 09 09 09 65 6c 73 65 0d ests);.....else.
fb90: 0a 09 09 09 09 72 65 74 75 72 6e 20 6e 65 77 20 .....return new
fba0: 69 74 65 72 53 74 6f 70 4b 65 79 73 4e 6f 54 65 iterStopKeysNoTe
fbb0: 73 74 73 3c 6e 61 76 4e 65 78 74 3e 28 70 55 6e sts<navNext>(pUn
fbc0: 74 69 6c 29 3b 0d 0a 09 09 7d 0d 0a 09 09 69 66 til);....}....if
fbd0: 28 21 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 (!m_cursor.store
fbe0: 2e 47 6f 74 6f 28 6e 61 76 4e 65 78 74 2c 20 30 .Goto(navNext, 0
fbf0: 29 29 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0a 09 )).....break;...
fc00: 7d 0d 0a 09 64 65 6c 65 74 65 20 70 55 6e 74 69 }...delete pUnti
fc10: 6c 3b 0d 0a 09 72 65 74 75 72 6e 20 4e 55 4c 4c l;...return NULL
fc20: 3b 0d 0a 7d 0d 0a 0d 0a 73 65 6c 65 63 74 5f 69 ;..}....select_i
fc30: 74 65 72 61 74 6f 72 2a 20 46 69 6c 74 65 72 4d terator* FilterM
fc40: 61 63 68 69 6e 65 3a 3a 47 6f 74 6f 4c 61 73 74 achine::GotoLast
fc50: 54 6f 46 69 72 73 74 28 29 0d 0a 7b 0d 0a 09 69 ToFirst()..{...i
fc60: 66 28 21 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 f(!m_cursor.stor
fc70: 65 2e 47 6f 74 6f 28 6e 61 76 4c 61 73 74 2c 20 e.Goto(navLast,
fc80: 30 29 29 0d 0a 09 09 72 65 74 75 72 6e 20 4e 55 0))....return NU
fc90: 4c 4c 3b 0d 0a 09 69 66 28 21 6d 5f 70 41 64 64 LL;...if(!m_pAdd
fca0: 69 74 69 6f 6e 61 6c 54 65 73 74 73 29 0d 0a 09 itionalTests)...
fcb0: 09 72 65 74 75 72 6e 20 6e 65 77 20 69 74 65 72 .return new iter
fcc0: 4e 6f 53 74 6f 70 4b 65 79 4e 6f 54 65 73 74 3c NoStopKeyNoTest<
fcd0: 6e 61 76 50 72 65 76 3e 3b 0d 0a 09 0d 0a 09 66 navPrev>;......f
fce0: 6f 72 28 3b 3b 29 0d 0a 09 7b 0d 0a 09 09 69 66 or(;;)...{....if
fcf0: 28 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 3a (testConstraint:
fd00: 3a 64 6f 54 65 73 74 28 6d 5f 70 41 64 64 69 74 :doTest(m_pAddit
fd10: 69 6f 6e 61 6c 54 65 73 74 73 2c 20 6d 5f 63 75 ionalTests, m_cu
fd20: 72 73 6f 72 29 29 0d 0a 09 09 09 72 65 74 75 72 rsor)).....retur
fd30: 6e 20 6e 65 77 20 69 74 65 72 4e 6f 53 74 6f 70 n new iterNoStop
fd40: 4b 65 79 73 54 65 73 74 73 3c 6e 61 76 50 72 65 KeysTests<navPre
fd50: 76 3e 28 6d 5f 70 41 64 64 69 74 69 6f 6e 61 6c v>(m_pAdditional
fd60: 54 65 73 74 73 29 3b 0d 0a 09 09 69 66 28 21 6d Tests);....if(!m
fd70: 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 2e 47 6f _cursor.store.Go
fd80: 74 6f 28 6e 61 76 50 72 65 76 2c 20 30 29 29 0d to(navPrev, 0)).
fd90: 0a 09 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b ....return NULL;
fda0: 0d 0a 09 7d 0d 0a 7d 0d 0a 0d 0a 73 65 6c 65 63 ...}..}....selec
fdb0: 74 5f 69 74 65 72 61 74 6f 72 2a 20 46 69 6c 74 t_iterator* Filt
fdc0: 65 72 4d 61 63 68 69 6e 65 3a 3a 47 6f 74 6f 4d erMachine::GotoM
fdd0: 61 78 54 6f 46 69 72 73 74 28 29 0d 0a 7b 0d 0a axToFirst()..{..
fde0: 09 42 4f 4f 4c 20 62 4d 6f 76 65 64 3b 0d 0a 09 .BOOL bMoved;...
fdf0: 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 2a 20 testConstraint*
fe00: 70 53 74 61 72 74 46 75 6c 6c 4b 65 79 20 3d 20 pStartFullKey =
fe10: 4e 55 4c 4c 3b 0d 0a 09 73 77 69 74 63 68 28 6d NULL;...switch(m
fe20: 5f 6d 61 78 4b 54 79 70 65 29 0d 0a 09 7b 0d 0a _maxKType)...{..
fe30: 09 2f 2f 20 c4 e0 ed ed fb e5 20 ea fd e9 f1 fb .// ...... .....
fe40: 20 ed e5 20 ec ee e6 e5 f2 20 e2 ee e7 ed e8 ea .. ..... ......
fe50: ed f3 f2 fc 2c 20 f2 e0 ea 20 ea e0 ea 20 e5 f1 ...., ... ... ..
fe60: eb e8 20 ee e4 ed e0 20 e8 e7 20 e3 f0 e0 ed e8 .. .... .. .....
fe70: f6 20 ee e1 ee e7 ed e0 f7 e5 ed e0 20 ea e0 ea . .......... ...
fe80: 0d 0a 09 2f 2f 20 ef ee ff e2 e8 e2 f8 e5 ff f1 ...// ..........
fe90: ff 20 e8 e7 20 f0 e0 e2 e5 ed f1 f2 e2 e0 2c 20 . .. .........,
fea0: f2 ee 20 ee e1 ff e7 e0 f2 e5 eb fc ed ee 20 e1 .. ........... .
feb0: f3 e4 e5 f2 20 e8 20 e2 f2 ee f0 e0 ff 20 e3 f0 .... . ...... ..
fec0: e0 ed e8 f6 e0 2e 0d 0a 09 2f 2f 63 61 73 65 20 .........//case
fed0: 6b 65 79 50 4b 45 71 3a 0d 0a 09 2f 2f 63 61 73 keyPKEq:...//cas
fee0: 65 20 6b 65 79 46 4b 45 71 3a 09 0d 0a 09 63 61 e keyFKEq:....ca
fef0: 73 65 20 6b 65 79 50 4b 6e 45 71 3a 0d 0a 09 09 se keyPKnEq:....
ff00: 69 66 28 6d 5f 68 61 72 64 50 4b 4d 61 78 29 0d if(m_hardPKMax).
ff10: 0a 09 09 09 62 4d 6f 76 65 64 20 3d 20 4b 65 79 ....bMoved = Key
ff20: 3c 74 6f 4c 65 73 73 2c 20 46 41 4c 53 45 3e 3a <toLess, FALSE>:
ff30: 3a 4d 6f 76 65 28 6d 5f 63 75 72 73 6f 72 2e 73 :Move(m_cursor.s
ff40: 74 6f 72 65 2c 20 6d 5f 70 61 72 74 4b 65 79 4d tore, m_partKeyM
ff50: 61 78 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f ax, m_pIndexInfo
ff60: 29 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 09 62 );....else.....b
ff70: 4d 6f 76 65 64 20 3d 20 4b 65 79 3c 74 6f 4c 65 Moved = Key<toLe
ff80: 73 73 45 71 2c 20 46 41 4c 53 45 3e 3a 3a 4d 6f ssEq, FALSE>::Mo
ff90: 76 65 28 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 ve(m_cursor.stor
ffa0: 65 2c 20 6d 5f 70 61 72 74 4b 65 79 4d 61 78 2c e, m_partKeyMax,
ffb0: 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d m_pIndexInfo);.
ffc0: 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 ...break;...case
ffd0: 20 6b 65 79 46 4b 6e 45 71 3a 0d 0a 09 09 2f 2f keyFKnEq:....//
ffe0: 20 cd e0 f7 e0 eb fc ed fb e9 20 ea eb fe f7 20 ......... ....
fff0: e7 e0 e4 e0 e5 f2 f1 ff 20 ef ee eb ed fb ec 20 ........ ......
10000 ea eb fe f7 ee ec 2c 20 ef ee fd f2 ee ec f3 20 ......, .......
10010 e2 ee e7 ec ee e6 ed ee 2c 20 e2 20 ed e5 ec 20 ........, . ...
10020 e5 f9 e5 20 e8 20 ed ee ec e5 f0 20 e7 e0 ef e8 ... . ..... ....
10030 f1 e8 2e 0d 0a 09 09 2f 2f 20 c8 20 f2 ee e3 e4 .......// . ....
10040 e0 20 e5 e3 ee 20 ed e0 e4 ee 20 e4 ee e4 e2 e8 . ... .... .....
10050 e3 e0 f2 fc 20 f0 f3 f7 ea e0 ec e8 2e 0d 0a 09 .... ...........
10060 09 69 66 28 6d 5f 68 61 72 64 46 4b 4d 61 78 29 .if(m_hardFKMax)
10070 0d 0a 09 09 7b 0d 0a 09 09 09 6e 65 77 20 74 63 ....{.....new tc
10080 46 75 6c 6c 4b 65 79 3c 74 6f 4c 65 73 73 3e 28 FullKey<toLess>(
10090 70 53 74 61 72 74 46 75 6c 6c 4b 65 79 2c 20 6d pStartFullKey, m
100a0 5f 66 75 6c 6c 4b 65 79 4d 61 78 2c 20 6d 5f 70 _fullKeyMax, m_p
100b0 49 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 09 IndexInfo);.....
100c0 62 4d 6f 76 65 64 20 3d 20 4b 65 79 3c 74 6f 4c bMoved = Key<toL
100d0 65 73 73 2c 20 54 52 55 45 3e 3a 3a 4d 6f 76 65 ess, TRUE>::Move
100e0 28 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 2c (m_cursor.store,
100f0 20 6d 5f 66 75 6c 6c 4b 65 79 4d 61 78 2c 20 6d m_fullKeyMax, m
10100 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 _pIndexInfo);...
10110 09 7d 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 7b 0d .}....else....{.
10120 0a 09 09 09 6e 65 77 20 74 63 46 75 6c 6c 4b 65 ....new tcFullKe
10130 79 3c 74 6f 4c 65 73 73 45 71 3e 28 70 53 74 61 y<toLessEq>(pSta
10140 72 74 46 75 6c 6c 4b 65 79 2c 20 6d 5f 66 75 6c rtFullKey, m_ful
10150 6c 4b 65 79 4d 61 78 2c 20 6d 5f 70 49 6e 64 65 lKeyMax, m_pInde
10160 78 49 6e 66 6f 29 3b 0d 0a 09 09 09 62 4d 6f 76 xInfo);.....bMov
10170 65 64 20 3d 20 4b 65 79 3c 74 6f 4c 65 73 73 45 ed = Key<toLessE
10180 71 2c 20 54 52 55 45 3e 3a 3a 4d 6f 76 65 28 6d q, TRUE>::Move(m
10190 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 2c 20 6d _cursor.store, m
101a0 5f 66 75 6c 6c 4b 65 79 4d 61 78 2c 20 6d 5f 70 _fullKeyMax, m_p
101b0 49 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 7d IndexInfo);....}
101c0 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 7d 0d 0a ....break;...}..
101d0 09 69 66 28 70 53 74 61 72 74 46 75 6c 6c 4b 65 .if(pStartFullKe
101e0 79 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 62 4d 6f y)...{....if(bMo
101f0 76 65 64 29 0d 0a 09 09 7b 0d 0a 09 09 09 2f 2f ved)....{.....//
10200 20 ca eb fe f7 20 e7 e0 e4 e0 ed 20 ef ee eb ed .... ..... ....
10210 fb ec 20 ea eb fe f7 ee ec 2c 20 e2 ee e7 ec ee .. ......, .....
10220 e6 ed ee 20 e2 20 ed e5 ec 20 ed ee ec e5 f0 20 ... . ... .....
10230 e7 e0 ef e8 f1 e8 20 e8 20 ed e0 e4 ee 20 e4 ee ...... . .... ..
10240 e4 e2 e8 e3 e0 f2 fc 20 e7 e0 ef e8 f1 fc 0d 0a ....... ........
10250 09 09 09 66 6f 72 28 3b 3b 29 0d 0a 09 09 09 7b ...for(;;).....{
10260 0d 0a 09 09 09 09 69 66 28 74 65 73 74 43 6f 6e ......if(testCon
10270 73 74 72 61 69 6e 74 3a 3a 64 6f 54 65 73 74 28 straint::doTest(
10280 70 53 74 61 72 74 46 75 6c 6c 4b 65 79 2c 20 6d pStartFullKey, m
10290 5f 63 75 72 73 6f 72 29 29 0d 0a 09 09 09 09 09 _cursor)).......
102a0 62 72 65 61 6b 3b 0d 0a 09 09 09 09 69 66 28 21 break;......if(!
102b0 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 2e 47 m_cursor.store.G
102c0 6f 74 6f 28 6e 61 76 50 72 65 76 2c 20 30 29 29 oto(navPrev, 0))
102d0 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 62 4d ......{.......bM
102e0 6f 76 65 64 20 3d 20 46 41 4c 53 45 3b 0d 0a 09 oved = FALSE;...
102f0 09 09 09 09 62 72 65 61 6b 3b 3b 0d 0a 09 09 09 ....break;;.....
10300 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09 .}.....}....}...
10310 09 64 65 6c 65 74 65 20 70 53 74 61 72 74 46 75 .delete pStartFu
10320 6c 6c 4b 65 79 3b 0d 0a 09 7d 0d 0a 0d 0a 09 69 llKey;...}.....i
10330 66 28 21 62 4d 6f 76 65 64 29 0d 0a 09 09 72 65 f(!bMoved)....re
10340 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 0d 0a 09 turn NULL;......
10350 69 66 28 21 6d 5f 70 41 64 64 69 74 69 6f 6e 61 if(!m_pAdditiona
10360 6c 54 65 73 74 73 29 0d 0a 09 09 72 65 74 75 72 lTests)....retur
10370 6e 20 6e 65 77 20 69 74 65 72 4e 6f 53 74 6f 70 n new iterNoStop
10380 4b 65 79 4e 6f 54 65 73 74 3c 6e 61 76 50 72 65 KeyNoTest<navPre
10390 76 3e 3b 0d 0a 09 0d 0a 09 66 6f 72 28 3b 3b 29 v>;......for(;;)
103a0 0d 0a 09 7b 0d 0a 09 09 69 66 28 74 65 73 74 43 ...{....if(testC
103b0 6f 6e 73 74 72 61 69 6e 74 3a 3a 64 6f 54 65 73 onstraint::doTes
103c0 74 28 6d 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 t(m_pAdditionalT
103d0 65 73 74 73 2c 20 6d 5f 63 75 72 73 6f 72 29 29 ests, m_cursor))
103e0 0d 0a 09 09 09 72 65 74 75 72 6e 20 6e 65 77 20 .....return new
103f0 69 74 65 72 4e 6f 53 74 6f 70 4b 65 79 73 54 65 iterNoStopKeysTe
10400 73 74 73 3c 6e 61 76 50 72 65 76 3e 28 6d 5f 70 sts<navPrev>(m_p
10410 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 29 AdditionalTests)
10420 3b 0d 0a 09 09 69 66 28 21 6d 5f 63 75 72 73 6f ;....if(!m_curso
10430 72 2e 73 74 6f 72 65 2e 47 6f 74 6f 28 6e 61 76 r.store.Goto(nav
10440 50 72 65 76 2c 20 30 29 29 0d 0a 09 09 09 72 65 Prev, 0)).....re
10450 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 7d 0d 0a turn NULL;...}..
10460 7d 0d 0a 0d 0a 73 65 6c 65 63 74 5f 69 74 65 72 }....select_iter
10470 61 74 6f 72 2a 20 46 69 6c 74 65 72 4d 61 63 68 ator* FilterMach
10480 69 6e 65 3a 3a 47 6f 74 6f 4c 61 73 74 54 6f 4d ine::GotoLastToM
10490 69 6e 28 29 0d 0a 7b 0d 0a 09 69 66 28 21 6d 5f in()..{...if(!m_
104a0 63 75 72 73 6f 72 2e 73 74 6f 72 65 2e 47 6f 74 cursor.store.Got
104b0 6f 28 6e 61 76 4c 61 73 74 2c 20 30 29 29 0d 0a o(navLast, 0))..
104c0 09 09 72 65 74 75 72 6e 20 4e 55 4c 4c 3b 0d 0a ..return NULL;..
104d0 09 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 2a .testConstraint*
104e0 20 70 55 6e 74 69 6c 20 3d 20 4e 55 4c 4c 3b 0d pUntil = NULL;.
104f0 0a 09 73 77 69 74 63 68 28 6d 5f 6d 69 6e 4b 54 ..switch(m_minKT
10500 79 70 65 29 0d 0a 09 7b 0d 0a 09 63 61 73 65 20 ype)...{...case
10510 6b 65 79 50 4b 45 71 3a 0d 0a 09 09 70 55 6e 74 keyPKEq:....pUnt
10520 69 6c 20 3d 20 6d 5f 70 50 4b 45 71 43 6f 6e 73 il = m_pPKEqCons
10530 74 72 3b 0d 0a 09 09 6d 5f 70 50 4b 45 71 43 6f tr;....m_pPKEqCo
10540 6e 73 74 72 20 3d 20 4e 55 4c 4c 3b 09 2f 2f 20 nstr = NULL;.//
10550 d7 f2 ee e1 20 ed e5 20 f3 e4 e0 eb e8 eb e8 0d .... .. ........
10560 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 ...break;...case
10570 20 6b 65 79 50 4b 6e 45 71 3a 0d 0a 09 09 74 65 keyPKnEq:....te
10580 73 74 43 6f 6e 73 74 72 61 69 6e 74 3a 3a 61 70 stConstraint::ap
10590 70 65 6e 64 28 70 55 6e 74 69 6c 2c 20 6d 5f 70 pend(pUntil, m_p
105a0 50 4b 4d 69 6e 43 6f 6e 73 74 72 2c 20 6d 5f 70 PKMinConstr, m_p
105b0 50 4b 45 71 43 6f 6e 73 74 72 29 3b 0d 0a 09 09 PKEqConstr);....
105c0 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 6b 65 break;...case ke
105d0 79 46 4b 45 71 3a 0d 0a 09 09 6e 65 77 20 74 63 yFKEq:....new tc
105e0 46 75 6c 6c 4b 65 79 3c 74 6f 45 71 75 61 6c 3e FullKey<toEqual>
105f0 28 70 55 6e 74 69 6c 2c 20 6d 5f 66 75 6c 6c 4b (pUntil, m_fullK
10600 65 79 45 71 2c 20 6d 5f 70 49 6e 64 65 78 49 6e eyEq, m_pIndexIn
10610 66 6f 29 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a fo);....break;..
10620 09 63 61 73 65 20 6b 65 79 46 4b 6e 45 71 3a 0d .case keyFKnEq:.
10630 0a 09 09 69 66 28 6d 5f 68 61 72 64 46 4b 4d 69 ...if(m_hardFKMi
10640 6e 29 0d 0a 09 09 09 6e 65 77 20 74 63 46 75 6c n).....new tcFul
10650 6c 4b 65 79 3c 74 6f 47 72 61 74 3e 28 70 55 6e lKey<toGrat>(pUn
10660 74 69 6c 2c 20 6d 5f 66 75 6c 6c 4b 65 79 4d 69 til, m_fullKeyMi
10670 6e 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 n, m_pIndexInfo)
10680 3b 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 09 6e 65 ;....else.....ne
10690 77 20 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 47 72 w tcFullKey<toGr
106a0 61 74 45 71 3e 28 70 55 6e 74 69 6c 2c 20 6d 5f atEq>(pUntil, m_
106b0 66 75 6c 6c 4b 65 79 4d 69 6e 2c 20 6d 5f 70 49 fullKeyMin, m_pI
106c0 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 62 72 ndexInfo);....br
106d0 65 61 6b 3b 0d 0a 09 7d 0d 0a 0d 0a 09 66 6f 72 eak;...}.....for
106e0 28 3b 3b 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 21 (;;)...{....if(!
106f0 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 3a 3a testConstraint::
10700 64 6f 54 65 73 74 28 70 55 6e 74 69 6c 2c 20 6d doTest(pUntil, m
10710 5f 63 75 72 73 6f 72 29 29 0d 0a 09 09 09 62 72 _cursor)).....br
10720 65 61 6b 3b 0d 0a 09 09 69 66 28 74 65 73 74 43 eak;....if(testC
10730 6f 6e 73 74 72 61 69 6e 74 3a 3a 64 6f 54 65 73 onstraint::doTes
10740 74 28 6d 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 t(m_pAdditionalT
10750 65 73 74 73 2c 20 6d 5f 63 75 72 73 6f 72 29 29 ests, m_cursor))
10760 0d 0a 09 09 7b 0d 0a 09 09 09 69 66 28 6d 5f 70 ....{.....if(m_p
10770 41 64 64 69 74 69 6f 6e 61 6c 54 65 73 74 73 29 AdditionalTests)
10780 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 6e 65 77 ......return new
10790 20 69 74 65 72 53 74 6f 70 4b 65 79 73 54 65 73 iterStopKeysTes
107a0 74 73 3c 6e 61 76 50 72 65 76 3e 28 70 55 6e 74 ts<navPrev>(pUnt
107b0 69 6c 2c 20 6d 5f 70 41 64 64 69 74 69 6f 6e 61 il, m_pAdditiona
107c0 6c 54 65 73 74 73 29 3b 0d 0a 09 09 09 65 6c 73 lTests);.....els
107d0 65 0d 0a 09 09 09 09 72 65 74 75 72 6e 20 6e 65 e......return ne
107e0 77 20 69 74 65 72 53 74 6f 70 4b 65 79 73 4e 6f w iterStopKeysNo
107f0 54 65 73 74 73 3c 6e 61 76 50 72 65 76 3e 28 70 Tests<navPrev>(p
10800 55 6e 74 69 6c 29 3b 0d 0a 09 09 7d 0d 0a 09 09 Until);....}....
10810 69 66 28 21 6d 5f 63 75 72 73 6f 72 2e 73 74 6f if(!m_cursor.sto
10820 72 65 2e 47 6f 74 6f 28 6e 61 76 50 72 65 76 2c re.Goto(navPrev,
10830 20 30 29 29 0d 0a 09 09 09 62 72 65 61 6b 3b 0d 0)).....break;.
10840 0a 09 7d 0d 0a 09 64 65 6c 65 74 65 20 70 55 6e ..}...delete pUn
10850 74 69 6c 3b 0d 0a 09 72 65 74 75 72 6e 20 4e 55 til;...return NU
10860 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 73 65 6c 65 63 74 LL;..}....select
10870 5f 69 74 65 72 61 74 6f 72 2a 20 46 69 6c 74 65 _iterator* Filte
10880 72 4d 61 63 68 69 6e 65 3a 3a 47 6f 74 6f 4d 61 rMachine::GotoMa
10890 78 54 6f 4d 69 6e 28 29 0d 0a 7b 0d 0a 09 42 4f xToMin()..{...BO
108a0 4f 4c 20 62 4d 6f 76 65 64 3b 0d 0a 09 74 65 73 OL bMoved;...tes
108b0 74 43 6f 6e 73 74 72 61 69 6e 74 2a 20 70 53 74 tConstraint* pSt
108c0 61 72 74 46 75 6c 6c 4b 65 79 20 3d 20 4e 55 4c artFullKey = NUL
108d0 4c 3b 0d 0a 09 73 77 69 74 63 68 28 6d 5f 6d 61 L;...switch(m_ma
108e0 78 4b 54 79 70 65 29 0d 0a 09 7b 0d 0a 09 63 61 xKType)...{...ca
108f0 73 65 20 6b 65 79 50 4b 45 71 3a 0d 0a 09 09 62 se keyPKEq:....b
10900 4d 6f 76 65 64 20 3d 20 4b 65 79 3c 74 6f 4c 65 Moved = Key<toLe
10910 73 73 45 71 2c 20 46 41 4c 53 45 3e 3a 3a 4d 6f ssEq, FALSE>::Mo
10920 76 65 28 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 ve(m_cursor.stor
10930 65 2c 20 6d 5f 70 61 72 74 4b 65 79 45 71 2c 20 e, m_partKeyEq,
10940 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a m_pIndexInfo);..
10950 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 ..break;...case
10960 6b 65 79 50 4b 6e 45 71 3a 0d 0a 09 09 69 66 28 keyPKnEq:....if(
10970 6d 5f 68 61 72 64 50 4b 4d 61 78 29 0d 0a 09 09 m_hardPKMax)....
10980 09 62 4d 6f 76 65 64 20 3d 20 4b 65 79 3c 74 6f .bMoved = Key<to
10990 4c 65 73 73 2c 20 46 41 4c 53 45 3e 3a 3a 4d 6f Less, FALSE>::Mo
109a0 76 65 28 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 ve(m_cursor.stor
109b0 65 2c 20 6d 5f 70 61 72 74 4b 65 79 4d 61 78 2c e, m_partKeyMax,
109c0 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d m_pIndexInfo);.
109d0 0a 09 09 65 6c 73 65 0d 0a 09 09 09 62 4d 6f 76 ...else.....bMov
109e0 65 64 20 3d 20 4b 65 79 3c 74 6f 4c 65 73 73 45 ed = Key<toLessE
109f0 71 2c 20 46 41 4c 53 45 3e 3a 3a 4d 6f 76 65 28 q, FALSE>::Move(
10a00 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 2c 20 m_cursor.store,
10a10 6d 5f 70 61 72 74 4b 65 79 4d 61 78 2c 20 6d 5f m_partKeyMax, m_
10a20 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 pIndexInfo);....
10a30 62 72 65 61 6b 3b 0d 0a 09 63 61 73 65 20 6b 65 break;...case ke
10a40 79 46 4b 45 71 3a 0d 0a 09 09 2f 2f 20 cd e0 f7 yFKEq:....// ...
10a50 e0 eb fc ed fb e9 20 ea eb fe f7 20 e7 e0 e4 e0 ...... .... ....
10a60 e5 f2 f1 ff 20 ef ee eb ed fb ec 20 ea eb fe f7 .... ...... ....
10a70 ee ec 2c 20 ef ee fd f2 ee ec f3 20 e2 ee e7 ec .., ....... ....
10a80 ee e6 ed ee 2c 20 e2 20 ed e5 ec 20 e5 f9 e5 20 ...., . ... ...
10a90 e8 20 ed ee ec e5 f0 20 e7 e0 ef e8 f1 e8 2e 0d . ..... ........
10aa0 0a 09 09 2f 2f 20 c8 20 f2 ee e3 e4 e0 20 e5 e3 ...// . ..... ..
10ab0 ee 20 ed e0 e4 ee 20 e4 ee e4 e2 e8 e3 e0 f2 fc . .... .........
10ac0 20 f0 f3 f7 ea e0 ec e8 2e 0d 0a 09 09 6e 65 77 ............new
10ad0 20 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 4c 65 73 tcFullKey<toLes
10ae0 73 45 71 3e 28 70 53 74 61 72 74 46 75 6c 6c 4b sEq>(pStartFullK
10af0 65 79 2c 20 6d 5f 66 75 6c 6c 4b 65 79 45 71 2c ey, m_fullKeyEq,
10b00 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d m_pIndexInfo);.
10b10 0a 09 09 62 4d 6f 76 65 64 20 3d 20 4b 65 79 3c ...bMoved = Key<
10b20 74 6f 4c 65 73 73 45 71 2c 20 54 52 55 45 3e 3a toLessEq, TRUE>:
10b30 3a 4d 6f 76 65 28 6d 5f 63 75 72 73 6f 72 2e 73 :Move(m_cursor.s
10b40 74 6f 72 65 2c 20 6d 5f 66 75 6c 6c 4b 65 79 45 tore, m_fullKeyE
10b50 71 2c 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 q, m_pIndexInfo)
10b60 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 ;....break;...ca
10b70 73 65 20 6b 65 79 46 4b 6e 45 71 3a 0d 0a 09 09 se keyFKnEq:....
10b80 2f 2f 20 cd e0 f7 e0 eb fc ed fb e9 20 ea eb fe // ......... ...
10b90 f7 20 e7 e0 e4 e0 e5 f2 f1 ff 20 ef ee eb ed fb . ........ .....
10ba0 ec 20 ea eb fe f7 ee ec 2c 20 ef ee fd f2 ee ec . ......, ......
10bb0 f3 20 e2 ee e7 ec ee e6 ed ee 2c 20 e2 20 ed e5 . ........, . ..
10bc0 ec 20 e5 f9 e5 20 e8 20 ed ee ec e5 f0 20 e7 e0 . ... . ..... ..
10bd0 ef e8 f1 e8 2e 0d 0a 09 09 2f 2f 20 c8 20 f2 ee .........// . ..
10be0 e3 e4 e0 20 e5 e3 ee 20 ed e0 e4 ee 20 e4 ee e4 ... ... .... ...
10bf0 e2 e8 e3 e0 f2 fc 20 f0 f3 f7 ea e0 ec e8 2e 0d ...... .........
10c00 0a 09 09 69 66 28 6d 5f 68 61 72 64 46 4b 4d 61 ...if(m_hardFKMa
10c10 78 29 0d 0a 09 09 7b 0d 0a 09 09 09 6e 65 77 20 x)....{.....new
10c20 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 4c 65 73 73 tcFullKey<toLess
10c30 3e 28 70 53 74 61 72 74 46 75 6c 6c 4b 65 79 2c >(pStartFullKey,
10c40 20 6d 5f 66 75 6c 6c 4b 65 79 4d 61 78 2c 20 6d m_fullKeyMax, m
10c50 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 _pIndexInfo);...
10c60 09 09 62 4d 6f 76 65 64 20 3d 20 4b 65 79 3c 74 ..bMoved = Key<t
10c70 6f 4c 65 73 73 2c 20 54 52 55 45 3e 3a 3a 4d 6f oLess, TRUE>::Mo
10c80 76 65 28 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 ve(m_cursor.stor
10c90 65 2c 20 6d 5f 66 75 6c 6c 4b 65 79 4d 61 78 2c e, m_fullKeyMax,
10ca0 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d m_pIndexInfo);.
10cb0 0a 09 09 7d 0d 0a 09 09 65 6c 73 65 0d 0a 09 09 ...}....else....
10cc0 7b 0d 0a 09 09 09 6e 65 77 20 74 63 46 75 6c 6c {.....new tcFull
10cd0 4b 65 79 3c 74 6f 4c 65 73 73 45 71 3e 28 70 53 Key<toLessEq>(pS
10ce0 74 61 72 74 46 75 6c 6c 4b 65 79 2c 20 6d 5f 66 tartFullKey, m_f
10cf0 75 6c 6c 4b 65 79 4d 61 78 2c 20 6d 5f 70 49 6e ullKeyMax, m_pIn
10d00 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 09 62 4d dexInfo);.....bM
10d10 6f 76 65 64 20 3d 20 4b 65 79 3c 74 6f 4c 65 73 oved = Key<toLes
10d20 73 45 71 2c 20 54 52 55 45 3e 3a 3a 4d 6f 76 65 sEq, TRUE>::Move
10d30 28 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 2c (m_cursor.store,
10d40 20 6d 5f 66 75 6c 6c 4b 65 79 4d 61 78 2c 20 6d m_fullKeyMax, m
10d50 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 _pIndexInfo);...
10d60 09 7d 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 7d .}....break;...}
10d70 0d 0a 09 69 66 28 70 53 74 61 72 74 46 75 6c 6c ...if(pStartFull
10d80 4b 65 79 29 0d 0a 09 7b 0d 0a 09 09 69 66 28 62 Key)...{....if(b
10d90 4d 6f 76 65 64 29 0d 0a 09 09 7b 0d 0a 09 09 09 Moved)....{.....
10da0 2f 2f 20 ca eb fe f7 20 e7 e0 e4 e0 ed 20 ef ee // .... ..... ..
10db0 eb ed fb ec 20 ea eb fe f7 ee ec 2c 20 e2 ee e7 .... ......, ...
10dc0 ec ee e6 ed ee 20 e2 20 ed e5 ec 20 ed ee ec e5 ..... . ... ....
10dd0 f0 20 e7 e0 ef e8 f1 e8 20 e8 20 ed e0 e4 ee 20 . ...... . ....
10de0 e4 ee e4 e2 e8 e3 e0 f2 fc 20 e7 e0 ef e8 f1 fc ......... ......
10df0 0d 0a 09 09 09 66 6f 72 28 3b 3b 29 0d 0a 09 09 .....for(;;)....
10e00 09 7b 0d 0a 09 09 09 09 69 66 28 74 65 73 74 43 .{......if(testC
10e10 6f 6e 73 74 72 61 69 6e 74 3a 3a 64 6f 54 65 73 onstraint::doTes
10e20 74 28 70 53 74 61 72 74 46 75 6c 6c 4b 65 79 2c t(pStartFullKey,
10e30 20 6d 5f 63 75 72 73 6f 72 29 29 0d 0a 09 09 09 m_cursor)).....
10e40 09 09 62 72 65 61 6b 3b 0d 0a 09 09 09 09 69 66 ..break;......if
10e50 28 21 6d 5f 63 75 72 73 6f 72 2e 73 74 6f 72 65 (!m_cursor.store
10e60 2e 47 6f 74 6f 28 6e 61 76 50 72 65 76 2c 20 30 .Goto(navPrev, 0
10e70 29 29 0d 0a 09 09 09 09 7b 0d 0a 09 09 09 09 09 ))......{.......
10e80 62 4d 6f 76 65 64 20 3d 20 46 41 4c 53 45 3b 0d bMoved = FALSE;.
10e90 0a 09 09 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 ......break;....
10ea0 09 09 7d 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a ..}.....}....}..
10eb0 09 09 64 65 6c 65 74 65 20 70 53 74 61 72 74 46 ..delete pStartF
10ec0 75 6c 6c 4b 65 79 3b 0d 0a 09 7d 0d 0a 09 69 66 ullKey;...}...if
10ed0 28 21 62 4d 6f 76 65 64 29 0d 0a 09 09 72 65 74 (!bMoved)....ret
10ee0 75 72 6e 20 4e 55 4c 4c 3b 0d 0a 09 2f 2f 20 d2 urn NULL;...// .
10ef0 e5 ef e5 f0 fc 20 ea ee ed e5 f7 ed fb e9 20 ea ..... ........ .
10f00 eb fe f7 0d 0a 09 74 65 73 74 43 6f 6e 73 74 72 ......testConstr
10f10 61 69 6e 74 2a 20 70 55 6e 74 69 6c 20 3d 20 4e aint* pUntil = N
10f20 55 4c 4c 3b 0d 0a 09 73 77 69 74 63 68 28 6d 5f ULL;...switch(m_
10f30 6d 69 6e 4b 54 79 70 65 29 0d 0a 09 7b 0d 0a 09 minKType)...{...
10f40 63 61 73 65 20 6b 65 79 50 4b 45 71 3a 0d 0a 09 case keyPKEq:...
10f50 09 70 55 6e 74 69 6c 20 3d 20 6d 5f 70 50 4b 45 .pUntil = m_pPKE
10f60 71 43 6f 6e 73 74 72 3b 0d 0a 09 09 6d 5f 70 50 qConstr;....m_pP
10f70 4b 45 71 43 6f 6e 73 74 72 20 3d 20 4e 55 4c 4c KEqConstr = NULL
10f80 3b 09 2f 2f 20 d7 f2 ee e1 20 ed e5 20 f3 e4 e0 ;.// .... .. ...
10f90 eb e8 eb e8 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a ........break;..
10fa0 09 63 61 73 65 20 6b 65 79 50 4b 6e 45 71 3a 0d .case keyPKnEq:.
10fb0 0a 09 09 74 65 73 74 43 6f 6e 73 74 72 61 69 6e ...testConstrain
10fc0 74 3a 3a 61 70 70 65 6e 64 28 70 55 6e 74 69 6c t::append(pUntil
10fd0 2c 20 6d 5f 70 50 4b 4d 69 6e 43 6f 6e 73 74 72 , m_pPKMinConstr
10fe0 2c 20 6d 5f 70 50 4b 45 71 43 6f 6e 73 74 72 29 , m_pPKEqConstr)
10ff0 3b 0d 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 63 61 ;....break;...ca
11000 73 65 20 6b 65 79 46 4b 45 71 3a 0d 0a 09 09 6e se keyFKEq:....n
11010 65 77 20 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 45 ew tcFullKey<toE
11020 71 75 61 6c 3e 28 70 55 6e 74 69 6c 2c 20 6d 5f qual>(pUntil, m_
11030 66 75 6c 6c 4b 65 79 45 71 2c 20 6d 5f 70 49 6e fullKeyEq, m_pIn
11040 64 65 78 49 6e 66 6f 29 3b 0d 0a 09 09 62 72 65 dexInfo);....bre
11050 61 6b 3b 0d 0a 09 63 61 73 65 20 6b 65 79 46 4b ak;...case keyFK
11060 6e 45 71 3a 0d 0a 09 09 69 66 28 6d 5f 68 61 72 nEq:....if(m_har
11070 64 46 4b 4d 69 6e 29 0d 0a 09 09 09 6e 65 77 20 dFKMin).....new
11080 74 63 46 75 6c 6c 4b 65 79 3c 74 6f 47 72 61 74 tcFullKey<toGrat
11090 3e 28 70 55 6e 74 69 6c 2c 20 6d 5f 66 75 6c 6c >(pUntil, m_full
110a0 4b 65 79 4d 69 6e 2c 20 6d 5f 70 49 6e 64 65 78 KeyMin, m_pIndex
110b0 49 6e 66 6f 29 3b 0d 0a 09 09 65 6c 73 65 0d 0a Info);....else..
110c0 09 09 09 6e 65 77 20 74 63 46 75 6c 6c 4b 65 79 ...new tcFullKey
110d0 3c 74 6f 47 72 61 74 45 71 3e 28 70 55 6e 74 69 <toGratEq>(pUnti
110e0 6c 2c 20 6d 5f 66 75 6c 6c 4b 65 79 4d 69 6e 2c l, m_fullKeyMin,
110f0 20 6d 5f 70 49 6e 64 65 78 49 6e 66 6f 29 3b 0d m_pIndexInfo);.
11100 0a 09 09 62 72 65 61 6b 3b 0d 0a 09 7d 0d 0a 0d ...break;...}...
11110 0a 09 66 6f 72 28 3b 3b 29 0d 0a 09 7b 0d 0a 09 ..for(;;)...{...
11120 09 69 66 28 21 74 65 73 74 43 6f 6e 73 74 72 61 .if(!testConstra
11130 69 6e 74 3a 3a 64 6f 54 65 73 74 28 70 55 6e 74 int::doTest(pUnt
11140 69 6c 2c 20 6d 5f 63 75 72 73 6f 72 29 29 0d 0a il, m_cursor))..
11150 09 09 09 62 72 65 61 6b 3b 0d 0a 09 09 69 66 28 ...break;....if(
11160 74 65 73 74 43 6f 6e 73 74 72 61 69 6e 74 3a 3a testConstraint::
11170 64 6f 54 65 73 74 28 6d 5f 70 41 64 64 69 74 69 doTest(m_pAdditi
11180 6f 6e 61 6c 54 65 73 74 73 2c 20 6d 5f 63 75 72 onalTests, m_cur
11190 73 6f 72 29 29 0d 0a 09 09 7b 0d 0a 09 09 09 69 sor))....{.....i
111a0 66 28 6d 5f 70 41 64 64 69 74 69 6f 6e 61 6c 54 f(m_pAdditionalT
111b0 65 73 74 73 29 0d 0a 09 09 09 09 72 65 74 75 72 ests)......retur
111c0 6e 20 6e 65 77 20 69 74 65 72 53 74 6f 70 4b 65 n new iterStopKe
111d0 79 73 54 65 73 74 73 3c 6e 61 76 50 72 65 76 3e ysTests<navPrev>
111e0 28 70 55 6e 74 69 6c 2c 20 6d 5f 70 41 64 64 69 (pUntil, m_pAddi
111f0 74 69 6f 6e 61 6c 54 65 73 74 73 29 3b 0d 0a 09 tionalTests);...
11200 09 09 65 6c 73 65 0d 0a 09 09 09 09 72 65 74 75 ..else......retu
11210 72 6e 20 6e 65 77 20 69 74 65 72 53 74 6f 70 4b rn new iterStopK
11220 65 79 73 4e 6f 54 65 73 74 73 3c 6e 61 76 50 72 eysNoTests<navPr
11230 65 76 3e 28 70 55 6e 74 69 6c 29 3b 0d 0a 09 09 ev>(pUntil);....
11240 7d 0d 0a 09 09 69 66 28 21 6d 5f 63 75 72 73 6f }....if(!m_curso
11250 72 2e 73 74 6f 72 65 2e 47 6f 74 6f 28 6e 61 76 r.store.Goto(nav
11260 50 72 65 76 2c 20 30 29 29 0d 0a 09 09 09 62 72 Prev, 0)).....br
11270 65 61 6b 3b 0d 0a 09 7d 0d 0a 09 64 65 6c 65 74 eak;...}...delet
11280 65 20 70 55 6e 74 69 6c 3b 0d 0a 09 72 65 74 75 e pUntil;...retu
11290 72 6e 20 4e 55 4c 4c 3b 0d 0a 7d 0d 0a 0d 0a 73 rn NULL;..}....s
112a0 65 6c 65 63 74 5f 69 74 65 72 61 74 6f 72 2a 20 elect_iterator*
112b0 46 69 6c 74 65 72 4d 61 63 68 69 6e 65 3a 3a 47 FilterMachine::G
112c0 6f 74 6f 54 6f 52 6f 77 28 29 0d 0a 7b 0d 0a 09 otoToRow()..{...
112d0 63 68 61 72 20 72 65 63 6e 6f 5b 73 69 7a 65 6f char recno[sizeo
112e0 66 28 43 52 65 63 41 64 64 72 29 5d 3b 0d 0a 09 f(CRecAddr)];...
112f0 43 52 65 63 41 64 64 72 2a 20 70 41 64 64 72 20 CRecAddr* pAddr
11300 3d 20 28 43 52 65 63 41 64 64 72 2a 29 72 65 63 = (CRecAddr*)rec
11310 6e 6f 3b 0d 0a 09 70 41 64 64 72 2d 3e 6d 5f 70 no;...pAddr->m_p
11320 6f 73 20 3d 20 6d 5f 72 65 63 4e 6f 3b 0d 0a 09 os = m_recNo;...
11330 70 41 64 64 72 2d 3e 64 61 74 61 20 3d 20 30 3b pAddr->data = 0;
11340 0d 0a 0d 0a 09 69 66 28 21 6d 5f 63 75 72 73 6f .....if(!m_curso
11350 72 2e 73 74 6f 72 65 2e 47 6f 74 6f 28 70 41 64 r.store.Goto(pAd
11360 64 72 2c 20 30 29 29 0d 0a 09 09 72 65 74 75 72 dr, 0))....retur
11370 6e 20 4e 55 4c 4c 3b 0d 0a 09 69 66 28 21 74 65 n NULL;...if(!te
11380 73 74 43 6f 6e 73 74 72 61 69 6e 74 3a 3a 64 6f stConstraint::do
11390 54 65 73 74 28 6d 5f 70 41 64 64 69 74 69 6f 6e Test(m_pAddition
113a0 61 6c 54 65 73 74 73 2c 20 6d 5f 63 75 72 73 6f alTests, m_curso
113b0 72 29 29 0d 0a 09 09 72 65 74 75 72 6e 20 4e 55 r))....return NU
113c0 4c 4c 3b 0d 0a 09 0d 0a 09 73 74 72 75 63 74 20 LL;......struct
113d0 69 74 65 72 52 6f 77 20 3a 20 73 65 6c 65 63 74 iterRow : select
113e0 5f 69 74 65 72 61 74 6f 72 20 0d 0a 09 7b 0d 0a _iterator ...{..
113f0 09 09 76 69 72 74 75 61 6c 20 42 4f 4f 4c 20 64 ..virtual BOOL d
11400 6f 4e 65 78 74 28 63 75 72 73 6f 72 5f 64 61 74 oNext(cursor_dat
11410 61 26 2c 20 63 6f 6e 73 74 20 43 56 74 61 62 49 a&, const CVtabI
11420 6e 66 6f 26 29 0d 0a 09 09 7b 0d 0a 09 09 09 72 nfo&)....{.....r
11430 65 74 75 72 6e 20 46 41 4c 53 45 3b 0d 0a 09 09 eturn FALSE;....
11440 7d 0d 0a 09 7d 3b 0d 0a 09 72 65 74 75 72 6e 20 }...};...return
11450 6e 65 77 20 69 74 65 72 52 6f 77 3b 0d 0a 7d 0d new iterRow;..}.
11460 0a .