Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

835 lines
340 KiB

  1. {\rtf1\ansi\ansicpg1252\uc1 \deff0\deflang1033\deflangfe1033{\fonttbl{\f0\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f1\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f2\fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;}{\f3\froman\fcharset2\fprq2{\*\panose 05050102010706020507}Symbol;}{\f4\froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times;}{\f5\fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Helvetica;}{\f6\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Courier;}{\f7\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Geneva;}{\f8\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Tms Rmn;}{\f9\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helv;}{\f10\froman\fcharset0\fprq2{\*\panose 00000000000000000000}MS Serif;}{\f11\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}MS Sans Serif;}{\f12\froman\fcharset0\fprq2{\*\panose 00000000000000000000}New York;}{\f13\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}System;}{\f14\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}Wingdings;}{\f15\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Tahoma;}{\f16\fswiss\fcharset0\fprq2{\*\panose 020b0506020202030204}Arial Narrow;}{\f17\fmodern\fcharset0\fprq1{\*\panose 00000000000000000000}Lucida Sans Typewriter;}{\f18\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}MSIcons;}{\f19\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}AvantGarde;}{\f20\froman\fcharset0\fprq2{\*\panose 00000000000000000000}ITC Bookman;}{\f21\fswiss\fcharset0\fprq2{\*\panose 00000000000000000000}Helvetica-Narrow;}{\f22\froman\fcharset0\fprq2{\*\panose 00000000000000000000}NewCenturySchlbk;}{\f23\froman\fcharset0\fprq2{\*\panose 00000000000000000000}Palatino;}{\f24\froman\fcharset0\fprq2{\*\panose 00000000000000000000}ZapfChancery;}{\f25\fdecor\fcharset2\fprq2{\*\panose 00000000000000000000}ZapfDingbats;}{\f26\fnil\fcharset2\fprq2{\*\panose 00000000000000000000}Marlett;}{\f27\fmodern\fcharset0\fprq1{\*\panose 020b0609040504020204}Lucida Console;}{\f28\fswiss\fcharset0\fprq2{\*\panose 020b0602030504020204}Lucida Sans Unicode;}{\f29\fnil\fcharset2\fprq2{\*\panose 05000000000000000000}MS Outlook;}{\f30\fscript\fcharset0\fprq2{\*\panose 030f0702030302020204}Comic Sans MS;}{\f31\fswiss\fcharset0\fprq2{\*\panose 020b0a04020102020204}Arial Black;}{\f32\froman\fcharset0\fprq2{\*\panose 02050604050505020204}Bookman Old Style;}{\f33\fnil\fcharset2\fprq2{\*\panose 01010601010101010101}Monotype Sorts;}{\f34\froman\fcharset0\fprq2{\*\panose 02020404030301010803}Garamond;}{\f35\fswiss\fcharset0\fprq2{\*\panose 020b0806030902050204}Impact;}{\f36\fswiss\fcharset0\fprq2{\*\panose 020b0604030504040204}Verdana;}{\f37\fswiss\fcharset0\fprq2{\*\panose 020b0603050302020204}abtelgu;}{\f38\fnil\fcharset2\fprq2{\*\panose 00000400000000000000}SHREE940;}{\f39\fswiss\fcharset0\fprq2{\*\panose 020b0706040902060204}Haettenschweiler;}{\f40\fnil\fcharset0\fprq2{\*\panose 00000000000000000000}Univers{\*\falt Arial};}{\f41\froman\fcharset0\fprq0{\*\panose 00000000000000000000}lucida sans ty;}{\f42\froman\fcharset238\fprq2 Times New Roman CE;}{\f43\froman\fcharset204\fprq2 Times New Roman Cyr;}{\f45\froman\fcharset161\fprq2 Times New Roman Greek;}{\f46\froman\fcharset162\fprq2 Times New Roman Tur;}{\f47\froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fswiss\fcharset238\fprq2 Arial CE;}{\f49\fswiss\fcharset204\fprq2 Arial Cyr;}{\f51\fswiss\fcharset161\fprq2 Arial Greek;}{\f52\fswiss\fcharset162\fprq2 Arial Tur;}{\f53\fswiss\fcharset186\fprq2 Arial Baltic;}{\f54\fmodern\fcharset238\fprq1 Courier New CE;}{\f55\fmodern\fcharset204\fprq1 Courier New Cyr;}{\f57\fmodern\fcharset161\fprq1 Courier New Greek;}{\f58\fmodern\fcharset162\fprq1 Courier New Tur;}{\f59\fmodern\fcharset186\fprq1 Courier New Baltic;}{\f132\fswiss\fcharset238\fprq2 Tahoma CE;}{\f133\fswiss\fcharset204\fprq2 Tahoma Cyr;}{\f135\fswiss\fcharset161\fprq2 Tahoma Greek;}{\f136\fswiss\fcharset162\fprq2 Tahoma Tur;}{\f137\fswiss\fcharset186\fprq2 Tahoma Baltic;}{\f138\fswiss\fcharset238\fprq2 Arial Narrow C
  2. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid204099739}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid213932548}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid214973648}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid215361893}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid243416752}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li480 }{\listname ;}\listid279259839}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid287709394}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid295989321}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid307246251}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid309597831}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid324014007}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  3. \'00;}{\levelnumbers;}}{\listname ;}\listid324631698}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid330566213}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid347828559}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid366876813}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid372851139}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid373509725}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid399715227}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid429159526}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid438911855}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid443958948}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid470832170}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  4. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid483859636}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid494610536}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid496918641}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid524559119}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid530649364}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid561986180}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid594435164}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid601381053}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid609043634}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid615403443}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid650250130}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  5. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid756362897}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid764618383}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid782532310}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid785537536}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid790394417}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid819467340}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid822084145}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid837576372}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid844515268}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid854735317}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid857082898}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  6. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid866328345}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid927617410}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid955021778}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid995573541}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid996543236}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid999045498}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1061440126}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li480 }{\listname ;}\listid1066414314}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1069883185}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1101485342}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1112826844}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  7. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1144545599}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1153566882}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1160731032}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1163937422}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1176071210}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1188837520}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1202981020}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1206336166}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1229151249}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1229537343}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1236355851}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  8. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1254709255}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1269894784}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1270434334}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1281492194}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1282690658}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1283538693}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1284800441}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1287084807}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1304774847}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1314993867}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1321351448}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  9. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1354764714}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1355840404}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1375470743}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1391995567}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1395741433}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1396197233}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1422219190}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1434783646}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1443766696}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1462262282}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1513715846}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  10. \'00;}{\levelnumbers;}}{\listname ;}\listid1522428268}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1522550923}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1524593957}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1526822409}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1542861444}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1549998216}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1574659391}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1575435494}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1576354367}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1582132610}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li480 }{\listname ;}\listid1607418921}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  11. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1619989199}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1625192400}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1638996255}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1642267903}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1663267846}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1665931823}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1674183336}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li480 }{\listname ;}\listid1725250644}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1733962835}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li480 }{\listname ;}\listid1755861630}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1780878810}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  12. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1810366537}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1816137920}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1821773858}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1828472881}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1869759375}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1884366548}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1891576342}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1898123855}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1947347124}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid1952669245}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid1970165783}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext
  13. \'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid2007707333}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid2010214399}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid2017489354}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}}{\listname ;}\listid2023192699}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid2048602822}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid2060278438}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid2062825125}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li480 }{\listname ;}\listid2077706483}{\list\listtemplateid-433966256\listsimple{\listlevel\levelnfc255\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent0{\leveltext\'00;}{\levelnumbers;}\fi0\li240 }{\listname ;}\listid2098819459}}{\*\listoverridetable{\listoverride\listid2098819459\listoverridecount0\ls1}{\listoverride\listid1869759375\listoverridecount0\ls2}{\listoverride\listid1284800441\listoverridecount0\ls3}{\listoverride\listid372851139\listoverridecount0\ls4}{\listoverride\listid27150511\listoverridecount0\ls5}{\listoverride\listid1396197233\listoverridecount0\ls6}{\listoverride\listid561986180\listoverridecount0\ls7}{\listoverride\listid1891576342\listoverridecount0\ls8}{\listoverride\listid-2\listoverridecount1{\lfolevel\listoverrideformat{\listlevel\levelnfc23\leveljc0\levelfollow0\levelstartat1\levelold\levelspace0\levelindent240{\leveltext\'01\u-3913 ?;}{\levelnumbers;}\f3\fbias0 \fi-240\li480 }}\ls9}{\listoverride\listid650250130\listoverridecount0\ls10}{\listoverride\listid866328345\listoverridecount0\ls11}{\listoverride\listid1443766696\listoverridecount0\ls12}{\listoverride\listid857082898\listoverridecount0\ls13}{\listoverride\listid1575435494\listoverridecount0\ls14}{\listoverride\listid1112826844\listoverridecount0\ls15}{\listoverride\listid1542861444\listoverridecount0\ls16}{\listoverride\listid1354764714\listoverridecount0\ls17}{\listoverride\listid1395741433\listoverridecount0\ls18}{\listoverride\listid1160731032\listoverridecount0\ls19}{\listoverride\listid324631698\listoverridecount0\ls20}{\listoverride\listid615403443\listoverridecount0\ls21}{\listoverride\listid166405602\listoverridecount0\ls22}{\listoverride\listid1282690658\listoverridecount0\ls23}{\listoverride\listid1576354367\listoverridecount0\ls24}{\listoverride\listid854735317\listoverridecount0\ls25}{\listoverride\listid1188837520\listoverridecount0\ls26}{\listoverride\listid844515268\listoverridecount0\ls27}{\listoverride\listid1733962835\listoverridecount0\ls28}{\listoverride\listid438911855\listoverridecount0\ls29}{\listoverride\listid955021778\listoverridecount0\ls30}{\listoverride\listid181866809\listoverridecount0\ls31}{\listoverride\listid1422219190\listoverridecount0\ls32}{\listoverride\listid1269894784\listoverridecount0\ls33}{\listoverride\listid309597831\listoverridecount0\ls34}{\listoverride\listid1206336166\listoverridecount0\ls35}{\listoverride\listid996543236\listoverridecount0\ls36}{\listoverride\listid1674183336\listoverridecount0\ls37}{\listoverride\listid2017489354\listoverridecount0\ls38}{\listoverride\listid1321351448\listoverridec
  14. \par }}{\headerr \pard\plain \s28\li-780\sl-160\slmult0\nowidctlpar\noline\tqr\tx8400\hyphpar0\adjustright \fs17\kerning20\cgrid {\tab }{\field{\*\fldinst { STYLEREF Chn \\* MERGEFORMAT }}{\fldrslt {\lang1024 Chapter 1}}}{\cs238 }{\field{\*\fldinst { STYLEREF Cht \\* MERGEFORMAT }}{\fldrslt {\lang1024 Command Trees}}}{
  15. \par }}{\footerl \pard\plain \s44\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phpg\posx1990\posy14702\absh-800\dxfrtext180\dfrmtxtx180\dfrmtxty0\hyphpar0\adjustright \f16\fs14\kerning20\cgrid {\field\flddirty{\*\fldinst { PRINT \\p page "
  16. \par /ndf\{1 index where\{pop pop pop\}\{dup xcheck\{bind\}if def\} ifelse\}bind def
  17. \par /ed\{exch def\}bind def
  18. \par /SetPageOffset\{neg wp$y add/dTop ed/dLeft ed\}ndf
  19. \par /SetPageSize \{neg dTop add/dBot ed dLeft add/dRight ed\}ndf
  20. \par /DoCropMarks\{gsave 0 setgray /dopaint true def 0.25 setlinewidth
  21. \par dLeft 76 sub dTop moveto 72 0 rlineto dLeft 76 sub dBot moveto 72 0 rlineto
  22. \par dRight 4 add dTop moveto 72 0 rlineto dRight 4 add dBot moveto 72 0 rlineto
  23. \par dLeft dTop 76 add moveto 0 -72 rlineto dRight dTop 76 add moveto 0 -72 rlineto
  24. \par dLeft dBot 4 sub moveto 0 -72 rlineto dRight dBot 4 sub moveto 0 -72 rlineto
  25. \par stroke grestore\}ndf
  26. \par /DoPageBox \{gsave 0 setgray /dopaint true def 0.25 setlinewidth
  27. \par dLeft dTop moveto dRight dTop lineto dRight dBot lineto dLeft dBot lineto
  28. \par closepath stroke grestore\}ndf
  29. \par 40.5 72 SetPageOffset
  30. \par 531 648 SetPageSize
  31. \par DoCropMarks
  32. \par DoPageBox"}}{\fldrslt }}\pard\plain \s44\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phpg\posx1990\posy14702\absh-800\dxfrtext180\dfrmtxtx180\dfrmtxty0\hyphpar0\adjustright \f16\fs14\kerning20\cgrid {
  33. \par Filename: }{\field{\*\fldinst {filename }}{\fldrslt {\lang1024 ch01pr}}}{ Project: }{\field{\*\fldinst {title }}{\fldrslt {CHAPTER 1}}}{
  34. \par Template: }{\field{\*\fldinst {template }}{\fldrslt {\lang1024 naerefp.dot}}}{ Author: }{\field{\*\fldinst {author }}{\fldrslt {\lang1024 a-ronb}}}{ Last Saved By: }{\field{\*\fldinst {lastsavedby }}{\fldrslt {\lang1024 a-ronb}}}{
  35. \par Revision #: }{\field{\*\fldinst {revnum }}{\fldrslt {\lang1024 2}}}{ Page: }{\field{\*\fldinst {page \\* arabic}}{\fldrslt {\lang1024 46}}}{ of }{\field{\*\fldinst {numpages }}{\fldrslt {\lang1024 1}}}{ Printed: }{\field{\*\fldinst {printdate \\@ "MM/dd/yy hh:mm AM/PM"}}{\fldrslt {\lang1024 00/00/00 00:00 AM}}}{
  36. \par }{\field\flddirty{\*\fldinst { PRINT \\p para "
  37. \par 0 setgray /dopaint true def 1.5 33.5 moveto
  38. \par /str 30 string def /Helvetica-Narrow findfont 7 scalefont setfont
  39. \par (Printed On: ) show statusdict begin product show end
  40. \par ( Colorlayer: ) show /colorlayer where \{pop colorlayer str cvs show\}\{(?) show\}ifelse
  41. \par ( Document Page: ) show wp$fpage show"}}{\fldrslt }}\pard\plain \s44\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phpg\posx1990\posy14702\absh-800\dxfrtext180\dfrmtxtx180\dfrmtxty0\hyphpar0\adjustright \f16\fs14\kerning20\cgrid {
  42. \par }\pard\plain \s27\li-780\sl-160\slmult0\nowidctlpar\noline\tqr\tx8400\hyphpar0\adjustright \fs17\kerning20\cgrid {\tab OLE DB Programmer\rquote s Reference Version 2}{\cs238 }{\field{\*\fldinst {\cs35\b\f16 PAGE \\* MERGEFORMAT }}{\fldrslt {\cs35\b\f16\lang1024 46}}}{\cs35\b\f16
  43. \par }}{\footerr \pard\plain \s44\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phpg\posx1990\posy14702\absh-800\dxfrtext180\dfrmtxtx180\dfrmtxty0\hyphpar0\adjustright \f16\fs14\kerning20\cgrid {\field\flddirty{\*\fldinst { PRINT \\p page "
  44. \par /ndf\{1 index where\{pop pop pop\}\{dup xcheck\{bind\}if def\} ifelse\}bind def
  45. \par /ed\{exch def\}bind def
  46. \par /SetPageOffset\{neg wp$y add/dTop ed/dLeft ed\}ndf
  47. \par /SetPageSize \{neg dTop add/dBot ed dLeft add/dRight ed\}ndf
  48. \par /DoCropMarks\{gsave 0 setgray /dopaint true def 0.25 setlinewidth
  49. \par dLeft 76 sub dTop moveto 72 0 rlineto dLeft 76 sub dBot moveto 72 0 rlineto
  50. \par dRight 4 add dTop moveto 72 0 rlineto dRight 4 add dBot moveto 72 0 rlineto
  51. \par dLeft dTop 76 add moveto 0 -72 rlineto dRight dTop 76 add moveto 0 -72 rlineto
  52. \par dLeft dBot 4 sub moveto 0 -72 rlineto dRight dBot 4 sub moveto 0 -72 rlineto
  53. \par stroke grestore\}ndf
  54. \par /DoPageBox \{gsave 0 setgray /dopaint true def 0.25 setlinewidth
  55. \par dLeft dTop moveto dRight dTop lineto dRight dBot lineto dLeft dBot lineto
  56. \par closepath stroke grestore\}ndf
  57. \par 40.5 72 SetPageOffset
  58. \par 531 648 SetPageSize
  59. \par DoCropMarks
  60. \par DoPageBox"}}{\fldrslt }}\pard\plain \s44\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phpg\posx1990\posy14702\absh-800\dxfrtext180\dfrmtxtx180\dfrmtxty0\hyphpar0\adjustright \f16\fs14\kerning20\cgrid {
  61. \par Filename: }{\field{\*\fldinst {filename }}{\fldrslt {\lang1024 ch01pr}}}{ Project: }{\field{\*\fldinst {title }}{\fldrslt {CHAPTER 1}}}{
  62. \par Template: }{\field{\*\fldinst {template }}{\fldrslt {\lang1024 naerefp.dot}}}{ Author: }{\field{\*\fldinst {author }}{\fldrslt {\lang1024 a-ronb}}}{ Last Saved By: }{\field{\*\fldinst {lastsavedby }}{\fldrslt {\lang1024 a-ronb}}}{
  63. \par Revision #: }{\field{\*\fldinst {revnum }}{\fldrslt {\lang1024 2}}}{ Page: }{\field{\*\fldinst {page \\* arabic}}{\fldrslt {\lang1024 47}}}{ of }{\field{\*\fldinst {numpages }}{\fldrslt {\lang1024 1}}}{ Printed: }{\field{\*\fldinst {printdate \\@ "MM/dd/yy hh:mm AM/PM"}}{\fldrslt {\lang1024 00/00/00 00:00 AM}}}{
  64. \par }{\field\flddirty{\*\fldinst { PRINT \\p para "
  65. \par 0 setgray /dopaint true def 1.5 33.5 moveto
  66. \par /str 30 string def /Helvetica-Narrow findfont 7 scalefont setfont
  67. \par (Printed On: ) show statusdict begin product show end
  68. \par ( Colorlayer: ) show /colorlayer where \{pop colorlayer str cvs show\}\{(?) show\}ifelse
  69. \par ( Document Page: ) show wp$fpage show"}}{\fldrslt }}\pard\plain \s44\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phpg\posx1990\posy14702\absh-800\dxfrtext180\dfrmtxtx180\dfrmtxty0\hyphpar0\adjustright \f16\fs14\kerning20\cgrid {
  70. \par }\pard\plain \s27\li-780\sl-160\slmult0\nowidctlpar\noline\tqr\tx8400\hyphpar0\adjustright \fs17\kerning20\cgrid {\tab OLE DB Programmer\rquote s Reference Version 2}{\cs238 }{\field{\*\fldinst {\cs35\b\f16 PAGE \\* MERGEFORMAT }}{\fldrslt {\cs35\b\f16\lang1024 47}}}{\cs35\b\f16
  71. \par }}{\headerf \pard\plain \s119\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phmrg\posx5760\posy2130\absh-160\absw2640\dxfrtext180\dfrmtxtx180\dfrmtxty180\hyphpar0\adjustright \cbpat1 \fs20\kerning20\cgrid {
  72. \par \tab
  73. \par }\pard\plain \s28\li-780\sl-160\slmult0\nowidctlpar\noline\tqr\tx8400\pvpg\phmrg\posx5760\posy2130\absh-160\absw2640\dxfrtext180\dfrmtxtx180\dfrmtxty180\hyphpar0\adjustright \fs17\kerning20\cgrid {
  74. \par }\pard\plain \s119\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phmrg\posx5760\posy2130\absh-160\absw2640\dxfrtext180\dfrmtxtx180\dfrmtxty180\hyphpar0\adjustright \cbpat1 \fs20\kerning20\cgrid {
  75. \par }\pard\plain \s28\li-780\sl-160\slmult0\nowidctlpar\noline\tqr\tx8400\hyphpar0\adjustright \fs17\kerning20\cgrid {
  76. \par }}{\footerf \pard\plain \s44\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phpg\posx1990\posy14702\absh-800\dxfrtext180\dfrmtxtx180\dfrmtxty0\hyphpar0\adjustright \f16\fs14\kerning20\cgrid {\field\flddirty{\*\fldinst { PRINT \\p page "
  77. \par /ndf\{1 index where\{pop pop pop\}\{dup xcheck\{bind\}if def\} ifelse\}bind def
  78. \par /ed\{exch def\}bind def
  79. \par /SetPageOffset\{neg wp$y add/dTop ed/dLeft ed\}ndf
  80. \par /SetPageSize \{neg dTop add/dBot ed dLeft add/dRight ed\}ndf
  81. \par /DoCropMarks\{gsave 0 setgray /dopaint true def 0.25 setlinewidth
  82. \par dLeft 76 sub dTop moveto 72 0 rlineto dLeft 76 sub dBot moveto 72 0 rlineto
  83. \par dRight 4 add dTop moveto 72 0 rlineto dRight 4 add dBot moveto 72 0 rlineto
  84. \par dLeft dTop 76 add moveto 0 -72 rlineto dRight dTop 76 add moveto 0 -72 rlineto
  85. \par dLeft dBot 4 sub moveto 0 -72 rlineto dRight dBot 4 sub moveto 0 -72 rlineto
  86. \par stroke grestore\}ndf
  87. \par /DoPageBox \{gsave 0 setgray /dopaint true def 0.25 setlinewidth
  88. \par dLeft dTop moveto dRight dTop lineto dRight dBot lineto dLeft dBot lineto
  89. \par closepath stroke grestore\}ndf
  90. \par 40.5 72 SetPageOffset
  91. \par 531 648 SetPageSize
  92. \par DoCropMarks
  93. \par DoPageBox"}}{\fldrslt }}\pard\plain \s44\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phpg\posx1990\posy14702\absh-800\dxfrtext180\dfrmtxtx180\dfrmtxty0\hyphpar0\adjustright \f16\fs14\kerning20\cgrid {
  94. \par Filename: }{\field{\*\fldinst {filename }}{\fldrslt {\lang1024 ch01pr}}}{ Project: }{\field{\*\fldinst {title }}{\fldrslt {CHAPTER 1}}}{
  95. \par Template: }{\field{\*\fldinst {template }}{\fldrslt {\lang1024 naerefp.dot}}}{ Author: }{\field{\*\fldinst {author }}{\fldrslt {\lang1024 a-ronb}}}{ Last Saved By: }{\field{\*\fldinst {lastsavedby }}{\fldrslt {\lang1024 a-ronb}}}{
  96. \par Revision #: }{\field{\*\fldinst {revnum }}{\fldrslt {\lang1024 2}}}{ Page: }{\field{\*\fldinst {page \\* arabic}}{\fldrslt {\lang1024 15}}}{ of }{\field{\*\fldinst {numpages }}{\fldrslt {\lang1024 1}}}{ Printed: }{\field{\*\fldinst {printdate \\@ "MM/dd/yy hh:mm AM/PM"}}{\fldrslt {\lang1024 00/00/00 00:00 AM}}}{
  97. \par }{\field\flddirty{\*\fldinst { PRINT \\p para "
  98. \par 0 setgray /dopaint true def 1.5 33.5 moveto
  99. \par /str 30 string def /Helvetica-Narrow findfont 7 scalefont setfont
  100. \par (Printed On: ) show statusdict begin product show end
  101. \par ( Colorlayer: ) show /colorlayer where \{pop colorlayer str cvs show\}\{(?) show\}ifelse
  102. \par ( Document Page: ) show wp$fpage show"}}{\fldrslt }}\pard\plain \s44\sl-160\slmult0\nowidctlpar\widctlpar\noline\pvpg\phpg\posx1990\posy14702\absh-800\dxfrtext180\dfrmtxtx180\dfrmtxty0\hyphpar0\adjustright \f16\fs14\kerning20\cgrid {
  103. \par }\pard\plain \s27\li-780\sl-160\slmult0\nowidctlpar\noline\tqr\tx8400\hyphpar0\adjustright \fs17\kerning20\cgrid {\tab OLE DB Programmer\rquote s Reference Version 2}{\cs238 }{\field{\*\fldinst {\cs35\b\f16 PAGE \\* MERGEFORMAT }}{\fldrslt {\cs35\b\f16\lang1024 15}}}{\cs35\b\f16
  104. \par }}{\*\pnseclvl1\pnucrm\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl2\pnucltr\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl3\pndec\pnstart1\pnindent720\pnhang{\pntxta .}}{\*\pnseclvl4\pnlcltr\pnstart1\pnindent720\pnhang{\pntxta )}}{\*\pnseclvl5\pndec\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnstart1\pnindent720\pnhang{\pntxtb (}{\pntxta )}}\pard\plain \s2\qr\ri-120\sa80\sl-220\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\pvpg\phmrg\posnegx-780\posy2580\absw9180\dxfrtext180\dfrmtxtx180\dfrmtxty180\hyphpar0\outlinelevel1\adjustright \b\caps\f16\fs20\expnd24\expndtw120\kerning20\cgrid {Chapter 1
  105. \par }\pard\plain \s16\qr\sl-680\slmult0\keepn\nowidctlpar\widctlpar\noline\tx3000\pvpg\phmrg\posnegx-780\posy2820\absh-2520\absw9180\nowrap\hyphpar0\adjustright \fs60\kerning20\cgrid {Command Trees
  106. \par }\pard\plain \s4\li-780\ri-1440\sa160\sl-560\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel3\adjustright \fs52\kerning20\cgrid {Command Operators
  107. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {Command trees are used to represent DML and DDL statements. This section describes the operators represented by command nodes used to build command trees.
  108. \par }\pard\plain \s5\li-780\ri-1440\sb20\sa120\sl-440\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel4\adjustright \fs40\kerning20\cgrid {Data Manipulation Operators
  109. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This section concentrates on the description of the semantics of the operators including their inputs and outputs. Section 3 provides a table describing how to connect the command nodes.
  110. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Constants, Identifiers, Names, and Parameters
  111. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {Note that for the various name operators}{\cs93\b , }{unlike names in SQL statements, names in operators that contain special characters do not need to be quoted. If a name in an operator is quoted, these quotes will be considered literals and part of the name.
  112. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_scalar_constant}{ \line Represents a scalar constant whose value can use any element of the }{\cs49\i value}{ unionof the DBCOMMANDTREE structure. A scalar value can be of any OLE DB type. This node has no inputs. The result type is the type of the scalar value represented by the node.
  113. \par }{\cs72\f17\fs16\lang1024 DBOP_DEFAULT, DBOP_NULL}{\line SQL\rquote s \ldblquote DEFAULT\rdblquote and \ldblquote NULL\rdblquote value indicators. There are no inputs. The result type can be any type of scalar.
  114. \par }{\cs72\f17\fs16\lang1024 DBOP_bookmark_name}{\line Represents the bookmark column of a table. For example, SELECT T.*, T.bookmark FROM T. It takes one optional input, a DBOP_table_name, to which the bookmark belongs. A string representing the name of the column can optionally be assigned in }{\cs49\i pwszValue}{.
  115. \par }{\cs72\f17\fs16\lang1024 DBOP_catalog_name, DBOP_column_name}{\line Represents the name of a catalog and column, respectively. No inputs. A name may be specified by a }{\cs49\i pwszValue}{ that is not a null pointer, DBID, or moniker in the node\rquote s }{\cs49\i value}{ field. For column names, the column may be denoted as an unsigned integer value (e.g., SELECT A, B FROM T ORDER BY 2).
  116. \par }{\cs72\f17\fs16\lang1024 DBOP_schema_name}{\line Represents the name of a schema. A name may be specified by a }{\cs49\i pwszValue}{ that is not a null pointer, a DBID, or moniker in the node\rquote s value field. A schema name node has an optional input DBOP_catalog_name node.
  117. \par }{\cs72\f17\fs16\lang1024 DBOP_outall_name}{\line Specifies that all input columns (e.g., SQL\rquote s \ldblquote SELECT *\rdblquote ) must be output. No inputs. It contains no other DBCOMMANDTREE value. DBOP_outall_name is used as an input to the DBOP_project_list_element node, but not to the set_list_element, sort_list_element, column_list_element or from_list_element nodes.
  118. \par }{\cs72\f17\fs16\lang1024 DBOP_qualifier_name}{\line Specifies all columns in a table (e.g., SQL\rquote s \ldblquote table.*\rdblquote ). No inputs. The table name is represented by a }{\cs49\i pwszValue}{ that is not a null pointer. DBOP_qualifier_name is used as an input to the DBOP_project_list_element node, but not to the set_list_element, sort_list_element, column_list_element or from_list_element nodes.
  119. \par }{\cs72\f17\fs16\lang1024 DBOP_qualified_column_name}{\line Represents a column name. It takes two inputs: a DBOP_table_name, and a DBOP_column_name, in that order. It contains no other DBCOMMANDTREE value.
  120. \par }{\cs72\f17\fs16\lang1024 DBOP_table_name}{\line Represents a table name, possibly in another catalog or schema. A table name may be specified by a }{\cs49\i pwszValue}{ that is not a null pointer, DBID, or moniker in the node\rquote s }{\cs49\i value}{ field. This node takes an optional input: DBOP_schema_name.
  121. \par }{\cs72\f17\fs16\lang1024 DBOP_nested_table name}{\line Represents a nested table name. A nested table is a table containing at least one chaptered column. The component of the nested name is stored as a }{\cs49\i pwszValue}{ that is not a null pointer, DBID, or moniker in the node\rquote s value field. This node takes a DBOP_nested_table_name or a DBOP_table_name input. For example, the nested table Customers.Orders with chapter Detail is represented as follows:
  122. \par {\pntext\tab}}\pard\plain \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls1\pnrnot0\pnstart1 }\hyphpar0\ls1\adjustright \f17\fs16\lang1024\cgrid {\tab \tab DBOP_nested_table_name (pwsz = \ldblquote Detail\rdblquote )
  123. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls2\pnrnot0\pnstart1 }\hyphpar0\ls2\adjustright {\tab \tab \tab |
  124. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls3\pnrnot0\pnstart1 }\hyphpar0\ls3\adjustright {\tab DBOP_nested_table_name (pwsz = \ldblquote Orders\rdblquote )
  125. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls4\pnrnot0\pnstart1 }\hyphpar0\ls4\adjustright {\tab \tab |
  126. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls5\pnrnot0\pnstart1 }\hyphpar0\ls5\adjustright {DBOP_table_name (pwsz = \ldblquote Customers\rdblquote )
  127. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls6\pnrnot0\pnstart1 }\ls6\adjustright \fs20\lang1024\cgrid {
  128. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_nested_column_name}{\line Specifies a column in a nested table. This node takes one DBOP_nested_table_name and a DBOP_column_name as inputs, in that order.
  129. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls7\pnrnot0\pnstart1 }\ls7\adjustright \fs20\lang1024\cgrid {
  130. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Constructors and Coercion Operators
  131. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_row}{\line Constructs a row from a list of scalar values. Similar to SQL-2\rquote s row value constructor from column values or literals, as in \ldblquote (t.a, t.b, t.c) < VALUES (2, 3, 5).\rdblquote It takes a scalar_list_anchor as input and produces a single row.
  132. \par }{\cs72\f17\fs16\lang1024 DBOP_table}{\line Constructs a table from a list of union-compatible row constructors. It takes a row_list_anchor as input and produces a table.
  133. \par }{\cs72\f17\fs16\lang1024 DBOP_sort}{\line Sorts a table in increasing or decreasing order according to a list of columns or expressions over its columns. A DBOP_sort has two required child nodes. The first child represents the input table to be sorted. The second child is a DBOP_sort_list_anchor node representing the list of sort keys. Each element of the sort_list, specified by a DBOP_sort_list_element, contains the order of sort in the DBSORTINFO field, and points to the column name or expression on which to sort. This operator produces an ordered table. If the input to sort is a unique table, it produces an ordered-unique table. If the input to sort is a hierarchical table, then the sort operator applies only to the root rowset in that table; that is, the list of columns on which to sort should reference only non-chaptered columns of the root rowset; otherwise, the sort specification is invalid. The output of sort in this case is a hierachical table with the rows in the root rowset odered. For example: Let T1->T2->T3 be a hierarhical rowset, where the columns of each rowset are T1(A,B,C,X), T2(D,E,F,Y), and T3(G,H), assume X, and Y represent the chaptered columns of T1 and T2, respectively. Assume DBOP_sort specifies a list W of columns on which to sort. W must reference only subsets of \{A,B,C\}.
  134. \par }{\cs72\f17\fs16\lang1024 DBOP_distinct, DBOP_distinct_order_preserving}{\line These operators remove duplicate rows from a table. The DBOP_distinct operator takes a table as input and produces a unique table. The DBOP_distinct_order_preserving operator takes an ordered or unordered table as input and produces a unique table maintaining the row order of the input table. If the input table is ordered, then the output is an ordered-unique table.
  135. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls8\pnrnot0\pnstart1 }\ls8\adjustright \fs20\lang1024\cgrid {
  136. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Operators on Tables
  137. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_alias}{\line The alias facilities for a table. DBOP_alias takes one mandatory and one optional inputs. The first is a table-valued subtree, often a table_name, representing the table being aliased. The alias name for the table is provided in the }{\cs49\i pwszValue}{ of the DBOP_alias command. A second optional input is a column_list_anchor containing column elements representing aliases to be assigned to the columns of the input table. SQL examples: \ldblquote SELECT a.* FROM table AS a\rdblquote and \ldblquote SELECT x, z FROM table AS a (x, y, z).\rdblquote The output table is of the same table type as the input table. The new name(s) replaces the old name(s) for the output of this operator. If the second input is provided, then the size of the column_list must be the same as the number of columns in the first input.
  138. \par }{\cs72\f17\fs16\lang1024 DBOP_cross_join}{\line Represents the Cartesian product of two tables, i.e., SQL\rquote s cross join. This operator takes two tables T1 and T2 as input and produces a table R. The columns of R are all the columns of T1 and T2. Let t1, t2, and r denote a row in T1, T2, and R, respectively. Let r[Ti] denote the projection of row r on the columns of Ti, i=1,2. Each row r in R is formed by taking each row t1 in T1 and concatenating it with each row t2 in T2, so that r[T1]=t1 and r[T2]=t2.The cardinality of R is the product of the cardinalities of T1 and T2. R is a unique table if both T1 and T2 are unique tables; otherwise, it is a table.
  139. \par }{\cs72\f17\fs16\lang1024 DBOP_union_join}{\line Represents SQL\rquote s union join. This operator takes two tables T1 and T2 as input and produces a table R. The columns of R are all the columns of T1 and T2. Let ti_null denote a row of Ti, i=1,2, containing NULL values in every column. Each row r in R is formed by taking every row from T1 and T2 as follows: (a) r[T1]= t in T1 and r[T2] = t2_null, or (b) r[T1] = t1_null, and r[T2] = t in T2. The cardinality of R is the sum of the cardinalities of T1 and T2.\line The output is a unique table if both inputs are unique tables; otherwise, it is a table.
  140. \par }{\cs72\f17\fs16\lang1024 DBOP_inner_join, DBOP_left_semi_join, DBOP_right_semi_join, DBOP_left_anti_semi_join, DBOP_right_anti_semi_join, DBOP_left_outer_join, DBOP_right_outer_join, DBOP_full_outer_join}{\line All join operators take two required table inputs, T1 and T2, and produce a table R as output. A third required input is a Boolean-valued expression specifying the }{\cs49\i join condition}{ (i.e, SQL\rquote s ON or WHERE clause). The columns of R are specified as follows:
  141. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s58\fi-240\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent240\pnhang{\pntxtb \'b7}}\hyphpar0\ls9\adjustright \fs20\kerning20\cgrid {For inner_join and all outer_joins, the columns of R are all the columns of T1 and T2, in that order;
  142. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}For left_semi_join and left_anti_semi_join, the columns of R are the columns of T1; and
  143. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}For right_semi_join and right_anti_semi_join, the columns of R are the columns of T2.
  144. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls10\pnrnot0\pnstart1 }\hyphpar0\ls10\adjustright \fs20\kerning20\cgrid {The rows in R are specified as follows:
  145. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s58\fi-240\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent240\pnhang{\pntxtb \'b7}}\hyphpar0\ls9\adjustright \fs20\kerning20\cgrid {For inner_join, R contains the subset of rows from the Cartesian product of T1 and T2 satisfying the join condition. If the join condition is the predicate TRUE or a tautology (e.g., 5=5), then R is exactly the Cartesian product of T1 and T2;
  146. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}For left_semi_join, R contains all rows of T1 that have a matching row in T2 satisfying the join condition. If the join condition is always TRUE, then R contains the same rows as T1. If the join condition is always FALSE, then R is empty;
  147. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}For left_anti_semi_join, R contains all rows of T1 that do not have a matching row in T2 satisfying the join condition. If the join condition is always TRUE, then R is empty. If the join condition is always FALSE, then R contains the same rows as T1;
  148. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}For right_semi_join, R contains all rows in T2 that have a matching row in T1 satisfying the join condition. If the join condition is always TRUE, then R contains the same rows as T2. If the join condition is always FALSE, then R is empty;
  149. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}For right_anti_semi_join, R contains all rows in T2 that do not have a matching row in T1 satisfying the join condition. If the join condition is always TRUE, then R is empty. If the join condition is always FALSE, then R contains the same rows as T2;
  150. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}For left_outer_join, R contains all tuples in the inner_join of T1 and T2, and all tuples in the left_anti_semi_join of T1 and T2 concatenated with t2_null;
  151. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}For right_outer_join, R contains all tuples in the inner_join of T1 and T2, and all tuples in the right_anti_semi_join of T1 and T2 concatenated with t1_null; and
  152. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}For full_outer_join, R contains all tuples in the inner_join of T1 and T2, all tuples in the left_anti_semi_join of T1 and T2 concatenated with t2_null, and all tuples in the right_anti_semi_join of T1 and T2 concatenated with t1_null.
  153. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls11\pnrnot0\pnstart1 }\hyphpar0\ls11\adjustright \fs20\kerning20\cgrid {The output R is a table in general; it is a unique table (1) for inner join and all outer joins, if both inputs are unique tables, (2) for left semi-join and left anti-semi-join, if the left input is a unique table, and (3) for right semi-join and right anti-semi-join, if the right input is a unique table.
  154. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_natural_join, DBOP_natural_left_outer_join, DBOP_natural_right_outer_join, DBOP_natural_full_outer_join}{\line All natural join operators take two required table inputs, T1 and T2, and produce a table R as output. A third optional input is a column_list specifying the columns on which to test the join predicate (i.e, SQL\rquote s USING clause). Natural joins are different to the join operations described above in that they have an implicit projection and an implicit join condition. Let CC represent the columns that are common to both T1 and T2, T1C represent the columns of T1 not in CC, and T2C represent the columns of T2 not in CC. The columns of R are T1C, CC, and T2C. Producing the set of columns CC only once in R represents the implied projection. The implied join condition is the conjunction of terms T1.Ci = T2.Ci, for every Ci in CC. If the column_list input of these operators is included, then the join condition is restricted to the terms involving only the columns in the column list, which can only reference columns in CC. Other than the implied projection and join condition, the semantics of the natural join operators is exactly as their non-natural counterparts. That is, the cardinality of R is exactly the cardinality of the non-natural join operators. If CC is the empty set, then the implied join predicate is TRUE and R contains the cross join of T1 and T2.
  155. \par }{\cs72\f17\fs16\lang1024 DBOP_set_intersection, DBOP_set_union, DBOP_set_left_difference, DBOP_set_right_difference, DBOP_set_anti_difference}{\line Set operations, requiring \ldblquote union compatible\rdblquote input tables. These operators take two required inputs T1 and T2 and produce a result table R. Let A1, A2,..., An denote the columns of T1, and B1, B2,..., Bm denote the columns of T2. T1 and T2 are union compatible if: (a) n=m, and (b) the types of Ai and Bi, i=1,..,n, are compatible. The rules determining when the types of two columns are compatible and what the type of the resulting columns will be are provider-specific. If Ai,Bi, have the same name, that name is propagated to the output; otherwise, the resulting name is provider-specific. Left-difference is the usual difference operator; right-difference is the opposite (T1 right-difference T2 == T2 left-difference T1). The anti-difference is the union of the left- and right-differences. For SQL\rquote s \ldblquote union corresponding,\rdblquote the tree node requires a third optional input, which must be a non-empty column_list_anchor. If the third input is present, the input tables are projected on the columns named in that list before the set operation proceeds. If the third input is not included and the Boolean-valued field }{\cs49\i fValue}{ of the DBCOMMANDTREE node is set to TRUE, then the command processor decides the maximal set of columns from the two inputs that are union-compatible and should therefore be preserved. The output is a unique table.
  156. \par }{\cs72\f17\fs16\lang1024 DBOP_bag_intersection, DBOP_bag_union, DBOP_bag_left_difference, DBOP_bag_right_difference, DBOP_bag_anti_difference}{\line Multi-set (bag) operations, requiring \ldblquote union compatible\rdblquote input tables. The number of occurrences of a row in the output table is the minimum (intersection), sum (union), or difference respectively of that row\rquote s number of occurrences in the two input tables. Variants are as for set operations. DBOP_bag_union represents SQL\rquote s UNION ALL operator. Two or more table inputs, the output is a table.
  157. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls12\pnrnot0\pnstart1 }\hyphpar0\ls12\adjustright \fs20\kerning20\cgrid {Given table A with 2 occurrences of row X and table B with 1 occurrence of row X, then:
  158. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s58\fi-240\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent240\pnhang{\pntxtb \'b7}}\hyphpar0\ls9\adjustright \fs20\kerning20\cgrid {(A bag_intersection B) will contain 1 (min(2,1)) occurrence of row X;
  159. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}(A bag_union B) will contain 3 (2+1) occurrences of row X;
  160. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}(A bag_left_difference B) will contain 1 (2-1) occurrences of row X;
  161. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}(A bag_right_difference B) will contain 0 ocurrences of row X, since 1-2 is a negative number.
  162. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}(A bag_anti_difference B) will contain 1 (1+0) occurrences of row X corresponding to the bag_union of the bag_left_difference and bag_right_difference.
  163. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_division}{\line Represents the relational division operator. This operator takes two required table inputs T1 and T2, and produces a unique table R as result. The first input, T1, is the dividend table, the second input, T2, is the divisor table. The set of columns of T2 must be a subset of the columns of T1. Let CC be the columns that are common to T1 and T2, and T1C be the columns in T1 not in T2. Table R has all the columns in T1C. Let t1 denote a row in T1 and t2 a row in T2. The result R contains the set of rows r such that for every row t1 in T1, there is a row t2 in T2 with r=t1[T1C] and t1[T2]= t2.
  164. \par }{\cs72\f17\fs16\lang1024 DBOP_relative_sampling}{\line A random sampling of rows from a table based on a reduction factor (given in percent, must be an integer between 0 and 100). Randomness is guaranteed to the provider\rquote s ability. The only required input is a table. The integer between 0 and 100 is represented as an integer in the }{\cs49\i ulValue}{ field of the DBCOMMANDTREE node. If the input table is unique, so is the output table; otherwise, the output is a table.
  165. \par }{\cs72\f17\fs16\lang1024 DBOP_absolute_sampling}{\line A random sampling of rows from a table with a known, fixed output cardinality. The output cardinality is given as a positive integer stored in the }{\cs49\i ulValue}{ field of the DBCOMMANDTREE node (values larger than the input cardinality raise an error). Randomness is guaranteed to the provider\rquote s ability. The only required input is a table. If the input table is unique, so is the output table; otherwise, the output is a table.
  166. \par }{\cs72\f17\fs16\lang1024 DBOP_transitive_closure}{\line The transitive closure operator performs recursive computations that involve traversal of all paths in a directed graph starting from a set of initial nodes as defined by Agrawal [IEEE TSE, 14:7, 1988]. Suppose the input table T is of the form T(K1, K2, P1, P2, ..., Pm), where K1 and K2 are columns belonging to the same domain. K1 and K2 can consist of more than one, but an equal number of columns. T can be represented as a directed graph in which each row t in T is represented as an link (arc) from node t[K1] to node t[K2]. The values t[Pi], i=1,...,m, represent link properties. Semantically, the transitive_closure operator computes a table representing all paths in that graph as the following iterative program:
  167. \par {\pntext\tab}}\pard\plain \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls13\pnrnot0\pnstart1 }\hyphpar0\ls13\adjustright \f17\fs16\lang1024\cgrid {let R = T;
  168. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls14\pnrnot0\pnstart1 }\hyphpar0\ls14\adjustright {do
  169. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls15\pnrnot0\pnstart1 }\hyphpar0\ls15\adjustright { let R = select * from T
  170. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls16\pnrnot0\pnstart1 }\hyphpar0\ls16\adjustright { union
  171. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls17\pnrnot0\pnstart1 }\hyphpar0\ls17\adjustright { select R.K1, T.K2 from R inner join T on R.K2 = T.K1;
  172. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls18\pnrnot0\pnstart1 }\hyphpar0\ls18\adjustright {while \ldblquote R changes\rdblquote ;
  173. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls19\pnrnot0\pnstart1 }\hyphpar0\ls19\adjustright {
  174. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls20\pnrnot0\pnstart1 }\ls20\adjustright \fs20\lang1024\cgrid {
  175. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls21\pnrnot0\pnstart1 }\hyphpar0\ls21\adjustright \fs20\kerning20\cgrid {The operator takes 4 mandatory inputs. First, a table T representing directed links in a graph. Second, a join predicate to determine when a link and a path can be concatenated (e.g., R.K2=T.K1). Third, a project_list representing the columns to be preserved after such a concatenation, each column may be the result of a scalar computation (including aggregate functions). In the above program, it is represented by R.K1, T.K2, but it may also include Pi columns from R and T. Fourth, a predicate to select result tuples based on their derivation history (see below). A fifth optional input represents a selection condition on the initial table. The derivation path that led to the existence of a row in the transitive_closure of T is captured in an additional chaptered column, called Delta, that gets implicitly attached to each result row. Thus, the operator\rquote s output is a hierarchical table R, having the same columns as T plus the chaptered column. For example, if a relation T is defined as:
  176. \par }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx7038\pard\plain \s64\li30\ri30\sa60\sl-40\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\brdrb\brdrs\brdrw15 \hyphpar0\adjustright \fs20\lang1024\cgrid {\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx1482\clvertalt\cltxlrtb \cellx2874\clvertalt\cltxlrtb \cellx7038\pard\plain \s63\sl-220\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \b\f16\fs18\kerning20\cgrid {T\cell K1\cell K2\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx7038\pard\plain \s64\li30\ri30\sa60\sl-40\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\brdrb\brdrs\brdrw15 \hyphpar0\adjustright \fs20\lang1024\cgrid {\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx1482\clvertalt\cltxlrtb \cellx2874\clvertalt\cltxlrtb \cellx7038\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cell a\cell b\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cell b\cell c\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx1482\clvertalt\cltxlrtb \cellx2874\clvertalt\cltxlrtb \cellx7038\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cell c\cell d\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls22\pnrnot0\pnstart1 }\ls22\adjustright \fs20\lang1024\cgrid {
  177. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls23\pnrnot0\pnstart1 }\hyphpar0\ls23\adjustright \fs20\kerning20\cgrid {The result R of the transitive closure of T would be:
  178. \par }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx7037\pard\plain \s64\li30\ri30\sa60\sl-40\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\brdrb\brdrs\brdrw15 \hyphpar0\adjustright \fs20\lang1024\cgrid {\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx1168\clvertalt\cltxlrtb \cellx1950\clvertalt\cltxlrtb \cellx2732\clvertalt\cltxlrtb \cellx7037\pard\plain \s63\sl-220\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \b\f16\fs18\kerning20\cgrid {R\cell K1\cell K2\cell Delta\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx7037\pard\plain \s64\li30\ri30\sa60\sl-40\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\brdrb\brdrs\brdrw15 \hyphpar0\adjustright \fs20\lang1024\cgrid {\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx1168\clvertalt\cltxlrtb \cellx1950\clvertalt\cltxlrtb \cellx2732\clvertalt\cltxlrtb \cellx7037\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cell A\cell b\cell \{<a,b>\}\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cell B\cell c\cell \{<b,c>\}\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cell C\cell d\cell \{<c,d>\}\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cell A\cell c\cell \{<a,b>, <b,c>\}\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cell B\cell d\cell \{<b,c>, <c,d>\}\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx1168\clvertalt\cltxlrtb \cellx1950\clvertalt\cltxlrtb \cellx2732\clvertalt\cltxlrtb \cellx7037\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cell A\cell d\cell \{<a,b>, <b,c>, <c,d>\}\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls24\pnrnot0\pnstart1 }\ls24\adjustright \fs20\lang1024\cgrid {
  179. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls25\pnrnot0\pnstart1 }\hyphpar0\ls25\adjustright \fs20\kerning20\cgrid {Thus, the fourth input to this operator is a predicate involving Delta.
  180. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_recursive_union}{\line As required by SQL-3 (but not SQL-2), the recursive union starts with an input table and adds to that table (in the result, not in the stored database) rows that can be computed by a predicate from rows already in the table. When viewed as a computation on graphs, this operation starts with a set of nodes and adds nodes reachable by one or more steps in the graph. The starting points are specified in the input table, and the steps are specified by the predicate. Alternatively, the starting table\rquote s rows can represent a set of arcs in a graph, and the predicate can express how links connect and can be combined into new links (paths).
  181. \par {\pntext\tab}}\pard\plain \s139\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls26\pnrnot0\pnstart1 }\hyphpar0\ls26\adjustright \f16\fs20\kerning20\cgrid {\cs122\b Issue}{ {\*\bkmkstart IP}{\*\bkmkend IP}Must be specified exactly as proposed in SQL-3, including the graph traversal order (breadth-first, depth-first, or any) and the limits on graph depth etc.
  182. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_aggregate}{\line This operator combines }{\cs49\i grouping}{ of rows from an input table T into equivalence classes, and }{\cs49\i aggregate}{ function computation within each group to produce a table R. The operator first builds equivalence classes based on equal values in a set of (grouping) expressions (handling NULLs as required in SQL), then collapses each equivalence class into a single row by computing an aggregate function on the rows in the class. The operator takes 3 required inputs. The first input is a table. The second is a list of grouping expressions represented by a project_list_anchor (as for the \ldblquote project\rdblquote operator). The grouping expressions form the unique key for the output table. If the list of grouping expressions is empty, the entire input is presumed to be a single equivalence class and the output is a table with a single row. The list of grouping expressions may include all columns of the input table. The aggregation expressions, third input, are passed as a second project_list_anchor (similar to \ldblquote project\rdblquote operator), with the requirement that references to input columns other than those in the grouping list must be nested inside of aggregate functions (e.g., \ldblquote sum\rdblquote ). Note that both lists are \ldblquote project\rdblquote lists, thus permitting arithmetic and assignment of new column names (expressions in the grouping list require a name!). The new name(s) replaces the old name(s) for the output of this operator. The table R contains all the columns mentioned in the two project lists. The output is a unique table.
  183. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls27\pnrnot0\pnstart1 }\ls27\adjustright \fs20\lang1024\cgrid {
  184. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Operators with Two Variants for Ordered and Non-Ordered Tables
  185. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_select, DBOP_order_preserving_select}{\line Subset of rows based on a predicate. The required inputs are one table and one Boolean expression. If the input table is unique, so is the output table. For the \ldblquote order-preserving-select\rdblquote operator, if the input is an ordered table, so is the output.
  186. \par }{\cs72\f17\fs16\lang1024 DBOP_project, DBOP_project_order_preserving}{\line Preserve a subset of columns, possibly with some arithmetic computation within each single row. No duplicate elimination of rows implied. The two required inputs are a table and a project_list_anchor, and the output is a table. For the \ldblquote order-preserving-project\rdblquote operator, if the input is an ordered table, so is the output. If the provider permits, some of the ordering columns may be removed by the projection operator, such that the ordering could not be restored if it were to be lost in a subsequent operation. Only unqualified names are available above a projection level; use an intervening alias node to avoid ambiguous references.
  187. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls28\pnrnot0\pnstart1 }\ls28\adjustright \fs20\lang1024\cgrid {
  188. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Operators for Ordered Tables
  189. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_top, DBOP_top_percent, DBOP_top_plus_ties, DBOP_top_percent_plus_ties}{\line Take the first rows from an ordered table. The operators are different from the sampling operators because they prohibit randomness. The \ldblquote top\rdblquote operations require a fixed count of rows. The \ldblquote top_percent\rdblquote operations require a fraction of the input rows (not an approximation). The \ldblquote plus ties\rdblquote operators include all rows that are equal (with respect to the input table\rquote s sort order) to the last one explicitly requested. The first required input to all operators is an ordered table. The top, and top_plus_ties operators stored the count of rows as a positive integer in the }{\cs49\i ulValue}{ field of the command node. The top_percent* operators take a second required scalar_list_anchor input. The elements of that list contain two scalar_constant members representing a pair of positive integers expressing a fraction between 0 and 1 . The output is an ordered table.
  190. \par }{\cs72\f17\fs16\lang1024 DBOP_rank, DBOP_rank_ties_equally, DBOP_rank_ties_equally_and_skip}{\line Add a new column \ldblquote rank\rdblquote to the table, counting from 1 to the table\rquote s cardinality. If the column name \ldblquote rank\rdblquote already exists, \ldblquote rank2\rdblquote (\ldblquote rank3\rdblquote etc.) is added instead. The \ldblquote ties\rdblquote operations assign the same rank to items that are qual (with respect to the input table\rquote s sort order). The \ldblquote and skip\rdblquote variant skips an appropriate number of values in the counting sequence. Examples: without skipping -- 1, 2, 2, 2, 3, 4, 4, 5; with skipping-- 1, 2, 2, 2, 5, 6, 6, 8. The input is an ordered table. If the operator is \ldblquote rank,\rdblquote the output is an ordered unique table; for the \ldblquote ties\rdblquote operators, it is an ordered table.
  191. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls29\pnrnot0\pnstart1 }\ls29\adjustright \fs20\lang1024\cgrid {
  192. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Operators for Hierarchical Tables
  193. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_navigate}{\line given two tables, one or both of which may be hierarchical tables, compute their join. however, instead of creating large rows with columns from both join inputs, attach to each row of the first table all matching rows from the second table, thus creating a hierarchy of rowsets. Also adds expression-valued columns to both the new parent and the new child rowset.
  194. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls30\pnrnot0\pnstart1 }\hyphpar0\ls30\adjustright \fs20\kerning20\cgrid {There are six inputs:
  195. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s58\fi-240\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent240\pnhang{\pntxtb \'b7}}\hyphpar0\ls9\adjustright \fs20\kerning20\cgrid {Two table-valued subtrees representing the input to the operator
  196. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}A join predicate to make the connection
  197. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}A list element with a name for the new column representing the nested column. The alias name for child levels is mandatory and must be unique across the hierarchy.
  198. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}A list specifying expression-valued columns to be added to the parent level (e.g. sub-totals).
  199. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}A list adding expression-valued columns to the child level (e.g. running sums)"
  200. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls31\pnrnot0\pnstart1 }\ls31\adjustright \fs20\lang1024\cgrid {
  201. \par {\pntext\tab}}\pard\plain \s139\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls32\pnrnot0\pnstart1 }\hyphpar0\ls32\adjustright \f16\fs20\kerning20\cgrid {\cs122\b Issue}{ Should there be varieties inner, left outer, right outer, full outer? The default should probably be a left outer join.
  202. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_nesting}{\line Given a flat table, create a hierarchical table. First, classify the table\rquote s rows as in a grouping operation. For each resulting group, produce a single output row to become part of the parent table. This output row contains columns defined in the parent list plus one nested column. The nested column represents a sub-table, which contains columns defined in the child list. -- The grouping list is a project list, i.e., includes an column name for each element. The parent list is also a project list; its values are computed from the grouping list and aggregates over the input (same grouping). The child list is also a project list, whose values are computed from the input columns. In addition to these three lists, the inputs include an input table and a name for the column representing the sub-table.
  203. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls33\pnrnot0\pnstart1 }\hyphpar0\ls33\adjustright \fs20\kerning20\cgrid {given a hierarchical table, create an additional hierarchical column some of the columns. note that a sub-table already existing in the input may become part of the new top level or the new lower level. in the former case, set equality is required for two input rows to become members of the same group. in the latter case, multi-level nesting is created.
  204. \par {\pntext\tab}}\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls34\pnrnot0\pnstart1 }\hyphpar0\ls34\adjustright {If the input to nesting is an ordered table, it does not affect the behavior of nesting. DBOP_nesting will produce what is specified by the semantics of nesting regardless of the order of the input. An optimizer might take the ordering into consideration when defining the execution strategy for DBOP_nesting to reduce the cost of the grouping, but to the consumer it does not make any difference.
  205. \par {\pntext\tab}}\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls35\pnrnot0\pnstart1 }\hyphpar0\ls35\adjustright {the inputs to this operator are a flat or hierarchical input table, a column name for the nested column (sub-rowset) to be created (the alias name for child levels is mandatory and must be unique across the hierarchy), and the three lists of columns described above.
  206. \par {\pntext\tab}}\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls36\pnrnot0\pnstart1 }\hyphpar0\ls36\adjustright {The order of the parent and child tables produced as output of DBOP_nesting is undefined. This allows for more flexibility of implementation by providers (e.g., the grouping can be done by hashing, and the computation of the chapters can be based on traversing some index or computing some parameterized query.
  207. \par {\pntext\tab}}\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls37\pnrnot0\pnstart1 }\hyphpar0\ls37\adjustright {NULLs are handled during the grouping as in SQL \ldblquote GROUP BY\rdblquote clauses.
  208. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_unnesting}{\line given a hierarchical table, flatten one nested column by repeating the top-level row as many times as there are values in the nested column (rows in the sub-rowset)
  209. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls38\pnrnot0\pnstart1 }\hyphpar0\ls38\adjustright \fs20\kerning20\cgrid {the inputs are a hierarchical table and the column to be flattened.
  210. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_nested_apply}{\line given a hierarchical table, apply any table operation to a nested column, and replace the nested column with the resulting value (in the query result, not in the underlying database), or add the query result as a new column. if multiple levels of nesting exist, the operation to be applied may be \ldblquote nested apply\rdblquote itself. the operations \ldblquote nesting\rdblquote and \ldblquote unnesting\rdblquote are also permitted, as well as operations that result in a scalar, e.g., \ldblquote aggregate\rdblquote and \ldblquote exists.\rdblquote
  211. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls39\pnrnot0\pnstart1 }\hyphpar0\ls39\adjustright \fs20\kerning20\cgrid {the inputs are a hierarchical table and a table operation, a column to which the table operation is to be applied, and (optionally) a column name for a new column. the output is a table, which may be nested or not, depending on the input table and the result type of the table operation applied.
  212. \par {\pntext\tab}}\pard\plain \s139\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls40\pnrnot0\pnstart1 }\hyphpar0\ls40\adjustright \f16\fs20\kerning20\cgrid {\cs122\b Issue }{Should all table operations, eg. \ldblquote select,\rdblquote \ldblquote project,\rdblquote and \ldblquote join,\rdblquote work on nested columns, in addition to the traditional scalar values? Should we permit quantified predicates at any place predicates are permitted (eg. \ldblquote such that there exists a value\rdblquote )? Can we reasonably limit ourselves to \ldblquote project\rdblquote without permitting hierarchical tables to occur in predicates?
  213. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_cross_tab}{\line This node takes as an input a command tree that specifies a hierarchy of rowset chapters. It outputs an augmented result that contains additional rowsets that generate \lquote column membership\rquote and \lquote column aggregates\rquote that are useful for cross-tabulation reports.
  214. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls41\pnrnot0\pnstart1 }\hyphpar0\ls41\adjustright \fs20\kerning20\cgrid {To specify the crosstab, an alias is given to name the top level of the input hierarchy. Also, two lists of aliases are given: RowHierarchy and ColumnHierarchy. The RowHierarchy followed by the ColumnHierarchy must indicate a continuous descending path. The first element of the RowHierarchy is required to be the top level of the input hierarchy.
  215. \par {\pntext\tab}}\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls42\pnrnot0\pnstart1 }\hyphpar0\ls42\adjustright {The crosstab node augments the input hierarchy such that each level of the RowHierarchy contains a nested rowset that is an instance of the ColumnHierarchy. The augmented hierarchy is then nested inside a \lquote top\rquote rowset. This \lquote top\rquote rowset also contains a nested rowset corresponding to the ColumnHierarchy and a list of aggregate values that are computed over the entire input tree. Aggregates are specified via a \lquote project_list\rquote structure and follow the same binding rules as specified by the nesting node.
  216. \par {\pntext\tab}}\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls43\pnrnot0\pnstart1 }\hyphpar0\ls43\adjustright {Fields of a given instance of a level of the ColumnHierarchy are defined as follows:
  217. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s58\fi-240\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent240\pnhang{\pntxtb \'b7}}\hyphpar0\ls9\adjustright \fs20\kerning20\cgrid {aggregates (such as Sum, Avg, Min, Max) are computed over the set of records matching the criteria imposed by the exact drilldown path. For example, drilling down from the \lquote top\rquote rowset will show aggregates that are computed over all the levels of the RowHierarchy.
  218. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}upward references resolve correctly when possible. If the reference doesn\rquote t exist on the path that was taken from the \lquote top\rquote rowset to this instance of a level of the RowHierarchy, then E_OUTOFSCOPE is returned for the evaluation of that field.
  219. \par {\pntext\pard\plain\s58 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}nested rowsets other than those specified in the ColumnHierarchy return E_UNAVAILABLE unless the path that was taken from the \lquote top\rquote rowset includes the last level of the RowHierarchy.
  220. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls44\pnrnot0\pnstart1 }\hyphpar0\ls44\adjustright \fs20\kerning20\cgrid {The exact list of parameters for this node are: a command tree, an alias for the input, a list of aliases for the RowHierarchy, a list of aliases for the ColumnHierarchy, and an optional project_list of aggregates.
  221. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls45\pnrnot0\pnstart1 }\ls45\adjustright \fs20\lang1024\cgrid {
  222. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Comparison Operators
  223. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_is_NULL, DBOP_is_NOT_NULL}{\line Comparison to NULL value. Both operators are needed, since \ldblquote NOT is_NULL\rdblquote and \ldblquote is_NOT_NULL\rdblquote differ in SQL if the operand is a row with some (but not all) NULL values. One scalar input, Boolean result.
  224. \par }{\cs72\f17\fs16\lang1024 DBOP_equal, DBOP_not_equal, DBOP_less, DBOP_less_equal, DBOP_greater, DBOP_greater_equal, DBOP_equal_all, DBOP_not_equal_all, DBOP_less_all, DBOP_less_equal_all, DBOP_greater_all, DBOP_greater_equal_all, DBOP_equal_any, DBOP_not_equal_any, DBOP_less_any, DBOP_less_equal_any, DBOP_greater_any, DBOP_greater_equal_any}{\line Comparison operators with semantics as in SQL. For the normal comparison operators, the two inputs rows must both be scalars, or both be rows. Otherwise, the scalar is converted into a one-column row as necessary. The \ldblquote _all\rdblquote and \ldblquote _any\rdblquote operators require a scalar left input and a table-valued right input, where a column value in a }{\cs49\i chaptered}{ column is a special case of a table. Boolean output.
  225. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls46\pnrnot0\pnstart1 }\hyphpar0\ls46\adjustright \fs20\kerning20\cgrid {Row-valued comparison refers to the comparison between two row instances. Multi-valued comparison refers to the comparison between a row instance and a table (i.e., _all, any operators). The rules for row-valued comparisons are based on ANSI SQL semantics. The rules for multi-valued comparisons are an extension of the rule-valued ones.
  226. \par {\pntext\tab}}\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls46\pnrnot0\pnstart1 }\hyphpar0\ls46\adjustright {The weight of this node is stored as a DBVALUEKIND_I4 in the value.lValue field.
  227. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_anybits, DBOP_allbits, DBOP_anybits_any, DBOP_allbits_any, DBOP_anybits_all, DBOP_allbits_all}{\line These operators are exactly like other comparison operators in terms of syntax: they take two inputs, the first being a column, the second being a scalar value to compare with the column. The specific semantics of these nodes are as follows. DBOP_any_bits is true if the column value bitwise-ANDed with the constant is non-zero. DBOP_all_bits is true if the column value bitwise-ANDed with the constant equals the constant. There are also \ldblquote _any\rdblquote and \ldblquote _all\rdblquote versions of these nodes, as with other comparison operators.
  228. \par }\pard \s94\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright {The weight of this node is stored as a DBVALUEKIND_I4 in the value.lValue field.
  229. \par }\pard \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright {\cs72\f17\fs16\lang1024 DBOP_between, DBOP_between_unordered}{\line SQL comparison operations. \ldblquote Between_unordered\rdblquote first sorts the bounding values; \ldblquote a between_unordered b and c\rdblquote is equivalent to \ldblquote a >= min (b, c) and a <= max (b, c)\rdblquote , whereas \ldblquote a between b and c\rdblquote is equivalent to \ldblquote a >= b and a <= c.\rdblquote All variants of \ldblquote between\rdblquote are inclusive, meaning that a value equal to one of the end-points is acceptable. There is no exclusive \ldblquote between\rdblquote variant. Three scalar inputs (which may be rows), Boolean result.
  230. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {DBOP_match, DBOP_match_unique,
  231. \par DBOP_match_partial, DBOP_match_partial_unique,
  232. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_match_full, DBOP_match_full_unique}{\line SQL\rquote s match predicate. Two scalar inputs (which may be rows), Boolean output.
  233. \par }{\cs72\f17\fs16\lang1024 DBOP_and, DBOP_or, DBOP_xor, DBOP_equivalent}{\line These Boolean operators representing the logical AND, OR, exclusive OR, and equivalence, take two or more Boolean inputs (except DBOP_equivalent which takes exactly two), and produce a Boolean result. The weight of this node is stored as a DBVALUEKIND_I4 in the value.lValue field.
  234. \par }{\cs72\f17\fs16\lang1024 DBOP_not}{\line One Boolean input, Boolean result. The weight of this node is stored as a DBVALUEKIND_I4 in the value.lValue field.
  235. \par }{\cs72\f17\fs16\lang1024 DBOP_implies}{\line This operator represents Boolean implication. It takes two mandatory inputs of type Boolean and produces a Boolean output according to the following table:
  236. \par }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx1189\clvertalt\cltxlrtb \cellx2172\clvertalt\cltxlrtb \cellx7039\pard\plain \s63\sl-220\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \b\f16\fs18\kerning20\cgrid {Input1\cell Input2\cell Result\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx7039\pard\plain \s64\li30\ri30\sa60\sl-40\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\brdrb\brdrs\brdrw15 \hyphpar0\adjustright \fs20\lang1024\cgrid {\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx1189\clvertalt\cltxlrtb \cellx2172\clvertalt\cltxlrtb \cellx7039\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {False\cell False\cell True\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {False\cell True\cell True\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {True\cell False\cell False\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft360\trkeep \clvertalt\cltxlrtb \cellx1189\clvertalt\cltxlrtb \cellx2172\clvertalt\cltxlrtb \cellx7039\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {True\cell True\cell True\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls47\pnrnot0\pnstart1 }\ls47\adjustright \fs20\lang1024\cgrid {
  237. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Operators for Scalars
  238. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_scalar_parameter}{\line Scalar parameter, named by a string. The name must be unique within all parameters for the command, including the parameters of SQL commands in textual nodes in the same command tree. No inputs, scalar output.
  239. \par }{\cs72\f17\fs16\lang1024 DBOP_scalar_function}{\line A scalar function identified by name, GUID, etc. similar to a column-name. The number of arguments (inputs) depends on the function. Scalar output.
  240. \par }{\cs72\f17\fs16\lang1024 DBOP_plus, DBOP_minus, DBOP_times, DBOP_over, DBOP_div, DBOP_modulo, DBOP_power}{\line Standard arithmetic. \ldblquote div\rdblquote always returns an integer result, such that \ldblquote (a div b) times b plus a modulo b==a\rdblquote for all non-zero values for b. Two scalar inputs, scalar result.
  241. \par }{\cs72\f17\fs16\lang1024 DBOP_like, DBOP_sounds_like}{\line Regular expression matching. Two string inputs. For DBOP_like, the operator node includes a GUID to indicate the language or system whose regular expression syntax is meant. Fixed GUIDs are assigned for SQL, DOS, OFS, and MAPI. Boolean result. The DBOP_like node uses the DBLIKE structure to hold the GUID and a weight.
  242. \par }\pard\plain \s293\fi240\nowidctlpar\widctlpar\adjustright \f2\fs20\cgrid {\fs16 typedef struct tagDBLIKE\{
  243. \par }\pard \s293\nowidctlpar\widctlpar\adjustright {\fs16 LONG lWeight;\tab // weight of the node
  244. \par GUID guidDialect;\tab // dialect\rquote s guid
  245. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\f2\fs16 \tab \}\tab DBLIKE;}{
  246. \par }{\cs72\f17\fs16\lang1024 DBOP_like_any, DBOP_like_all}{\line Regular expression matching. Take a scalar first input and a table-valued second input and produce a Boolean valued output.
  247. \par }{\cs72\f17\fs16\lang1024 DBOP_is_INVALID, DBOP_is_TRUE, DBOP_is_FALSE}{\line SQL\rquote s tests on predicates. One scalar input, Boolean result.
  248. \par }{\cs72\f17\fs16\lang1024 DBOP_overlaps, DBOP_case_condition, DBOP_case_value, DBOP_nullif, DBOP_cast, DBOP_coalesce, DBOP_position, DBOP_extract, DBOP_char_length, DBOP_octet_length, DBOP_bit_length, DBOP_substring, DBOP_upper, DBOP_lower, DBOP_trim, DBOP_translate, DBOP_convert, DBOP_string_concat, DBOP_current_date, DBOP_current_time, DBOP_current_timestamp
  249. \par {\pntext\tab}}\pard\plain \s139\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls48\pnrnot0\pnstart1 }\hyphpar0\ls48\adjustright \f16\fs20\kerning20\cgrid {\cs122\b Issue}{ SQL functions; to be defined better here. This list is to be a union of the functions in SQL 92 and in ODBC 2.0, with semantics copied from those sources.
  250. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls49\pnrnot0\pnstart1 }\ls49\adjustright \fs20\lang1024\cgrid {
  251. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Content Search Operators
  252. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {The following operators describe search operations on columns containing text. These operators behave like any other boolean operatos, however, when used in conjunction with the DBOP_content_select operator, the resulting tables include two special columns describing the hit count and rank.
  253. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_content_select}{\line This operator is similar to the DBOP_select operator. It takes a table T and boolean expression (selection condition) as inputs, and produces a table R as output. The rows in R are those rows that satisfy the selection condition. However, the columns of R include all the columns of T plus three additional columns representing the hit count, a rank, and a rank vector which together represent the quality of the match.
  254. \par }{\cs72\f17\fs16\lang1024 DBOP_content, DBOP_content_freetext}{\line These operators are used to express content searches for words or phrases found in a column. The operators take one required input, a column name, specifying the column in which to search. There are two special column identifiers. The first, PROPID_STG_CONTENTS, means "look in the object contents" for data providers whose rows are actually objects. The second, PROPID_ QUERY_ALL, means "look in all columns." The text search pattern is stored in the DBCONTENT structure within the node (see below). DBOP_content_freetext differs from DBOP_content in that it instructs the query engine to use all of its text-processing tricks in evaluting the restriction. The DBOP_content node may specify a method to generate words matching a pattern (this field is ignored for DBOP_content_ freetext), which determines the manner in which the initial query term is expanded before searching text. GENERATE_METHOD_EXACT matches only the word or phrase specified in the content node. GENERATE_METHOD_PREFIX matches all words that begin with the text specified in the node. GENERATE_METHOD_INFLECT causes linguistic inflection of the specified word. The English word "run", for example, may expand to "run", "running", "ran", "runs" etc. Providers may support other generation methods (e.g., GENERATE_METHOD_MISSPELLING, GENERATE_METHOD_REGEX). The generation methods specified in this node are mutually exclusive. Not all of the levels specified above are available for every language. If GENERATE_METHOD_PREFIX or GENERATE_METHOD_INFLECT are used with a phrase (multiple words), the expansion applies to each word separately. The exact method of splitting a phrase into words is implementation-specific. These nodes also have a weight field, which may be used by a sophisticated consumer to give more or less weight in hit ranking to matches on this particular content restriction. The output of these operators is Boolean. The arguments internal to this node are specified using the following structure:
  255. \par {\pntext\tab}}\pard\plain \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls50\pnrnot0\pnstart1 }\hyphpar0\ls50\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBCONTENT \{
  256. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls51\pnrnot0\pnstart1 }\hyphpar0\ls51\adjustright {\tab DWORD \tab dwGenerateMethod;\tab // exact, prefix, inflect
  257. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls52\pnrnot0\pnstart1 }\hyphpar0\ls52\adjustright {\tab LONG \tab lWeight;\tab \tab // weight of node
  258. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls53\pnrnot0\pnstart1 }\hyphpar0\ls53\adjustright {\tab LCID \tab lcid;\tab \tab \tab // locale
  259. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls54\pnrnot0\pnstart1 }\hyphpar0\ls54\adjustright {\tab LPWSTR\tab pwszPhrase;\tab \tab // text
  260. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls55\pnrnot0\pnstart1 }\hyphpar0\ls55\adjustright {\} DBCONTENT;
  261. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls56\pnrnot0\pnstart1 }\hyphpar0\ls56\adjustright {
  262. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls57\pnrnot0\pnstart1 }\hyphpar0\ls57\adjustright {#define GENERATE_METHOD_EXACT \tab \tab ( 0 )
  263. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls58\pnrnot0\pnstart1 }\hyphpar0\ls58\adjustright {#define GENERATE_METHOD_PREFIX\tab ( 1 )
  264. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls59\pnrnot0\pnstart1 }\hyphpar0\ls59\adjustright {#define GENERATE_METHOD_INFLECT\tab \tab ( 2 )
  265. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls60\pnrnot0\pnstart1 }\ls60\adjustright \fs20\lang1024\cgrid {
  266. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls61\pnrnot0\pnstart1 }\hyphpar0\ls61\adjustright \fs20\kerning20\cgrid {PSGUID_QUERY is the guid for the property set for special content columns. The following are some of the interesting columns in this set.
  267. \par {\pntext\tab}}\pard\plain \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls62\pnrnot0\pnstart1 }\hyphpar0\ls62\adjustright \f17\fs16\lang1024\cgrid {#define PROPID_QUERY_RANKVECTOR (0x2) // column used to return rank
  268. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls63\pnrnot0\pnstart1 }\hyphpar0\ls63\adjustright { // values of the
  269. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls64\pnrnot0\pnstart1 }\hyphpar0\ls64\adjustright { // content_vector_or operator
  270. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls65\pnrnot0\pnstart1 }\hyphpar0\ls65\adjustright {
  271. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls66\pnrnot0\pnstart1 }\hyphpar0\ls66\adjustright {#define PROPID_QUERY_RANK (0x3) // column used to return the final
  272. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls67\pnrnot0\pnstart1 }\hyphpar0\ls67\adjustright { // rank of each row
  273. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls68\pnrnot0\pnstart1 }\hyphpar0\ls68\adjustright {
  274. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls69\pnrnot0\pnstart1 }\hyphpar0\ls69\adjustright {#define PROPID_QUERY_HITCOUNT (0x4) // column used to return the
  275. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls70\pnrnot0\pnstart1 }\hyphpar0\ls70\adjustright { // number of content hits found
  276. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls71\pnrnot0\pnstart1 }\hyphpar0\ls71\adjustright { // in a row
  277. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls72\pnrnot0\pnstart1 }\hyphpar0\ls72\adjustright {
  278. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls73\pnrnot0\pnstart1 }\hyphpar0\ls73\adjustright {#define PROPID_QUERY_ALL\tab (0x6) // search in all text associated with a
  279. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls74\pnrnot0\pnstart1 }\hyphpar0\ls74\adjustright { // row
  280. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls75\pnrnot0\pnstart1 }\hyphpar0\ls75\adjustright {
  281. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls76\pnrnot0\pnstart1 }\hyphpar0\ls76\adjustright {#define PROPID_STG_CONTENTS (0x13) // search inside the contents on
  282. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls77\pnrnot0\pnstart1 }\hyphpar0\ls77\adjustright { // an object
  283. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls78\pnrnot0\pnstart1 }\hyphpar0\ls78\adjustright {
  284. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls79\pnrnot0\pnstart1 }\hyphpar0\ls79\adjustright {DBOP_content_proximity
  285. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls80\pnrnot0\pnstart1 }\ls80\adjustright \fs20\lang1024\cgrid {
  286. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls81\pnrnot0\pnstart1 }\hyphpar0\ls81\adjustright \fs20\kerning20\cgrid {Proximity nodes are used to rank hits within queries that search for several different pieces of text. The rank of an object matched by a proximity node increases as the words and phrases move closer together. The formula used to compute rank is specific to a given implementation. Generally a proximity node should be used as an n-ary AND node among multiple content restrictions. The internal arguments of this node are a proximity unit (DWORD), a proximity distance (ULONG), and a weight on the node (LONG), all specified with the DBCONTENTPROXIMITY structure.
  287. \par }\pard\plain \s293\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \f2\fs20\cgrid {
  288. \par }\pard \s293\fi240\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright {\fs16 typedef struct tagDBCONTENTPROXIMITY \{
  289. \par }\pard \s293\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright {\fs16 DWORD dwProximityUnit;\tab // units
  290. \par ULONG ulProximityDistance; // how near is near?
  291. \par LONG lWeight; // node weight
  292. \par }\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\hyphpar0\adjustright \fs20\kerning20\cgrid {\f2\fs16 \}\tab DBCONTENTPROXIMITY;}{
  293. \par }\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\hyphpar0\adjustright {
  294. \par }\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\hyphpar0\adjustright {The following proximity units may be supported:
  295. \par }\pard\plain \s293\fi240\nowidctlpar\widctlpar{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\adjustright \f2\fs20\cgrid {\fs16 #define PROXIMITY_UNIT_WORD ( 0 )
  296. \par #define PROXIMITY_UNIT_SENTENCE ( 1 )
  297. \par #define PROXIMITY_UNIT_PARAGRAPH\tab \tab ( 2 )
  298. \par }\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlcont\ilvl0\ls0\pnrnot0\pndec }\hyphpar0\adjustright \fs20\kerning20\cgrid {\f2\fs16 #define PROXIMITY_UNIT_CHAPTER ( 3 )}{
  299. \par {\pntext\tab}}\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls81\pnrnot0\pnstart1 }\hyphpar0\ls81\adjustright {
  300. \par {\pntext\tab}}\pard \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls81\pnrnot0\pnstart1 }\hyphpar0\ls81\adjustright {The node takes two or more input subtrees, each of which should contain DBOP_content, DBOP_content_freetext, DBOP_content_proximity, DBOP_and, DBOP_or, or DBOP_not nodes. The output of the node is Boolean. It is logically similar to an AND, in the sense that, to produce a true value, all input subtrees must evaluate to true.
  301. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_content_vector_or}{\line Used to support advanced content retrieval models. This node acts as an n-ary OR node, with two main differences. First, when a vector node is used the programmer has the option of retrieving a rank vector for each object, as a special, well-known column. This vector contains the rank of each child node in the vector. Second, the formula used to compute the overall rank of the vector may be specified. The following ranking formulas may be supported:
  302. \par {\pntext\tab}}\pard\plain \s57\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls82\pnrnot0\pnstart1 }\hyphpar0\ls82\adjustright \fs20\kerning20\cgrid {Minimum/AND (VECTOR_RANK_MIN)\tab
  303. \par {\pntext\tab}}\pard \s57\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls83\pnrnot0\pnstart1 }\hyphpar0\ls83\adjustright {Maximum/OR (VECTOR_RANK_MAX)\tab
  304. \par {\pntext\tab}}\pard \s57\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls84\pnrnot0\pnstart1 }\hyphpar0\ls84\adjustright {Inner product (VECTOR_RANK_INNER)\tab
  305. \par {\pntext\tab}}\pard \s57\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls85\pnrnot0\pnstart1 }\hyphpar0\ls85\adjustright {Dice coefficient (VECTOR_RANK_DICE)\tab
  306. \par {\pntext\tab}}\pard \s57\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls86\pnrnot0\pnstart1 }\hyphpar0\ls86\adjustright {Jaccard coefficient (VECTOR_RANK_JACCARD)\tab
  307. \par {\pntext\tab}}\pard \s57\li480\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls87\pnrnot0\pnstart1 }\hyphpar0\ls87\adjustright {Cosine (VECTOR_RANK_COSINE)
  308. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls88\pnrnot0\pnstart1 }\hyphpar0\ls88\adjustright \fs20\kerning20\cgrid {There may be at most one vector node in the tree. The internal arguments of this node are a ranking method (DWORD) and a weight on the node (LONG), specified within the DBCONTENTVECTOR structure.
  309. \par {\pntext\tab}}\pard\plain \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls89\pnrnot0\pnstart1 }\hyphpar0\ls89\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBCONTENTVECTOR \{
  310. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls90\pnrnot0\pnstart1 }\hyphpar0\ls90\adjustright {\tab DWORD dwRankingMethod;\tab \tab // jaccard, cosine, etc.
  311. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls93\pnrnot0\pnstart1 }\hyphpar0\ls93\adjustright {\tab LONG lWeight;\tab // weight of the vector node.
  312. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls94\pnrnot0\pnstart1 }\hyphpar0\ls94\adjustright {\}DBCONTENTVECTOR;
  313. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls95\pnrnot0\pnstart1 }\hyphpar0\ls95\adjustright {
  314. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls96\pnrnot0\pnstart1 }\ls96\adjustright \fs20\lang1024\cgrid {
  315. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls97\pnrnot0\pnstart1 }\hyphpar0\ls97\adjustright \fs20\kerning20\cgrid {There are two or more children, of exactly the same types as with DBOP_content_proximity above. The output is Boolean. It acts as an n-ary OR of the input subtrees.
  316. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Update Operators
  317. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_delete}{\line Remove rows from a table. Delete takes two inputs. The first required input is a DBOP_table_name node describing the table being updated. The second optional input is a table-valued expression representing the rows to be deleted. If the second input is not provided, then all rows of the table specified in the first input are deleted. The requirement as to whether the input table being updated must be a base table is provider-specific.
  318. \par }{\cs72\f17\fs16\lang1024 DBOP_update}{\line Modify the values of one or more columns in rows from a table which satisfy a condition. Update takes two required inputs. The first required input is a table-valued expression describing the set of rows being updated. The second required input is a DBOP_set_list_anchor node containing the update expressions (e.g., SET A=A+1, B=B-5). The column names represented in the DBOP_set_list_elements must be unambiguous. That is, in cases where the tuples to be updated are defined by a join expression over mutliple tables, and a column being updated appears in more than one table, the reference to the updated column must be fully qualified (DBOP_qualified_column_name). For example, the update statement
  319. \par {\pntext\tab}}\pard\plain \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls98\pnrnot0\pnstart1 }\hyphpar0\ls98\adjustright \f17\fs16\lang1024\cgrid {UPDATE A INNER JOIN B ON A.F1=B.F1 SET A.X = 1, B.Y = 2 WHERE A.Z =10
  320. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls99\pnrnot0\pnstart1 }\ls99\adjustright \fs20\lang1024\cgrid {
  321. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls100\pnrnot0\pnstart1 }\hyphpar0\ls100\adjustright \fs20\kerning20\cgrid {is represented by an update node whose first input is a subtree representing the expression
  322. \par {\pntext\tab}}\pard\plain \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls101\pnrnot0\pnstart1 }\hyphpar0\ls101\adjustright \f17\fs16\lang1024\cgrid {A INNER JOIN B ON A.F1=B.F1 AND A.Z = 10
  323. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls102\pnrnot0\pnstart1 }\ls102\adjustright \fs20\lang1024\cgrid {
  324. \par {\pntext\tab}}\pard\plain \s51\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlbody\ilvl0\ls103\pnrnot0\pnstart1 }\hyphpar0\ls103\adjustright \fs20\kerning20\cgrid {and the second input is a DBOP_set_list_anchor containing two list elements for A.X = 1, and B.Y = 2. The requirement as to whether the input table being updated must be a base table is provider specific.
  325. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_insert}{\line Add rows to a table, specifying . Three arguments. One required row_constructor or table_constructor. One required table, one required column_list. Number of elements of column_list must match number of values in the constructed row(s). Columns not listed in the column_list must have default values or be nullable. Requirements as to whether table input must be a base table are provider specific.
  326. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Aggregate Functions
  327. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_min, DBOP_max, DBOP_count, DBOP_sum, DBOP_avg, DBOP_any_sample, DBOP_stddev, DBOP_stddev_pop, DBOP_var, DBOP_var_pop, DBOP_first, DBOP_last}{\line Aggregate functions, to be used in the aggregation operation, including standard deviation and variance for samples (using division by \ldblquote N-1\rdblquote ) and complete populations (division by \ldblquote N\rdblquote ). All operators (except count) take one mandatory input representing a column_name on which the function will be computed. A count node with no inputs indicates SQL\rquote s COUNT(*). The DISTINCT and ALL SQL set quantifiers, e.g., SELECT SUM (DISTINCT X) FROM T, SELECT SUM (ALL X) FROM T), are indicated by setting the appropriate bits of the dwSetQuantifier field of DBSETFUNC struct as follows:
  328. \par {\pntext\tab}}\pard\plain \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls104\pnrnot0\pnstart1 }\hyphpar0\ls104\adjustright \f17\fs16\lang1024\cgrid {
  329. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls105\pnrnot0\pnstart1 }\hyphpar0\ls105\adjustright {#define DBSETFUNC_NONE\tab \tab = 0x00,
  330. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls106\pnrnot0\pnstart1 }\hyphpar0\ls106\adjustright {#define DBSETFUNC_ALL\tab \tab = 0x01,
  331. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls107\pnrnot0\pnstart1 }\hyphpar0\ls107\adjustright {#define DBSETFUNC_DISTINCT\tab = 0x02
  332. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls108\pnrnot0\pnstart1 }\hyphpar0\ls108\adjustright {
  333. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls109\pnrnot0\pnstart1 }\ls109\adjustright \fs20\lang1024\cgrid {
  334. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {The node produces a scalar output.
  335. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls110\pnrnot0\pnstart1 }\ls110\adjustright \fs20\lang1024\cgrid {
  336. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Mixed Operators
  337. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_in}{\line Membership test of a scalar or row in a table. Inputs are a row and a table, Boolean result.
  338. \par }{\cs72\f17\fs16\lang1024 DBOP_exists, DBOP_unique}{\line These operators take a table T as input and produce a Boolean result as output. DBOP_exists evaluates to TRUE if the cardinality of T is greater than zero; otherwise it evaluates to FALSE. DBOP_unique detects duplicate rows in T. If any two rows in T are equal to one another, DBOP_unique evaluates to FALSE; otherwise it evaluates to TRUE.
  339. \par }{\cs72\f17\fs16\lang1024 DBOP_subset, DBOP_proper_subset, DBOP_superset, DBOP_proper_superset, DBOP_disjoint,}{\line These operators take two tables T1 and T2 as input and determine whether T1 is a subset, proper_subset, superset, proper_superset, or disjoint set of T2. The output is Boolean.
  340. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Special Operators
  341. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_pass_through}{\line Pass the entire subtree to a provider. All operations on the subtree are to be delegated to the provider, including parts of global tree operations such as validation, and can therefore be unexpectedly expensive. The command tree must be self-contained. The provider is identified with a string or a GUID. One input tree with any result type, output type is the same as input type.
  342. \par }{\cs72\f17\fs16\lang1024 DBOP_defined_by_GUID}{\line This is a major means of extensibility: An operator not included explicitly in this enumerated type, known to both consumer and provider by its GUID. Consumer and provider must also agree on arity, type, etc. for the operator. The cost of leaving the set of possible operators mostly undefined here is that type checking is entirely left to the provider implementation. Additional node information may be provided in the DBBYGUID struct inside the node. The information stored in pbInfo is provider-specific.
  343. \par {\pntext\tab}}\pard\plain \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls111\pnrnot0\pnstart1 }\hyphpar0\ls111\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBBYGUID \{
  344. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls112\pnrnot0\pnstart1 }\hyphpar0\ls112\adjustright {\tab BYTE\tab *\tab pbInfo; \tab \tab // extra node information
  345. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls113\pnrnot0\pnstart1 }\hyphpar0\ls113\adjustright {\tab ULONG\tab \tab cbInfo;\tab \tab // size of the data in pbInfo
  346. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls114\pnrnot0\pnstart1 }\hyphpar0\ls114\adjustright {\tab GUID\tab \tab guid;\tab \tab \tab // this node\rquote s GUID
  347. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls115\pnrnot0\pnstart1 }\hyphpar0\ls115\adjustright {\} DBBYGUID;
  348. \par {\pntext\tab}}\pard \s69\li240\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx530\tx820\tx1110\tx1400\tx1690\tx1980\tx2270\tx2570\tx2850{\*\pn \pnlvlbody\ilvl0\ls116\pnrnot0\pnstart1 }\hyphpar0\ls116\adjustright {
  349. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls117\pnrnot0\pnstart1 }\ls117\adjustright \fs20\lang1024\cgrid {
  350. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_text_command}{\line A command in a textual command language, typically an SQL expression. The language and its dialect are indicated in the }{\cs49\i guidDialect}{ of the DBTEXT struct stored in the }{\cs49\i value}{ field in the node structure. Fixed values are defined for SQL-92, SQL-92-intermediate, SQL-92-entry, T-SQL, and Access SQL. In SQL, possible subtrees in the Nile command tree are references with strings \ldblquote ::1\rdblquote , \ldblquote ::2\rdblquote , etc. The textual command is stored in the }{\cs49\i pwszText}{ field of the DBTEXT structure. Scalar- or table-valued output. This operator is used by OLE DB consumers to communicate complete or partial SQL-statements. If the operator has no inputs, then the text stored in }{\cs49\i pwszText}{ should contain a complete SQL statement. If the operator has an input, then the DBOP_text_command contains a partial SQL statement and its input is the operator to which the partial statement corresponds. For example, if an OLE DB consumer wants to communicate just the FROM clause of a SQL statement to some other consumer, then the partial text will contain a string like \ldblquote FROM T1, T2\rdblquote and the input to the operator will be a DBOP_from_list_anchor.
  351. \par }{\cs72\f17\fs16\lang1024 DBOP_SQL_select}{\line The equivalent of a SQL SELECT statement, with its component clauses SELECT, FROM, WHERE, GROUP BY, HAVING, and ORDER BY, in this sequence. The SELECT and GROUP-BY clauses are represented by project lists. The FROM clause input, represented by a from_list_anchor, contains from_list_elements that take a table-valued expression as input. The table-valued expression may refer to a base table, a subquery, or a table-valued result generated by an OLE DB query processor. The WHERE and HAVING clauses are represented by a Boolean expression each. The ORDER BY clause is represented by a sort list. All clauses must be present in the node, but may be empty. An empty list is denoted by a *_anchor node with no *_element nodes attached to it. SQL scoping (visibility) rules apply. The SQL DISTINCT option is specified by setting the }{\cs49\i fValue}{ field of the SQL_select node as TRUE. The output is a table. If an ORDER BY clause is given and DISTINCT is not specified, then the output is an ordered table. If DISTINCT is specified and no ORDER BY clause is specified, then the output is a unique table. If both DISTINCT and an ORDER BY clause are specified, then the output is an ordered-unique table.
  352. \par }{\cs72\f17\fs16\lang1024 DBOP_remote_table}{\line Refer directly to a table in an external data source without creating a synonym for it beforehand. Its children are identical to that of the DBOP_create_synonym node and the external data source is identified in the same way.
  353. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Operators for \ldblquote AddPostProcessing\rdblquote
  354. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_prior_command_tree}{\line Used when adding post-processing operations. This operator occurs in the post-processing tree but never in a complete command tree. No inputs, table- or scalar-valued, depending on the previous command tree.
  355. \par }{\cs72\f17\fs16\lang1024 DBOP_add_columns}{\line Used when adding post-processing operations, this operation is the only operation that can add columns \ldblquote projected away\rdblquote by earlier operations, i.e. columns from tables that already participate in the query. The inputs are a table and a projection list. The output is a table.
  356. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls118\pnrnot0\pnstart1 }\ls118\adjustright \fs20\lang1024\cgrid {
  357. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Lists of Arguments
  358. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {An empty list is denoted by the corresponding anchor node with no element nodes.
  359. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs72\f17\fs16\lang1024 DBOP_column_list_anchor, DBOP_column_list_element}{\line These operators are used to define a list of column aliases (see DBOP_alias). Each element represents the name alias as a string value in the pwszValue field of the command node. Elements take no inputs.
  360. \par }{\cs72\f17\fs16\lang1024 DBOP_command_list_anchor, DBOP_command_list_element}{\line These operators are used to define a sequence of OLE DB commands. Each element takes one command tree input representing either a DML or DDL command.
  361. \par }{\cs72\f17\fs16\lang1024 DBOP_from_list_anchor, DBOP_from_list_element}{\line The list of tables in a SQL \ldblquote FROM\rdblquote clause. Each element requires a table-valued expression as input, which can be represented by a table_name or alias to serve as SQL \ldblquote correlation name.\rdblquote
  362. \par }{\cs72\f17\fs16\lang1024 DBOP_project_list_anchor, DBOP_project_list_element}{\line The anchor and an element in a list of columns for a projection. The anchor has an element as its first child, but no other information. Each element assigns a column name, which is stored in the string portion of the tree node, to a scalar expression, which is given as the element node\rquote s input tree. In addition, outall_name and qualifier_name must be in the project_list of a project node (as opposed to a project_list of an aggregate node). If a project list includes the member outall_name and a column_name that is a member of the columns implied by outall_name, then that column will appear twice in the result.
  363. \par }{\cs72\f17\fs16\lang1024 DBOP_row_list_anchor, DBOP_row_list_element}{\line The anchor and element in a list of rows for constructing a table. Each element has one DBOP_row input. At least one row_list_element must be in each list.
  364. \par }{\cs72\f17\fs16\lang1024 DBOP_scalar_list_anchor, DBOP_scalar_list_element}{\line The anchor and element in a list of scalar constants for constructing a row. Each element takes one DBOP_scalar_constant as input. At least one scalar list element must be in each list.
  365. \par }{\cs72\f17\fs16\lang1024 DBOP_set_list_anchor, DBOP_set_list_element}{\line The anchor and element in a list of columns for updating. Each element has two inputs, one a column name and one an expression of the same type as the column. At least one set_list_element must be in each list.
  366. \par }{\cs72\f17\fs16\lang1024 DBOP_sort_list_anchor, DBOP_sort_list_element}{\line The anchor and an element in a list of columns for sorting. This list is different from a projection list in that no new column name is assigned but a ascending/descending flag and an optional locale id are indicated. Each element includes a scalar input expression.
  367. \par }\pard\plain \s5\li-780\ri-1440\sb20\sa120\sl-440\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel4\adjustright \fs40\kerning20\cgrid {Data Definition Operators
  368. \par }\pard\plain \s142\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \f16\fs20\kerning20\cgrid {\cs122\b Issue}{ Nodes additional to those already defined in DBCOMMANDTREE need to be enumerated/defined here to reflect functionality in MSQL section.
  369. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls119\pnrnot0\pnstart1 }\ls119\adjustright \fs20\lang1024\cgrid {
  370. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {All scalar-, row-, table-, and Boolean-valued expressions required by DDL operators are represented in the same way as in DML expressions.
  371. \par }\pard\plain \s94\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {\cs250\f17\fs18\lang1024 DBOP_alter_character_set}{\line Node used to alter the defintion of an existing }{\cs49\i character set.}{ The name of the }{\cs49\i character set}{ to be altered is specified directly by this node.
  372. \par }{\cs250\f17\fs18\lang1024 DBOP_alter_collation}{\line Node used to alter the defintion of an existing }{\cs49\i collation.}{ The name of the }{\cs49\i collation}{ to be altered is specified directly by this node.
  373. \par }{\cs250\f17\fs18\lang1024 DBOP_alter_domain}{\line Node used to alter the defintion of an existing }{\cs49\i domain.}{ The name of the }{\cs49\i domain}{ to be altered is specified directly by this node.
  374. \par }{\cs250\f17\fs18\lang1024 DBOP_alter_index}{\line Node used to alter the defintion of an existing }{\cs49\i index.}{ The name of the }{\cs49\i index}{ to be altered is specified directly by this node.
  375. \par }{\cs250\f17\fs18\lang1024 DBOP_alter_procedure}{\line Node used to alter the defintion of an existing }{\cs49\i procedure.}{ The name of the }{\cs49\i procedure}{ to be altered is specified directly by this node.
  376. \par }{\cs250\f17\fs18\lang1024 DBOP_alter_schema}{\line Node used to alter the defintion of an existing }{\cs49\i schema.}{ The name of the }{\cs49\i schema}{ to be altered is specified directly by this node.
  377. \par }{\cs250\f17\fs18\lang1024 DBOP_alter_table}{\line Node used to alter the defintion of an existing }{\cs49\i table.}{ The name of the }{\cs49\i table}{ to be altered is specified directly by this node.
  378. \par }{\cs250\f17\fs18\lang1024 DBOP_alter_trigger}{\line Node used to alter the defintion of an existing }{\cs49\i trigger.}{ The name of the }{\cs49\i trigger}{ to be altered is specified directly by this node.
  379. \par }{\cs250\f17\fs18\lang1024 DBOP_alter_view}{\line Node used to alter the defintion of an existing }{\cs49\i view.}{ The name of the }{\cs49\i view}{ to be altered is specified directly by this node.
  380. \par }{\cs250\f17\fs18\lang1024 DBOP_coldef_list_anchor}{\line Node identifying the start of a list of }{\cs49\i coldef_list_element}{ nodes.
  381. \par }{\cs250\f17\fs18\lang1024 DBOP_coldef_list_element}{\line Node used to specify the definition of a column (typically in conjunction with a create_table node). Note that this node does not attempt to describe all of the properties that may be associated with a column, but just the basic, immutable properties. More elaborate properties can be added to the column definition by adding a }{\cs49\i property_list_anchor}{ and subsequent }{\cs49\i property_list_element}{ nodes.
  382. \par }{\cs250\f17\fs18\lang1024 DBOP_create_assertion}{\line Node used to specify creation of an }{\cs49\i assertion}{. An }{\cs49\i assertion}{ is a standalone constraint in a schema and is typically used to specify a constraint that affects more than one table. The name of the }{\cs49\i assertion}{ to be created is specified directly by this node.
  383. \par }{\cs250\f17\fs18\lang1024 DBOP_create_character_set}{\line Node used to specify creation of a }{\cs49\i character set}{. A }{\cs49\i character set}{ is a collection of characters used to create character strings. is The name of the }{\cs49\i character set}{ to be created is specified directly by this node.
  384. \par }{\cs250\f17\fs18\lang1024 DBOP_create_collation}{\line Node used to specify creation of a }{\cs49\i collation}{. A }{\cs49\i collation}{ is a set of rules that control how strings in a }{\cs49\i character set}{ are compared.is The name of the }{\cs49\i collation}{ to be created is specified directly by this node.
  385. \par }{\cs250\f17\fs18\lang1024 DBOP_create_domain}{\line Node used to specify creation of a }{\cs49\i domain}{. A }{\cs49\i domain}{ is a named }{\cs49\i meta}{ data type which can be used to specify a data type length as well as a default value, constraints, and collations. The name of the }{\cs49\i domain}{ to be created is specified directly by this node.
  386. \par }{\cs250\f17\fs18\lang1024 DBOP_create_index}{\line Node used to specify creation of an }{\cs49\i index}{. The name of the }{\cs49\i index}{ to be created is specified directly by this node.
  387. \par }{\cs250\f17\fs18\lang1024 DBOP_create_procedure}{\line Node used to specify creation of a }{\cs49\i procedure}{. The name of the }{\cs49\i procedure}{ to be created is specified directly by this node.
  388. \par }{\cs250\f17\fs18\lang1024 DBOP_create_schema}{\line Node used to specify creation of a }{\cs49\i schema}{.
  389. \par }{\cs250\f17\fs18\lang1024 DBOP_create_synonym}{\line Defines a }{\cs49\i synonym}{ (attached table) in the local schema for a table in an outside data source. The node takes one required and one optional input. The required input is a DBOP_table_name operator denoting the synonym name. The local synonym name is represented in the }{\cs49\i pwszValue}{ field of the DBOP_create_synonym node. The first required input is a DBOP_table_name defining the name of the table in the external data source. The naming follows the scheme used by table names. The second optional input is a DBOP_property_list_anchor which contains a list of DBOP_property_list_elements defining the external data source. If there is no second child, the synonym is assumed to be local.
  390. \par }{\cs250\f17\fs18\lang1024 DBOP_create_table}{\line Node used to specify creation of a }{\cs49\i table}{. The name of the }{\cs49\i table}{ to be created is specified directly by this node.
  391. \par }{\cs250\f17\fs18\lang1024 DBOP_create_temporary_table}{\line Node used to specify creation of a }{\cs49\i temporary table}{. The name of the }{\cs49\i table}{ to be created is specified directly by this node.
  392. \par }{\cs250\f17\fs18\lang1024 DBOP_create_translation}{\line Node used to specify creation of a }{\cs49\i translation}{. A }{\cs49\i translation}{ specifies how to translate from one character set to another. The name of the }{\cs49\i translation}{ to be created is specified directly by this node.
  393. \par }{\cs250\f17\fs18\lang1024 DBOP_create_trigger}{\line Node used to specify creation of a }{\cs49\i trigger}{. A }{\cs49\i trigger}{ specifies what actions to perform after certain actions have occurred in the DBMS. The name of the }{\cs49\i trigger}{ to be created is specified directly by this node.
  394. \par }{\cs250\f17\fs18\lang1024 DBOP_create_view}{\line Node used to specify creation of a }{\cs49\i view}{. The name of the }{\cs49\i view}{ to be created is specified directly by this node. The node takes two inputs. The first required input is a table-valued expression defining the contents of the view. The columns resulting from this expression are exactly the columns of the view. The second optional input is a DBOP_property_list_anchor node with one DBOP_property_list_element node to specify the DB_PROPERTY_CHECK_OPTION property. If the value of this property is TRUE, this is equivalent to the WITH LOCAL CHECK OPTION clause; if the value of this property is FALSE, this is equivalent to the WITH CASCADED CHECK OPTION clause (which is the default).
  395. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_assertion}{\line Node used to specify deletion of a }{\cs49\i assertion}{. The name of the }{\cs49\i assertion}{ to be deleted is specified directly by this node.
  396. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_character_set}{\line Node used to specify deletion of a }{\cs49\i character set}{. The name of the }{\cs49\i character set}{ to be deleted is specified directly by this node.
  397. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_collation}{\line Node used to specify deletion of a }{\cs49\i collation}{. The name of the }{\cs49\i collation}{ to be deleted is specified directly by this node.
  398. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_domain}{\line Node used to specify deletion of a }{\cs49\i domain}{. The name of the }{\cs49\i domain}{ to be deleted is specified directly by this node.
  399. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_index}{\line Node used to specify deletion of a }{\cs49\i index}{. The name of the }{\cs49\i index}{ to be deleted is specified directly by this node.
  400. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_procedure}{\line Node used to specify deletion of a }{\cs49\i procedure}{. The name of the }{\cs49\i procedure}{ to be deleted is specified directly by this node.
  401. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_schema}{\line Node used to specify deletion of a }{\cs49\i schema}{. The name of the }{\cs49\i schema}{ to be deleted is specified directly by this node.
  402. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_synonym}{\line Removes a }{\cs49\i synonym}{ from the local schema; the name of the }{\cs49\i synonym}{ is included in the node in the }{\cs49\i pwszValue}{ field.
  403. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_table}{\line Node used to specify deletion of a }{\cs49\i table}{. The name of the }{\cs49\i table}{ to be deleted is specified directly by this node.
  404. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_translation}{\line Node used to specify deletion of a }{\cs49\i translation}{. The name of the }{\cs49\i translation}{ to be deleted is specified directly by this node.
  405. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_trigger}{\line Node used to specify deletion of a }{\cs49\i trigger}{. The name of the }{\cs49\i trigger}{ to be deleted is specified directly by this node.
  406. \par }{\cs250\f17\fs18\lang1024 DBOP_drop_view}{\line Node used to specify deletion of a }{\cs49\i view}{. The name of the }{\cs49\i view}{ to be deleted is specified directly by this node.
  407. \par }{\cs250\f17\fs18\lang1024 DBOP_foreign_key}{\line Node used to define a Foreign Key.
  408. \par }{\cs250\f17\fs18\lang1024 DBOP_grant_privileges}{\line Node used to grant privileges on an object.
  409. \par }{\cs250\f17\fs18\lang1024 DBOP_index_list_anchor}{\line Node identifying the start of a list of }{\cs49\i DBOP_index_list_element}{ nodes.
  410. \par }{\cs250\f17\fs18\lang1024 DBOP_index_list_element}{\line Each index list element contains the name of an index and an optional table name.
  411. \par }{\cs250\f17\fs18\lang1024 DBOP_primary_key}{\line Node used to define a Primary Key.
  412. \par }{\cs250\f17\fs18\lang1024 DBOP_property_list_anchor}{\line Node identifying the start of a list of }{\cs49\i DBOP_property_list_element}{ nodes.
  413. \par }{\cs250\f17\fs18\lang1024 DBOP_property_list_element}{\line Node used to specify a property for an object. This is a generic node consisting of a GUID and a VARIANT. The GUID represents the property to set and the VARIANT the value to set the property to. }{\f40 Nile}{ specifies a set of \ldblquote well-known\rdblquote properties (see below) that can be used to define properties for an object. Individual providers may also define GUIDs representing \ldblquote extended properties\rdblquote that the provider supports that can also be set using this node.
  414. \par }{\cs250\f17\fs18\lang1024 DBOP_referenced_table}{\line Node used to specify the referenced table in a Primary Key-Foreign Key relationship.
  415. \par }{\cs250\f17\fs18\lang1024 DBOP_rename_object}{\line Node used to specify the new name of an object being renamed via a DBOP_alter_}{\cs49\i objecttype}{ node.
  416. \par }{\cs250\f17\fs18\lang1024 DBOP_revoke_privileges}{\line Node used to revoke privileges from an object.
  417. \par }{\cs250\f17\fs18\lang1024 DBOP_schema_authorization}{\line Node used to specify the authorization name for schema creation.
  418. \par }{\cs250\f17\fs18\lang1024 DBOP_schema_name}{\line Node used to specify the user name associated with a schema for schema creation.
  419. \par }{\cs250\f17\fs18\lang1024 DBOP_unique_key}{\line Node used to define a Unique Key.
  420. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls120\pnrnot0\pnstart1 }\ls120\adjustright \fs20\lang1024\cgrid {
  421. \par }\pard\plain \s4\li-780\ri-1440\sa160\sl-560\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel3\adjustright \fs52\kerning20\cgrid {Connecting DML and DDL Command Nodes
  422. \par }\pard\plain \s5\li-780\ri-1440\sb20\sa120\sl-440\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel4\adjustright \fs40\kerning20\cgrid {Catalog of DML Nodes
  423. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {The following table summarizes all DML command nodes. For each node, the table describes the information stored within the node, its required and optional input types, and the types of the output produced by the node. This table, along with the description of the semantics of each node in previous section, represents a first step to defining the correct way to build OLE DB command trees.
  424. \par The supported output types are and minor types are listed in the form
  425. \par }{\cs49\i output-type}{\cs93\b :}{\cs49\i minor-type}{
  426. \par where }{\cs49\i output-type}{ and }{\cs49\i minor-type}{ are as follows. The minor type is not listed if it is not required by the operator. For more information, see }{\cs93\b IDBInfo::GetOperatorInfo}{.
  427. \par }\trowd \trleft120\trkeep \clvertalt\cltxlrtb \cellx1560\clvertalt\cltxlrtb \cellx2760\clvertalt\cltxlrtb \cellx3960\clvertalt\cltxlrtb \cellx7080\pard\plain \s63\sl-220\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \b\f16\fs18\kerning20\cgrid {Output Type\cell }{\cs124\b0\i output-type}{\cell }{\cs124\b0\i minor-type}{\cell Description\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\cltxlrtb \cellx7080\pard\plain \s64\li30\ri30\sa60\sl-40\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\brdrb\brdrs\brdrw15 \hyphpar0\adjustright \fs20\lang1024\cgrid {\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\cltxlrtb \cellx1560\clvertalt\cltxlrtb \cellx2760\clvertalt\cltxlrtb \cellx3960\clvertalt\cltxlrtb \cellx7080\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {Table}{\cs104\fs12\up3 1}{\cell T\cell O\line U\line OU\line H\cell Ordered\line Unique\line Ordered unique\line Hierachical\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {Row\cell R\cell --\cell --\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {Scalar\cell S\cell AF\line BMK\line COL\line CON\line DEF\line EXP\line NUL\line PAR\line SF\cell Aggregate function\line Bookmark\line Column\line Constant\line Default\line Expression\line NULL\line Parameter\line Scalar function\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {Boolean\cell B\cell --\cell --\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {List anchor\cell LA_CD\line LA_COL\line LA_CMD\line LA_FRM\line LA_IDX\line LA_PRJ\line LA_PRP\line LA_ROW\line LA_SC\line LA_SET\line LA_SRT\cell --\cell Column definition list anchor\line Column list anchor\line Command list anchor\line From list anchor\line Index list anchor\line Project list anchor\line Property list anchor\line Row list anchor\line Scalar list anchor\line Set list anchor\line Sort list anchor\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {List element\cell LE_CD\line LE_COL\line LE_CMD\line LE_FRM\line LE_IDX\line LE_PRJ\line LE_PRP\line LE_ROW\line LE_SC\line LE_SET\line LE_SRT\cell --\cell Column definition list element\line Column list element\line Command list element\line From list element\line Index list element\line Project list element\line Property list element\line Row list element\line Scalar list element\line Set list element\line Sort list element\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {Catalog name\cell CN\cell --\cell --\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {Schema name\cell SN\cell --\cell --\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {Outall name\cell ON\cell --\cell --\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl
  428. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {
  429. \par }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2876\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5125\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5513\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5922\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7813\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx8878\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cs93\b Node}{\cell }\pard\plain \s63\sl-220\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \b\f16\fs18\kerning20\cgrid {DBVALUEKIND\cell R\cell O\cell Input Types
  430. \par \cell Output\line Types\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx8878\pard\plain \s64\li30\ri30\sa60\sl-40\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\brdrb\brdrs\brdrw15 \hyphpar0\adjustright \fs20\lang1024\cgrid {\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2876\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5125\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5513\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5922\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7813\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx8878\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {absolute_sampling\cell }{\cs49\i see}{ relative_sampling\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {add_columns\cell DBVALUEKIND_EMPTY\cell 2\cell 0\cell 1st: T\line 2nd: LA_PRJ\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {aggregate\cell DBVALUEKIND_EMPTY\cell 3\cell 0\cell 1st: T\line 2,3rd: LA_PRJ\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {alias\cell PwszValue\cell 1\cell 1\cell 1st: T\line 2nd: LA_COL\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {allbits\cell }{\cs49\i see}{ anybits\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {allbits_all\cell }{\cs49\i see}{ anybits\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {allbits_any\cell }{\cs49\i see}{ anybits\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {and, or, xor, equivalent\cell Node weight is stored as DBVALUEKIND_I4.\cell 2\cell N\cell 1st: B\line 2nd: B\cell B\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {any_sample\cell }{\cs49\i see}{ min\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {anybits, allbits, anybits_any, allbits_any, anybits_all, allbits_all\cell Node weight is store as DBVALUEKIND_I4.\cell 2\cell 0\cell 1st: S:COL\line 2nd: S\cell B\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\f
  431. \par 2nd: S:COL\cell T:H\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {nested_table_name\cell Table name as: DBID, }{\cs49\i pwszValue}{, }{\cs49\i pMoniker}{\cell 0\cell 1\cell 1st: nested_table_name or table_name\cell T:H\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {nested_apply\cell DBVALUEKIND_EMPTY\cell 2\cell 1\cell 1st: T:H\line 2nd: ?? (scalar as DBOP?)\line 3rd: LE_COL\cell T:H or T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {nesting\cell DBVALUEKIND_EMPTY\cell 5\cell 0\cell 1st: T:H or T\line 2nd: LE_COL\line 3rd: LE_COL\cell T:H\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {not\cell }{Node weight is stored as DBVALUEKIND_I4.}{\cell 1\cell 0\cell 1st: B\cell B\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {not_equal\cell }{\cs49\i see}{ equal\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {not_equal_all\cell }{\cs49\i see}{ equal_all\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {not_equal_any\cell }{\cs49\i see}{ equal_all\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {NULL\cell }{\cs49\i see}{ DEFAULT\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {nullif\cell }{\cs49\i see}{ overlaps\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {octet_length\cell }{\cs49\i see}{ overlaps\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {or\cell }{\cs49\i see}{ and\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {order_preserve_select\cell DBVALUEKIND_EMPTY\cell 2\cell 0\cell 1st: T or T:O\line 2nd: B\cell T or T:O\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {outall_name\cell DBVALUEKIND_EMPTY\cell 0\cell 0\cell \cell ON\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {over\cell }{\cs49\i see}{ plus\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\n
  432. \par 2nd: S:COL\cell S:COL\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {qualifier_name\cell Table name as: DBID, }{\cs49\i pwszValue}{, }{\cs49\i pMoniker}{\cell 0\cell 0\cell \cell qualifier_name\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {rank, rank_ties_equally, rank_ties_equally_and_skip\cell DBVALUEKIND_EMPTY\cell 1\cell 0\cell 1st: T:O\cell T:O\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {rank_ties_equally\cell }{\cs49\i see}{ rank\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {rank_ties_equally_and_skip\cell }{\cs49\i see}{ rank\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {recursive_union,\line recursive_union_join\cell DBVALUEKIND_EMPTY\cell 2\cell 0\cell 1st: T\line 2nd: B\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {recursive_union_join\cell }{\cs49\i see}{ recursive_union\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {relative_sampling,\line absolute_sampling\cell integer in }{\cs49\i ulValue}{\cell 1\cell 0\cell 1st: T\line \cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {remote_table\cell DBVALUEKIND_EMPTY\cell 2\cell 0\cell REQ 1: table_name
  433. \par OPT 1: property_list_anchor,\line property_list_element:\line DBINIT_OPT_\line CLSID,\line DBINIT_OPT_\line MONIKER\line DBINIT_OPT_\line LOCATION\line DBINIT_OPT_\line NAME\line DBINIT_OPT_\line USERID,\line DBINIT_OPT_\line PASSWORD\line DBINIT_OPT_\line STRING\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {right_anti_semi_join\cell }{\cs49\i see}{ inner_join\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {right_outer_join\cell }{\cs49\i see}{ inner_join\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {right_semi_join\cell }{\cs49\i see}{ inner_join\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {row\cell DBVALUEKIND_EMPTY\cell 1\cell 0\cell 1st: LA_SC\cell R\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {row_list_anchor\cell DBVALUEKIND_EMPTY\cell 0\cell N\cell 1st-nth: LE_ROW\cell LA_ROW\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {row_list_element\cell DBVALUEKIND_EMPTY\cell 1\cell 0\cell 1st: R\cell LE_ROW\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {scalar_constant\cell any value\cell 0\cell 0\cell \cell S:CON\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {scalar_function\cell DBID,\line pwszValue,\line Imoniker\cell 0\cell N\cell 1st-nth: S\cell S:SF\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {scalar_list_anchor\cell DBVALUEKIND_EMPTY\cell 0\cell N\cell 1st-nth: S:CON\cell LA_SC\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {scalar_list_element\cell DBVALUEKIND_EMPTY\cell 1\cell 0\cell 1st: S:CON\cell LE_SC\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {scalar_parameter\cell DBPARAMETER\cell 0\cell 0\cell \cell S:PAR\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {schema_name\cell Schema name as: DBID, pwszValue, pMoniker\cell 0\cell 1\cell 1st: CN\cell SN\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {select\cell DBVALUEKIND_EMPTY\cell 2\cell 0\cell 1st: T\line 2nd: B\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning
  434. \par NOTE: Lists may be empty\cell T, T:O, T:U, T:OU\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {stddev\cell }{\cs49\i see}{ min\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {stddevapop\cell }{\cs49\i see}{ min\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {stringaconcat\cell }{\cs49\i see}{ overlaps\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {subset, properasubset, superset, properasuperset, disjoint\cell DBVALUEKINDaEMPTY\cell 2\cell 0\cell 1st: T\line 2nd: T\cell B\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {substring\cell }{\cs49\i see}{ overlaps\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {sum\cell }{\cs49\i see}{ min\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {superset\cell }{\cs49\i see}{ subset\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {table\cell DBVALUEKINDaEMPTY\cell 1\cell 0\cell 1st: LAaROW\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {tableaname\cell Table name as: DBID, pwszValue, pMoniker\cell 0\cell 1\cell 1st: SN\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {textacommand\cell DBTEXT\cell 0\cell 1\cell Any command node. [When used it indicates a \ldblquote partial" text command.]\cell S, T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {times\cell }{\cs49\i see}{ plus\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {top, topaplusaties\cell ulValue field contains the count of rows\cell 1\cell 0\cell 1st: T:O\cell T:O\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {topa%,
  435. \par topa%aplusaties\cell DBVALUEKINDaEMPTY\cell 2\cell 0\cell 1st: T:O\line 2nd: LAaSC\cell T:O\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {topa%aplusaties\cell }{\cs49\i see}{ topa%\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {topaplusaties\cell }{\cs49\i see}{ top\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {transitiveaclosure\cell DBVALUEKINDaEMPTY\cell 4\cell 1\cell 1st: T\line 2nd: B [join condition]\line 3rd: LAaPRJ\line 4th: B [predicate on Delta]\line 5th: B [initial selection condition]\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {translate\cell }{\cs49\i see}{ overlaps\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {trim\cell }{\cs49\i see}{ overlaps\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {unionajoin\cell DBVALUEKINDaEMPTY\cell 2\cell 0\cell 1st: T\line 2nd: T\cell T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {unique\cell }{\cs49\i see}{ exists\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {unnesting\cell DBVALUEKINDaEMPTY\cell 2\cell 0\cell 1st: T:H\line 2nd: LEaCOL\cell T:H, T\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {update\cell DBVALUEKINDaEMPTY\cell 2\cell 0\cell 1st: T\line 2nd: LAaSET\cell U:U\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {upper\cell }{\cs49\i see}{ overlaps\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {var\cell }{\cs49\i see}{ min\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {varapop\cell }{\cs49\i see}{ min\cell \cell \cell \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw30 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2876\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw30 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5125\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw30 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5513\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw30 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5922\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \cl
  436. \par }\pard\plain \s5\li-780\ri-1440\sb20\sa120\sl-440\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel4\adjustright \fs40\kerning20\cgrid {Catalog of DDL command nodes
  437. \par }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2008\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx3900\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4710\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5310\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7243\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx8876\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {\cs93\b Node}{\cell }\pard\plain \s63\sl-220\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \b\f16\fs18\kerning20\cgrid {DBTREEVALUE\cell R\cell O\cell Children
  438. \par \cell Output
  439. \par type\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx8877\pard\plain \s64\li30\ri30\sa60\sl-40\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\brdrb\brdrs\brdrw15 \hyphpar0\adjustright \fs20\lang1024\cgrid {\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2008\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx3900\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4713\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5313\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7246\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx8877\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {alteracharacteraset\cell pwszValue\cell 0\cell 1\cell OPT 1: renameaobject\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {alteracollation\cell pwszValue\cell 0\cell 1\cell OPT 1: renameaobject\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2008\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx3900\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx4713\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5313\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx7246\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx8877\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {alteradomain\cell pwszValue\cell 0\cell 1\cell OPT 1: renameaobject\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {alteraindex\cell pwszValue\cell 0\cell 1\cell OPT 1: renameaobject\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {alteraprocedure\cell pwszValue\cell 0\cell 1\cell OPT 1: renameaobject\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {alteraschema\cell pwszValue\cell 0\cell 1\cell OPT 1: renameaobject\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {alteratable\cell pwszValue\cell 0\cell 1\cell OPT 1: renameaobject\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {alteratrigger\cell pwszValue\cell 0\cell 1\ce
  440. \par OPT 2: propertyalistaanchor,\line propertyalistaelement:\line DBaPROPERTYaCONSTRAINTaCHECKaDEFERRED,\line DBaPROPERTYa\line DESCRIPTION\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {createacharacteraset\cell pwszValue\cell 1\cell 2\cell REQ 1: characterasetaname
  441. \par OPT 1: collateaclause
  442. \par OPT 2: propertyalistaanchor,\line propertyalistaelement:\line DBaPROPERTYa\line DESCRIPTION\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {createacollation\cell pwszValue\cell 2\cell 1\cell REQ 1: characterasetaname
  443. \par REQ 2: TBD
  444. \par OPT 1: TBD\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {createadomain\cell pwszValue\cell 1\cell 3\cell REQ: dataatype
  445. \par OPT 1: propertyalistaanchor,\line propertyalistaelement:\line DBaPROPERTYa\line DEFAULTaVALUE\line
  446. \par OPT 2: domainaconstraint\line
  447. \par OPT 3: collateaclause\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {createaindex\cell pwszValue\cell 2\cell 1\cell REQ 1: name (table name)REQ 2: columnalistaanchor,\line columnalistaelement
  448. \par The column list elements contain the name of a column and a sort order (ascending or descending).
  449. \par OPT 1: propertyalistaanchor,\line propertyalistaelement:\line DBPROPaINDEXa\line PRIMARYKEY
  450. \par DBPROPaINDEXa\line UNIQUE
  451. \par DBPROPaINDEXa\line CLUSTERED
  452. \par DBPROPaINDEXa\line TYPE
  453. \par DBPROPaINDEXa\line FILLFACTOR
  454. \par DBPROPaINDEXa\line INITIALSIZE
  455. \par DBPROPaINDEXa\line NULLS
  456. \par DBPROPaINDEXa\line SORTBOOKMARKS
  457. \par DBPROPaINDEXa\line AUTOUPDATE
  458. \par DBPROPaINDEXa\line NULLCOLLATION\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {createaprocedure\cell pwszValue\cell TBD\cell TBD\cell TBD\line \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {createaschema\cell DBVALUEKINDa\line EMPTY\cell 0\cell 3\cell OPT 1: schemaaauthorization
  459. \par OPT 2: schemaaname
  460. \par OPT 3: propertyalistaanchor,\line propertyalistaelement:\line DBaPROPERTYa\line DESCRIPTION\cell }\pard\plain \nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \b\fs20\cf14\cgrid {\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {create_synonym\cell pwszValue\line (local name for synonym)\cell 1\cell 1\cell REQ 1: table_name
  461. \par OPT 1: property_list_anchor,\line property_list_element:\line DBINIT_OPT_\line CLSID,\line DBINIT_OPT_\line MONIKER\line DBINIT_OPT_\line LOCATION\line DBINIT_OPT_\line NAME\line DBINIT_OPT_\line USERID,\line DBINIT_OPT_\line PASSWORD\line DBINIT_OPT_\line STRING\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {create_table\cell pwszValue\cell 1\cell 5\cell REQ 1: coldef_list_anchor
  462. \par \line OPT 1: primary_key\line
  463. \par OPT 2: foreign_key
  464. \par OPT 3: unique_key
  465. \par OPT 4: check_constraint
  466. \par OPT 5: property_list_anchor, property_list_element:\line DB_PROPERTY_\line DESCRIPTION\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {create_temporary_table\cell pwszValue\cell 1\cell 1\cell REQ 1: coldef_list_anchor OPT 2: property_list_anchor,\line property_list_element:\line DB_PROPERTY_\line DESCRIPTION \cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {create_translation\cell pwszValue\cell 3\cell 1\cell REQ 1: character_set_name
  467. \par REQ 2: character_set_name
  468. \par REQ 3: TBD
  469. \par OPT 2: property_list_anchor,\line property_list_element:\line DB_PROPERTY_\line DESCRIPTION\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {create_trigger\cell pwszValue\cell TBD\cell TBD\cell OPT 1: property_list_anchor,\line property_list_element:\line DB_PROPERTY_\line DESCRIPTION\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {create_view\cell pwszValue\cell 1\cell 1\cell REQ: T\line OPT: property_list_anchor, property_list_element:\line DB_PROPERTY_\line CHECK_OPTION\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {drop_assertion\cell pwszValue\cell 0\cell 1\cell OPT 1: property_list_anchor, property_list_element:\line DB_PROPERTY_\line DROP_CASCADE\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {drop_character_set\cell pwszValue\cell 0\cell 1\cell OPT 1: property_list_anchor, property_list_element:\line DB_PROPERTY_\line DROP_CASCADE\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {drop_collation\cell pwszValue\cell 0\cell 1\cell OPT 1: property_list_anchor, property_list_element:\line DB_PROPERTY_\line DROP_CASCADE\cell }\pard\plain \nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \b\fs20\cf14\cgrid {\cell }\pard \nowidctlpar\widctlpar\intbl\adjustright {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {drop_domain\cell pwszValue\cell 0\cell 1\cell OPT 1: property_list_anchor, property_list_element:\line DB_PROPERTY_\line DROP_CASCADE\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {drop_index\cell pwszValue\cell 0\cell 0\cell OPT 1: property_list_anchor, property_list_element:\line DB_PROPERTY_\line DROP_CASCADE\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {drop_procedure\cell pwszValue\cell 0\cell 1\cell OPT 1: property_list_anchor, property_list_element:\line DB_PROPERTY_\line DROP_CASCADE\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {drop_schema\cell pwszValue\cell 0\cell 1\cell OPT 1: property_list_anchor, property_list_element:\line DB_PROPERTY_\line DROP_CASCADE\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {drop_synonym\cell pwszValue\line (local name for synonym)\cell 0\cell 1\cell OPT 1: property_list_anchor property_list_element:\line DB_PROPERTY_\line DROP_CASCADE\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {drop_table\cell pwszValue\cell 0\cell 1\cell OPT 1: property_list_anchor, property_list_element:\line DB_PROPERTY_\line DROP_CASCADE\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl
  470. \par }{\super 2}{\tab Optional.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\b0 \row {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls122\pnrnot0\pnstart1 }\ls122\adjustright \fs20\lang1024\cgrid {
  471. \par }\pard\plain \s4\li-780\ri-1440\sa160\sl-560\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel3\adjustright \fs52\kerning20\cgrid {\ldblquote Well-Known\rdblquote Properties
  472. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {There are a set of \ldblquote well-known\rdblquote properties that are pre-defined in Nile. These properties are identified by GUIDs and used in property_list_element nodes.
  473. \par }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2919\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5424\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx6626\clvertalt\clbrdrt\brdrs\brdrw30 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx8878\pard\plain \s63\sl-220\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \b\f16\fs18\kerning20\cgrid {{\*\bkmkstart ThisTable}Property\cell Description\cell DBTYPE\cell Allowable values\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx8878\pard\plain \s64\li30\ri30\sa60\sl-40\slmult0\keepn\nowidctlpar\widctlpar\noline\intbl\brdrb\brdrs\brdrw15 \hyphpar0\adjustright \fs20\lang1024\cgrid {\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2919\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5424\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx6626\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx8878\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DB_PROPERTY_CHECK_\line OPTION\cell Specifies whether updates are allowed that affect rows other than the one specified (i.e., update via view affects more than one row in a participating base table).\cell BOOL\cell TRUE - Local update checking only.
  474. \par FALSE - Cascaded update checking.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DB_PROPERTY_CONSTRAINT_\line CHECK_DEFERRED\cell Specifies when a constraint is checked for violation.\cell BOOL\cell FALSE - Constraint checked immediately (INITIALLY IMMEDIATE).\line TRUE - Constraint check deferred (INITIALLY DEFERRED).\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DB_PROPERTY_DEFAULT_\line VALUE\cell A variant specifying the default value for an object (typically a domain or column). If the default value is a string, the string must be quoted (with the value returned for DBLITERAL_QUOTE in }{\cs93\b DBInfo::GetLiteralInfo}{) so it can be distinguished from an object of the same name. For example, \lquote Salary\rquote is a string, Salary is an object (such as a column).\cell VARIANT\cell Any value.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DB_PROPERTY_DESCRIPTION\cell A string specifying a \ldblquote human-readable\rdblquote description (of the specified object).\cell LPWSTR\cell Any text string.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DB_PROPERTY_DROP_\line CASCADE\cell Specifies the drop behavior when a database object is dropped. A value of FALSE(RESTRICT) will cause the drop command to fail if other referencing objects exist in the database. A value of TRUE(CASCADE) will drop all objects, related to the object being dropped, that exist in the database.
  475. \par \cell BOOL\cell FALSE - RESTRICT drop behavior\line TRUE - CASCADE drop behavior\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DB_PROPERTY_ON_\line COMMIT_PRESERVE_ROWS\cell \cell BOOL\cell TRUE - Rows in a temporary table and not deleted when transaction is commited.
  476. \par FALSE - Rows in a temporary table are deleted when transaction is commited.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DB_PROPERTY_NULLABLE\cell Specifies whether a set of values can contain a NULL value.\cell BOOL\cell FALSE - NULL is not allowable\line TRUE - NULL is allowable\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBINIT_OPT _CLSID\cell CLSID of the data provider\rquote s DSO.\cell GUID\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBINIT_OPT_MONIKER\cell Pointer to a moniker to the data provider.\cell *}{\cs49\i pMoniker}{\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBINIT_OPT_LOCATION\cell The location of the database to connect to.
  477. \par Typically, a server name. \cell LPWSTR\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBINIT_OPT_NAME\cell The name of the database to connect to. This could be either the full path-name of the database file or some other name that identifies the database within the provider.\cell LPWSTR\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBINIT_OPT_USERID\cell User-Id to be used when connecting to the provider.\cell LPWSTR\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBINIT_OPT_PASSWORD\cell Password to be used when connecting to the provider.\cell LPWSTR\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBINIT_OPT_STRING\cell A general purpose string which includes all the connection parameters in a format understood by the provider (e.g. ODBC connect string).\cell LPWSTR\cell \cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBPROP_AUTOINCREMENT\cell Specifies whether the values of the column are autoincrementing.\cell BOOL\cell TRUE - The values of the column are autoincrementing.
  478. \par FALSE - The values of the column are not autoincrementing.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBPROP_UNIQUE\cell Whether values of the column must be unique in the table.\cell BOOL\cell TRUE - The values of the column must be unique within the table.
  479. \par FALSE - The values of the column can be repeated within the table.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row }\trowd \trleft120\trkeep \clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw30 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx2919\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx5424\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw15 \cltxlrtb \cellx6626\clvertalt\clbrdrt\brdrs\brdrw15 \clbrdrl\brdrs\brdrw15 \clbrdrb\brdrs\brdrw15 \clbrdrr\brdrs\brdrw30 \cltxlrtb \cellx8878\pard\plain \s61\sa60\sl-220\slmult0\nowidctlpar\widctlpar\noline\intbl\hyphpar0\adjustright \fs18\kerning20\cgrid {DBPROP_PRIMARYKEY\cell Whether the column is part of the primary key.\cell BOOL\cell TRUE - The column is part of the primary key of the table.
  480. \par FALSE - The column is not part of the primary key of the table.\cell }\pard\plain \nowidctlpar\widctlpar\intbl\adjustright \b\fs20\cf14\cgrid {\row {\*\bkmkend ThisTable}{\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls123\pnrnot0\pnstart1 }\ls123\adjustright \fs20\lang1024\cgrid {
  481. \par }\pard\plain \s4\li-780\ri-1440\sa160\sl-560\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel3\adjustright \fs52\kerning20\cgrid {DBCOMMANDTREE Structures
  482. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This structure is used for each DML or DDL node in an OLE DB command tree. Many operations create a binding environment. For example, a DBOP_select operation has two inputs: a table and a Boolean predicate. By virtue of the \ldblquote select\rdblquote operation, the table becomes the }{\cs49\i binding}{ environment for the predicate. That means that the predicate may freely reference column names defined in the table. Note that not all bindings must come from the nearest table operation. For example, there might be multiple table operations within an \ldblquote exist\rdblquote expression, and any predicate may reference a column defined outside the \ldblquote exist\rdblquote expression (In SQL, this is called a \ldblquote correlated subquery.\rdblquote ).
  483. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBCOMMANDTREE Structure
  484. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This is the primary data structure used to represent any node in an OLE DB tree as described in the Data Manipulation and Data Definition Operator Sections above.
  485. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {typedef WORD DBCOMMANDOP;
  486. \par
  487. \par typedef struct tagDBCOMMANDTREE}{\cs93\b }{\{
  488. \par \tab DBCOMMANDOP op; // Operator identifier (2 bytes)
  489. \par \tab WORD\tab wKind; // Discriminator for the following union (2 bytes)
  490. \par \tab struct tagDBCOMMANDTREE * pctFirstChild; // Pointer to first child (4 bytes)
  491. \par \tab struct tagDBCOMMANDTREE * pctNextSibling; // Pointer to sibling (4 bytes)
  492. \par \tab union \{ \tab // Union direclty represents fields that fit within 8 bytes.
  493. \par \tab // Comments list DBVALUEKIND and DBTYPE corresponding to each field.
  494. \par \tab \tab BOOL\tab fValue; // DBVALUEKIND_BOOL (DBTYPE_BOOL)
  495. \par \tab \tab unsigned char uchValue; // DBVALUEKIND_UI1 (DBTYPE_UI1)
  496. \par \tab \tab signed char schValue; // DBVALUEKIND_I1 (DBTYPE_I1)
  497. \par \tab \tab unsigned short usValue; // DBVALUEKIND_UI2 (DBTYPE_UI2)
  498. \par \tab \tab short sValue; // DBVALUEKIND_I2 (DBTYPE_I2)
  499. \par \tab \tab LPWSTR pwszValue; // DBVALUEKIND_WSTR (DBTYPE_WSTR)
  500. \par \tab \tab LONG\tab lValue; // DBVALUEKIND_I4 (DBTYPE_I4)\tab
  501. \par \tab \tab ULONG ulValue; // DBVALUEKIND_UI4 (DBTYPE_UI4)
  502. \par \tab \tab float flValue; // DBVALUEKIND_R4 (DBTYPE_R4)
  503. \par \tab \tab double dblValue;\tab // DBVALUEKIND_R8 (DBTYPE_R8)
  504. \par \tab \tab CY cyValue; // DBVALUEKIND_CY (DBTYPE_CY)
  505. \par \tab \tab DATE\tab dateValue; // DBVALUEKIND_DATE (DBTYPE_DATE)
  506. \par \tab \tab DBDATE dbdateValue; // DBVALUEKIND_DBDATE (DBTYPE_DBDATE)
  507. \par \tab \tab DBTIME dbtimeValue; // DBVALUEKIND_DBTIME (DBTYPE_DBTIME)
  508. \par \tab \tab SCODE scodeValue; // DBVALUEKIND_ERROR (DBTYPE_ERROR)
  509. \par \tab \tab __int64 llValue; // DBVALUEKIND_I8 (DBTYPE_I8)
  510. \par \tab \tab unsigned __int64 ullValue; // DBVALUEKIND_UI8 (DBTYPE_UI8)
  511. \par \tab \tab BSTR\tab * pbstrValue; // DBVALUEKIND_BSTR \tab (DBTYPE_BSTR)
  512. \par \tab \tab ICommand\tab * pCommand;\tab // DBVALUEKIND_COMMAND (DBTYPE_IUNKNOWN)
  513. \par \tab \tab IDispatch * pDispatch; // DBVALUEKIND_IDISPATCH (DBTYPE_IDISPATCH)
  514. \par \tab \tab IMoniker\tab * pMoniker;\tab // DBVALUEKIND_MONIKER (DBTYPE_MONIKER)
  515. \par \tab \tab IRowset * pRowset; // DBVALUEKIND_ROWSET (DBTYPE_ROWSET)
  516. \par \tab \tab IUnknown\tab * pUnknown;\tab // DBVALUEKIND_IUNKNOWN (DBTYPE_IUNKNOWN)
  517. \par \tab \tab DBBYGUID\tab * pdbbygdValue;\tab // DBVALUEKIND_BYGUID
  518. \par \tab \tab DBCOL}{\revised\revauth1\revdttm1175549057 UMN}{DESC* }{\deleted\revauthdel1\revdttmdel1175549057 }{ pcoldescValue; // DBVALUEKIND_COLDESC
  519. \par \tab \tab DBID * pdbidValue; // DBVALUEKIND_ID
  520. \par \tab \tab DBLIKE *\tab \tab \tab \tab pdblikeValue;\tab \tab // DBVALUEKIND_LIKE
  521. \par \tab \tab DBCONTENT * pdbcntntValue; // DBVALUEKIND_CONTENT
  522. \par \tab \tab DBCONTENTVECTOR * pdbcntntvcValue; // DBVALUEKIND_CONTENTVECTOR
  523. \par \tab \tab DBCONTENTPROXIMITY *\tab pdbcntntproxValue;\tab // DBVALUEKIND_CONTENTPROXIMITY
  524. \par \tab \tab DBGROUPINFO * pdbgrpinfValue; // DBVALUEKIND_GROUPINFO
  525. \par \tab \tab DBPARAMETER * pdbparamValue; // DBVALUEKIND_PARAMETER
  526. \par \tab \tab DBPROP}{\revised\revauth1\revdttm1175549057 SET}{\deleted\revauthdel1\revdttmdel1175549057 ERTY}{ * }{\revised\revauth1\revdttm1175549057 }{ pdbpropValue; // DBVALUEKIND_PROPERTY
  527. \par \tab \tab DBSETFUNC * pdbstfncValue; // DBVALUEKIND_SETFUNC
  528. \par \tab \tab DBSORTINFO * pdbsrtinfValue; // DBVALUEKIND_SORTINFO
  529. \par \tab \tab DBTEXT * pdbtxtValue; // DBVALUEKIND_TEXT
  530. \par \tab \tab DBVECTOR\tab * pdbvectorValue; // DBVALUEKIND_VECTOR | *
  531. \par \tab \tab SAFEARRAY * parrayValue; // DBVALUEKIND_ARRAY | *
  532. \par \tab \tab VARIANT * pvarValue; // DBVALUEKIND_VARIANT (DBTYPE_VARIANT)
  533. \par \tab \tab GUID\tab * pGuid; // DBVALUEKIND_GUID (DBTYPE_GUID)
  534. \par \tab \tab BYTE\tab * pbValue; // DBVALUEKIND_BYTES (DBTYPE_BYTES)
  535. \par \tab \tab char\tab * pzValue; // DBVALUEKIND_STR (DBTYPE_STR)
  536. \par \tab \tab DBNUMERIC * pdbnValue; // DBVALUEKIND_NUMERIC (DBTYPE_NUMERIC)
  537. \par \tab \tab DBTIMESTAMP * pdbtsValue; // DBVALUEKIND_DBTIMESTAMP (DBTYPE_DBTIMESTAMP)
  538. \par \tab \tab void * pvValue; // a generic DBVALUEKIND_BYREF
  539. \par \tab \} value;
  540. \par \tab HRESULT hrError;\tab // Error indicator, details in Extended Error info (4 bytes)
  541. \par \} DBCOMMANDTREE;
  542. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls124\pnrnot0\pnstart1 }\ls124\adjustright \fs20\lang1024\cgrid {
  543. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {The typical size of a DBCOMMANDTREE node is 24 bytes, however, operators may store some specific information inside the }{\cs49\i value}{ field of the node. For programming convenience, the union field includes branches representing some common types that can fit within 8 bytes. Variable-length types are referenced via a pointer to the corresponding structure (e.g., DBTEXT). The discriminator for the union is of type WORD rather than DBVALUEKIND so that it is possible to store node values such as DBVALUEKIND_VECTOR | DBVALUEKIND_GUID, DBVALUEKIND_BYREF | DBVALUEKIND_UI4, or DBVALUEKIND_SAFEARRAY | DBVALUEKIND_I4;
  544. \par The }{\cs49\i pwszValue}{ field is just a string; its interpretation is left to the provider. In other words, the consumer must understand the provider\rquote s method of name resolution. For command components \ldblquote passed-through\rdblquote to another provider, it is left to that bottom provider to interpret the string.
  545. \par The }{\cs49\i pMoniker}{ field is used for unresolved linked objects, in particular tables and functions.
  546. \par The }{\cs49\i pRowset}{ field is used to reference a currently open rowset as input for a command. Most providers will fail if some IPersist method is invoked while the command tree refers to an open rowset.
  547. \par The }{\cs49\i pCommand}{ field references another command object as input for a command. Most providers will fail if some IPersist method is invoked while the command tree refers to a command object that does not support monikers.
  548. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBVALUEKIND Enumerated Type
  549. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This enumerated type is used to discriminate the union field inside a DBCOMMANDTREE struct. For programming convenience, the values in this enumeration correspond exactly to the OLE Automation VARENUM and OLE DB DBTYPE (see Appendix A for description) enumerations. The comments associated with each enumeration value represents the type and branch of the union type inside the command structure containing the value. Nodes that do not assign a value to the union member should assign a DBVALUEKIND_EMPTY to }{\cs49\i wKind}{.
  550. \par [Note: Need to check with OLE automation that the new DBVALUEKIND values are reserved for OLE DB.]
  551. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {enum DBVALUEKIND \{
  552. \par \tab // List of structure values \tab union contains a pointer to:
  553. \par \tab DBVALUEKIND_BYGUID\tab \tab \tab = 256. \tab \tab \tab \tab \tab \tab \tab // DBBYGUID struct
  554. \par \tab DBVALUEKIND_COLDESC\tab \tab \tab = DBVALUEKIND_BYGUID + 1,\tab \tab // DBCOLDESC struct \tab DBVALUEKIND_ID\tab \tab \tab \tab = DBVALUEKIND_COLDESC + 1,\tab \tab // DBID struct
  555. \par \tab DBVALUEKIND_CONTENT\tab \tab \tab = DBVALUEKIND_ID + 1,\tab \tab \tab // DBCONTENT struct
  556. \par \tab DBVALUEKIND_CONTENTVECTOR \tab = DBVALUEKIND_CONTENT + 1,\tab \tab // DBCONTENTVECTOR struct
  557. \par \tab DBVALUEKIND_GROUPINFO\tab \tab = DBVALUEKIND_CONTENTVECTOR + 1,\tab // DBGROUPINFO struct
  558. \par \tab DBVALUEKIND_PARAMETER\tab \tab = DBVALUEKIND_GROUPINFO + 1,\tab \tab // DBPARAMETER struct
  559. \par \tab DBVALUEKIND_PROPERTY\tab \tab \tab = DBVALUEKIND_PARAMETER + 1,\tab \tab // DBPROPERTY struct
  560. \par \tab DBVALUEKIND_SETFUNC\tab \tab \tab = DBVALUEKIND_PROPERTY + 1,\tab \tab // DBSETFUNC struct
  561. \par \tab DBVALUEKIND_SORTINFO\tab \tab \tab = DBVALUEKIND_SETFUNC + 1,\tab \tab // DBSORTINFO struct
  562. \par \tab DBVALUEKIND_TEXT\tab \tab \tab \tab = DBVALUEKIND_SORTINFO + 1,\tab \tab // DBTEXT struct
  563. \par
  564. \par \tab // List of OLE interface pointer values
  565. \par \tab DBVALUEKIND_COMMAND\tab \tab \tab = DBVALUEKIND_TEXT + 1,\tab \tab \tab // pCommand value
  566. \par \tab DBVALUEKIND_MONIKER\tab \tab \tab = DBVALUEKIND_COMMAND + 1,\tab \tab // pMoniker value
  567. \par \tab DBVALUEKIND_ROWSET\tab \tab \tab = DBVALUEKIND_MONIKER + 1,\tab \tab // pRowset value
  568. \par \tab DBVALUEKIND_LIKE\tab \tab \tab = DBVALUEKIND_ROWSET + 1,\tab \tab // DBLIKE struct
  569. \par \tab DBVALUEKIND_CONTENTPROXIMITY\tab =\tab DBVALUEKIND_LIKE + 1,\tab // DBCONTENTPROXIMITY structure
  570. \par \tab DBVALUEKIND_IDISPATCH\tab \tab = 9,\tab \tab \tab \tab \tab \tab \tab \tab // pDispatch value
  571. \par \tab DBVALUEKIND_IUNKNOWN\tab \tab \tab = 13,\tab \tab \tab \tab \tab \tab \tab // pUnknown value
  572. \par
  573. \par \tab // List of OLE DB type values
  574. \par \tab DBVALUEKIND_EMPTY\tab \tab \tab = 0,\tab \tab \tab \tab \tab \tab \tab \tab // No value assigned to
  575. \par \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab // the union
  576. \par \tab DBVALUEKIND_NULL\tab \tab \tab \tab = 1,\tab \tab \tab \tab \tab \tab \tab \tab // NULL value
  577. \par \tab DBVALUEKIND_I2\tab \tab \tab \tab = 2,\tab \tab \tab \tab \tab \tab \tab \tab // sValue
  578. \par \tab DBVALUEKIND_I4\tab \tab \tab \tab = 3,\tab \tab \tab \tab \tab \tab \tab \tab // lValue
  579. \par \tab DBVALUEKIND_R4\tab \tab \tab \tab = 4,\tab \tab \tab \tab \tab \tab \tab \tab // flValue
  580. \par \tab DBVALUEKIND_R8\tab \tab \tab \tab = 5,\tab \tab \tab \tab \tab \tab \tab \tab // dblValue
  581. \par \tab DBVALUEKIND_CY\tab \tab \tab \tab = 6,\tab \tab \tab \tab \tab \tab \tab \tab // cyValue
  582. \par \tab DBVALUEKIND_DATE\tab \tab \tab \tab = 7,\tab \tab \tab \tab \tab \tab \tab \tab // dateValue
  583. \par \tab DBVALUEKIND_BSTR\tab \tab \tab \tab = 8,\tab \tab \tab \tab \tab \tab \tab \tab // pbstrValue
  584. \par \tab
  585. \par \tab DBVALUEKIND_ERROR\tab \tab \tab = 10,\tab \tab \tab \tab \tab \tab \tab // scodeValue;
  586. \par \tab DBVALUEKIND_BOOL\tab \tab \tab \tab = 11,\tab \tab \tab \tab \tab \tab \tab // fValue
  587. \par \tab DBVALUEKIND_VARIANT\tab \tab \tab = 12,\tab \tab \tab \tab \tab \tab \tab // pvarValue to an OLE
  588. \par \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab \tab // Aut. variant
  589. \par
  590. \par \tab DBVALUEKIND_VECTOR\tab \tab \tab = 0x1000,\tab \tab \tab \tab \tab \tab // pdbvectorValue
  591. \par \tab DBVALUEKIND_ARRAY\tab \tab \tab = 0x2000,\tab \tab \tab \tab \tab \tab // parrayValue
  592. \par \tab DBVALUEKIND_BYREF\tab \tab \tab = 0x4000,\tab \tab \tab \tab \tab \tab // pvValue
  593. \par
  594. \par \tab DBVALUEKIND_I1\tab \tab \tab \tab = 16,\tab \tab \tab \tab \tab \tab \tab // bValue
  595. \par \tab DBVALUEKIND_UI1\tab \tab \tab \tab = 17,\tab \tab \tab \tab \tab \tab \tab // bValue
  596. \par \tab DBVALUEKIND_UI2\tab \tab \tab \tab = 18,\tab \tab \tab \tab \tab \tab \tab // sValue
  597. \par \tab DBVALUEKIND_UI4\tab \tab \tab \tab = DBVALUEKIND_UI2 + 1,\tab \tab \tab // ulValue
  598. \par \tab DBVALUEKIND_I8\tab \tab \tab \tab = DBVALUEKIND_UI4 + 1,\tab \tab \tab // llValue
  599. \par \tab DBVALUEKIND_UI8\tab \tab \tab \tab = DBVALUEKIND_UI8 + 1,\tab \tab \tab // ullValue
  600. \par \tab DBVALUEKIND_GUID\tab \tab \tab \tab = 72,\tab \tab \tab \tab \tab \tab \tab // pGuid
  601. \par
  602. \par \tab DBVALUEKIND_BYTES\tab \tab \tab = 128,\tab \tab \tab \tab \tab \tab \tab // pbValue
  603. \par \tab DBVALUEKIND_STR\tab \tab \tab \tab = 129,\tab \tab \tab \tab \tab \tab \tab // pszValue
  604. \par \tab DBVALUEKIND_WSTR\tab \tab \tab \tab = DBVALUEKIND_STR + 1,\tab \tab \tab // pwszValue
  605. \par \tab DBVALUEKIND_NUMERIC\tab \tab \tab = DBVALUEKIND_WSTR + 1\tab \tab \tab // pdbnValue
  606. \par \tab DBVALUEKIND_DBDATE\tab \tab \tab = DBVALUEKIND_NUMERIC + }{\revised\revauth1\revdttm1175549057 2}{\deleted\revauthdel1\revdttmdel1175549057 3}{\tab \tab // dbdateValue
  607. \par \tab DBVALUEKIND_DBTIME\tab \tab \tab = DBVALUEKIND_DBDATE + 1\tab \tab \tab \tab // dbtimeValue
  608. \par \tab DBVALUEKIND_DBTIMESTAMP\tab \tab = DBVALUEKIND_DBTIME + 1\tab \tab \tab \tab // pdbtsValue
  609. \par \};
  610. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls125\pnrnot0\pnstart1 }\ls125\adjustright \fs20\lang1024\cgrid {
  611. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBBYGUID Structure
  612. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {tyepdef struct tagDBBYGUID \{
  613. \par \tab GUID\tab \tab guid;\tab \tab // this node\rquote s GUID
  614. \par \tab ULONG\tab cbInfo;\tab \tab // size of the data in pbInfo
  615. \par \tab BYTE *\tab pbInfo;\tab \tab // extra node information, provider-specific
  616. \par \} DBBYGUID;
  617. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls126\pnrnot0\pnstart1 }\ls126\adjustright \fs20\lang1024\cgrid {
  618. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBID Structure
  619. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This structure encapsulates various ways of identifying a database object. It is used by nodes that need to represent a column name, i.e., column_name, index_name, table_name, schema_name, catalog_name. The DBID struct is also used to define bindings.
  620. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBID \{
  621. \par union \{
  622. \par GUID guid;
  623. \par GUID *pguid;
  624. \par \} uGuid;
  625. \par DBKIND eKind;
  626. \par union \{
  627. \par LPWSTR pwszName;
  628. \par ULONG ulPropid;
  629. \par \} uName;
  630. \par \} DBID;
  631. \par
  632. \par typedef DWORD DBKIND;
  633. \par
  634. \par enum DBKINDENUM \{
  635. \par DBKIND_GUID_NAME = 0, // use the guid and pwszName members
  636. \par DBKIND_GUID_PROPID, // use the guid and ulPropid members
  637. \par DBKIND_NAME, // use only the pwszName member, ignore the
  638. \par // uGuid member
  639. \par DBKIND_PGUID_NAME, // use the pGuid and pwszName members
  640. \par DBKIND_PGUID_PROPID, // use the pGuid and ulPropid members
  641. \par DBKIND_PROPID, // use only the ulPropid member, ignore the
  642. \par // uGuid member
  643. \par DBKIND_GUID, // use only the guid member, ignore the
  644. \par \};
  645. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls127\pnrnot0\pnstart1 }\ls127\adjustright \fs20\lang1024\cgrid {
  646. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBCONTENT Structure
  647. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This structure represents specific information required by the DBOP_content operator.
  648. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBCONTENT \{
  649. \par \tab LPWSTR\tab \tab pwszPhrase;\tab \tab // text
  650. \par \tab DWORD\tab \tab dwGenerateMethod;\tab // exact, prefix, stemmed
  651. \par \tab LONG\tab \tab lWeight;\tab \tab \tab // weight of node
  652. \par \tab LCID\tab \tab lcid;\tab \tab \tab \tab // locale
  653. \par \} DBCONTENT;
  654. \par
  655. \par #define GENERATE_METHOD_EXACT \tab \tab ( 0 )\tab // size is 4
  656. \par #define GENERATE_METHOD_PREFIX\tab \tab ( 1 )\tab // size is 4
  657. \par #define GENERATE_METHOD_INFLECT\tab \tab ( 2 )\tab // size is 4
  658. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls128\pnrnot0\pnstart1 }\ls128\adjustright \fs20\lang1024\cgrid {
  659. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBCONTENTVECTOR Structure
  660. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This structure represents specific information required by the DBOP_content_vector_or operator.
  661. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBCONTENTVECTOR \{
  662. \par \tab DWORD dwRankingMethod;\tab \tab // jaccard, cosine, etc.
  663. \par \tab LONG lWeights; \tab \tab \tab // node weight
  664. \par \} DBCONTENTVECTOR ;
  665. \par
  666. \par // Ranking methods:
  667. \par #define VECTOR_RANK_MIN ( 0 )\tab \tab // size is 4
  668. \par #define VECTOR_RANK_MAX ( 1 )\tab \tab // size is 4
  669. \par #define VECTOR_RANK_INNER ( 2 )\tab \tab // size is 4
  670. \par #define VECTOR_RANK_DICE ( 3 )\tab \tab // size is 4
  671. \par #define VECTOR_RANK_JACCARD ( 4 )\tab \tab // size is 4
  672. \par
  673. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBCONTENTVECTORPROXIMITY Structure
  674. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {This structure represents specific information required by the DBOP_content_proximity operator.
  675. \par
  676. \par }\pard\plain \s293\nowidctlpar\widctlpar\adjustright \f2\fs20\cgrid {\fs16 typedef struct tagDBCONTENTPROXIMITY\tab \{
  677. \par DWORD dwProximityUnit;\tab // words, paras, chapters etc.
  678. \par ULONG ulProximityDistance;\tab // how near is \ldblquote near\rdblquote ?
  679. \par LONG lWeight;\tab // weight of the proximity node
  680. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {\f2 \}\tab DBCONTENTPROXIMITY;
  681. \par
  682. \par // Proximity Units
  683. \par }\pard\plain \s293\nowidctlpar\widctlpar\adjustright \f2\fs20\cgrid {\fs16 #define PROXIMITY_UNIT_WORD ( 0 )
  684. \par #define PROXIMITY_UNIT_SENTENCE ( 1 )
  685. \par #define PROXIMITY_UNIT_PARAGRAPH ( 2 )
  686. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {\f2 #define PROXIMITY_UNIT_CHAPTER ( 3 )}{
  687. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls129\pnrnot0\pnstart1 }\ls129\adjustright \fs20\lang1024\cgrid {
  688. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBGROUPINFO Structure
  689. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This structure represents specific information required by grouping operators, i.e., project_list_ elements used for grouping.
  690. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBGROUPINFO \{
  691. \par \tab LCID\tab \tab lcid;
  692. \par \} DBGROUPINFO ;
  693. \par
  694. \par }{\b\f16\fs24 DBLIKE Structure
  695. \par }{\f0\fs20 This structure represents specific information required by DBOP_like operator.
  696. \par
  697. \par }\pard\plain \s293\nowidctlpar\widctlpar\adjustright \f2\fs20\cgrid {\fs16 typedef struct tagDBLIKE\tab \{
  698. \par LONG lWeight;\tab // weight on the dbop_like node
  699. \par GUID guidDialect;\tab // system to use for \ldblquote likeness\rdblquote . E.g. Reg. Ex.
  700. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {\f2 \}\tab DBLIKE;}{\f0\fs20
  701. \par }{
  702. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls130\pnrnot0\pnstart1 }\ls130\adjustright \fs20\lang1024\cgrid {
  703. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBPARAMETER Structure
  704. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This structure is used to define values for scalar parameters. Note that there is no entry for ordinal. The assumption is that the ordinal will be determined by the provider after evaluating the tree as a whole, and not by assigning a specific value to an individual member within the tree. Consumers can determine the ordinal based on the name using }{\cs93\b ICommandWithParameters::MapParameterNames}{.
  705. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBPARAMETER \{
  706. \par \tab LPWSTR\tab \tab \tab pwszName;\tab \tab // parameter name
  707. \par \tab ITypeInfo *\tab \tab pTypeInfo;\tab \tab // if not a null pointer, type is described
  708. \par \tab \tab \tab \tab \tab \tab \tab \tab \tab // by the ITypeInfo
  709. \par \tab DBNUMERIC *\tab \tab pNum;\tab \tab \tab // Structure describing the
  710. \par \tab \tab \tab \tab \tab \tab \tab \tab \tab // precision, scale and value of
  711. \par \tab \tab \tab \tab \tab \tab \tab \tab \tab // the numeric value (See Appx A).
  712. \par \tab ULONG\tab \tab \tab cbMaxLength;\tab \tab // the maximum length of the
  713. \par \tab \tab \tab \tab \tab \tab \tab \tab \tab // parameter
  714. \par \tab DBPARAMFLAGS\tab \tab dwFlags;\tab \tab \tab // bitmask describing parameter
  715. \par \tab \tab \tab \tab \tab \tab \tab \tab \tab // characteristics
  716. \par \tab DBTYPE\tab \tab \tab wType;\tab \tab \tab // type of the parameter
  717. \par \} DBPARAMETER;
  718. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls131\pnrnot0\pnstart1 }\ls131\adjustright \fs20\lang1024\cgrid {
  719. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBPROPERTY Structure
  720. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This structure is used to define values for properties. For example, DDL commands will use it to define a default value for a column via the DB_PROPERTY_DEFAULT_VALUE property.
  721. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBPROPERTY \{
  722. \par \tab GUID\tab \tab guid;\tab \tab \tab // the guid for the property
  723. \par \tab VARIANT\tab vValue;\tab \tab \tab // the value of the property
  724. \par \} DBPROPERTY;
  725. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls132\pnrnot0\pnstart1 }\ls132\adjustright \fs20\lang1024\cgrid {
  726. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBSETFUNC Structure
  727. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {tyepdef struct tagDBSETFUNC \{
  728. \par \tab DWORD\tab dwSetQuantifier;
  729. \par \} DBSETFUNC;
  730. \par
  731. \par #define DBSETFUNC_NONE\tab \tab = 0x0
  732. \par #define DBSETFUNC_ALL\tab \tab = 0x1
  733. \par #define DBSETFUNC_DISTINCT\tab = 0x2
  734. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls133\pnrnot0\pnstart1 }\ls133\adjustright \fs20\lang1024\cgrid {
  735. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBSORTINFO Structure
  736. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This structure stores the order in which a column will be sorted (i.e., ascending or descending). This information is stored inside a sort_list_element node.
  737. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {typedef struct tagDBSORTINFO \{
  738. \par \tab BOOL\tab \tab fDesc;\tab // TRUE = asc, FALSE = desc
  739. \par \tab LCID\tab \tab lcid;
  740. \par \} DBSORTINFO;
  741. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls134\pnrnot0\pnstart1 }\ls134\adjustright \fs20\lang1024\cgrid {
  742. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {DBTEXT Structure
  743. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {This structure is used by the DBOP_text_command node. It stores the dialect that should be used to interpret the string stored in pwszText. The error locator is filled in by the provider, i.e., the first offending token is indicated as index into the text array, together with its length.
  744. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid { typedef struct tagDBTEXT \{
  745. \par \tab LPWSTR\tab \tab pwszText;
  746. \par \tab ULONG\tab \tab ulErrorLocator; //set by validation routines
  747. \par \tab ULONG\tab \tab ulTokenLength; //length of offending token
  748. \par \tab GUID\tab \tab guidDialect;
  749. \par \} DBTEXT;
  750. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls135\pnrnot0\pnstart1 }\ls135\adjustright \fs20\lang1024\cgrid {
  751. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Collection of GUIDs for the Command Text Node
  752. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {DBGUID_SQL92
  753. \par DBGUID_DBSQL // This covers SQL used by Nile and ODBC.
  754. \par DBGUID_TSQL
  755. \par DBGUID_ACCESSSQL
  756. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls136\pnrnot0\pnstart1 }\ls136\adjustright \fs20\lang1024\cgrid {
  757. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {To determine what dialects a provider supports, a consumer calls }{\cs93\b IDBInfo::GetPropertyInfo}{ for the DBPROP_SQLDIALECTS property.
  758. \par }\pard\plain \s5\li-780\ri-1440\sb20\sa120\sl-440\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel4\adjustright \fs40\kerning20\cgrid {Command Node Example
  759. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {The following is a sample helper function to allocate a new DBCOMMANDTREE structure.
  760. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {DBCOMMANDTREE* PctAllocNode(
  761. \par \tab DBOP op,
  762. \par \tab DBVALUEKIND eKind,
  763. \par \tab ULONG cbValueSize
  764. \par \tab )
  765. \par \tab \{
  766. \par \tab DBCOMMANDTREE* pct;
  767. \par \tab //get the OLE IMalloc interface
  768. \par \tab IMalloc* pim;
  769. \par \tab HRESULT hr = CoGetMalloc(MEMCTX_TASK, &pim);
  770. \par \tab if (FAILED(hr))
  771. \par \tab \tab return NULL;
  772. \par
  773. \par \tab // Allocate fixed size part of the node
  774. \par \tab pct = (DBCOMMANDTREE*)pim->Alloc((sizeof DBCOMMANDTREE));
  775. \par
  776. \par \tab //initialize fields
  777. \par \tab pct->op = op;
  778. \par \tab pct->pctFirstChild = NULL;
  779. \par \tab pct->pctNextSibling = NULL;
  780. \par \tab pct->hrError = S_OK;
  781. \par \tab pct->dwKind = eKind;
  782. \par
  783. \par \tab // Allocate variable size part of the node
  784. \par \tab if ( 0 != cbValueSize )
  785. \par \tab \tab pct.value.pvValue = (void *) pim->Alloc(cbValueSize);\tab
  786. \par
  787. \par \tab //Initialize value space
  788. \par \tab memset(pct->value.pvValue, cbValueSize, 0);
  789. \par
  790. \par \tab return pct;
  791. \par \tab \}
  792. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls137\pnrnot0\pnstart1 }\ls137\adjustright \fs20\lang1024\cgrid {
  793. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {The following is sample code illustrating how to set up a condition subtree representing content search restriction. The condition searches for the ocurrence of the word \ldblquote Database\rdblquote within a column named Text.
  794. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {DBCOMMANDTREE *pct1, pct2;
  795. \par DBCONTENT* pdbc;
  796. \par
  797. \par //Allocate content node
  798. \par pct1 = PctAllocNode(DBOP_content, DBVALUEKIND_CONTENT, (sizeof DBCONTENT));
  799. \par
  800. \par //set up value field
  801. \par pdbc = (DBCONTENT*)(pct1->value.pvValue);
  802. \par pdbc->dwGenerateMethod = GENERATE_METHOD_PREFIX;
  803. \par pdbc->lWeight = 200;
  804. \par pdbc->lcid = DEFAULT_LCID;
  805. \par pdbc->pwszPhrase = L\rdblquote Database\rdblquote ;
  806. \par
  807. \par //allocate column node
  808. \par pct2 = PctAllocNode(DBOP_simple_name, DBVALUEKIND_WSTR,
  809. \par \tab (sizeof LPWSTR));
  810. \par pct2->value.pwszValue = L\rdblquote Text\rdblquote ;
  811. \par
  812. \par //Make the column node a child of the Content node
  813. \par pct1->pctFirstChild = pct2;
  814. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls138\pnrnot0\pnstart1 }\ls138\adjustright \fs20\lang1024\cgrid {
  815. \par }\pard\plain \s6\sb60\sl-280\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel5\adjustright \b\f16\kerning20\cgrid {Collection of GUIDs for the \ldblquote like\rdblquote Operator
  816. \par }\pard\plain \s55\ri-1440\sl-200\slmult0\nowidctlpar\widctlpar\noline\tx290\tx580\tx870\tx1160\tx1450\tx1740\tx2030\tx2320\tx2610\hyphpar0\adjustright \f17\fs16\lang1024\cgrid {DBGUID_LIKE_SQL
  817. \par DBGUID_LIKE_DOS
  818. \par DBGUID_LIKE_OFS
  819. \par DBGUID_LIKE_MAPI
  820. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls139\pnrnot0\pnstart1 }\ls139\adjustright \fs20\lang1024\cgrid {
  821. \par }\pard\plain \s4\li-780\ri-1440\sa160\sl-560\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel3\adjustright \fs52\kerning20\cgrid {Memory Allocation
  822. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {Ownership of command trees may be transfered via several different methods in OLE-DB. A transfer of ownership occurs when a component that allocates a command tree is no longer responsible for freeing the allocated resources. For example, command trees may be obtained by consumers via, }{\cs93\b ICommand::GetCommandTree}{. In order for this transfer to be successful, a standard for allocation and deallocation must be identified.
  823. \par In general, the standard OLE Task Allocator interface, obtained by calling CoGetMalloc should be used for allocation and release of the memory. DBCOMMANDTREE nodes and the values embedded therein are allocated using }{\cs93\b IMalloc::Alloc}{ and released via }{\cs93\b IMalloc::Free}{, with the following exceptions:
  824. \par {\pntext\pard\plain\s52 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}}\pard\plain \s52\fi-240\li240\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline{\*\pn \pnlvlblt\ilvl0\ls9\pnrnot0\pnf3\pnstart1\pnindent240\pnhang{\pntxtb \'b7}}\hyphpar0\ls9\adjustright \fs20\kerning20\cgrid {BSTRs: }{\cs93\b SysAllocString}{, }{\cs93\b SysFreeString}{ family of functions
  825. \par {\pntext\pard\plain\s52 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}OLE interfaces: }{\cs93\b IUnknown::AddRef}{, }{\cs93\b IUnknown::Release}{
  826. \par {\pntext\pard\plain\s52 \f3\fs20\kerning20\cgrid \loch\af3\dbch\af0\hich\f3 \'b7\tab}SafeArrays: }{\cs93\b SafeArrayAlloc}{, }{\cs93\b SafeArrayDestroy}{ family of functions
  827. \par {\pntext\tab}}\pard\plain \s54\qr\sl-80\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls140\pnrnot0\pnstart1 }\ls140\adjustright \fs20\lang1024\cgrid {
  828. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {All other pointers embedded in a command tree are assumed to have been dynamically allocated with }{\cs93\b IMalloc::Alloc}{ and will be released with }{\cs93\b IMalloc::Free}{.
  829. \par When allocating a tree that will not change ownership, any method of allocation is acceptable except for the three exception cases listed above since those values also have special copy functions.
  830. \par Providers should have separate allocations for the fixed (24 bytes) and the variable parts of the node to reduce memory fragmentation and to enable in place substitution of values in the node.
  831. \par }\pard\plain \s4\li-780\ri-1440\sa160\sl-560\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel3\adjustright \fs52\kerning20\cgrid {Binding and Scope of Names
  832. \par }\pard\plain \s142\sa80\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \f16\fs20\kerning20\cgrid {\cs122\b Issue}{ We need to include command tree name scoping rules. The rules need to be at least compatible with the ANSI SQL scoping rules.
  833. \par {\pntext\tab}}\pard\plain \s38\qr\sl-120\slmult0\nowidctlpar\widctlpar{\*\pn \pnlvlbody\ilvl0\ls141\pnrnot0\pnstart1 }\ls141\adjustright \fs20\lang1024\cgrid {
  834. \par }\pard\plain \s4\li-780\ri-1440\sa160\sl-560\slmult0\keep\keepn\nowidctlpar\widctlpar\noline\hyphpar0\outlinelevel3\adjustright \fs52\kerning20\cgrid {Command Tree Examples
  835. \par }\pard\plain \s19\sa120\sl-240\slmult0\nowidctlpar\widctlpar\noline\hyphpar0\adjustright \fs20\kerning20\cgrid {
  836. \par }}