internals.ps
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:626k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. n 2025 900 m 2925 900 l gs col-1 s gr 
  2. % Polyline
  3. n 2475 900 m 2475 1170 l gs col-1 s gr 
  4. % Polyline
  5. n 2025 675 m 2925 675 l gs col-1 s gr 
  6. /Times-Roman ff 150.00 scf sf
  7. 2250 630 m
  8. gs 1 -1 sc (A_Expr) col-1 sh gr
  9. /Times-Roman ff 150.00 scf sf
  10. 2340 855 m
  11. gs 1 -1 sc (AND) col-1 sh gr
  12. % Polyline
  13. n 3060 1575 m 3960 1575 l 3960 2295 l 3060 2295 l cp gs col-1 s gr 
  14. % Polyline
  15. n 3060 2025 m 3960 2025 l gs col-1 s gr 
  16. % Polyline
  17. n 3510 2025 m 3510 2295 l gs col-1 s gr 
  18. % Polyline
  19. n 3060 1800 m 3960 1800 l gs col-1 s gr 
  20. /Times-Roman ff 150.00 scf sf
  21. 3285 1755 m
  22. gs 1 -1 sc (A_Expr) col-1 sh gr
  23. /Times-Roman ff 150.00 scf sf
  24. 3375 1980 m
  25. gs 1 -1 sc (NOT) col-1 sh gr
  26. % Polyline
  27. n 3060 2025 m 3510 2295 l gs col-1 s gr 
  28. % Polyline
  29. n 3510 2025 m 3060 2295 l gs col-1 s gr 
  30. % Polyline
  31. n 3285 2970 m 4185 2970 l 4185 3690 l 3285 3690 l cp gs col-1 s gr 
  32. % Polyline
  33. n 3285 3420 m 4185 3420 l gs col-1 s gr 
  34. % Polyline
  35. n 3735 3420 m 3735 3690 l gs col-1 s gr 
  36. % Polyline
  37. n 3285 3195 m 4185 3195 l gs col-1 s gr 
  38. /Times-Roman ff 150.00 scf sf
  39. 3510 3150 m
  40. gs 1 -1 sc (A_Expr) col-1 sh gr
  41. /Times-Roman ff 150.00 scf sf
  42. 3600 3375 m
  43. gs 1 -1 sc (AND) col-1 sh gr
  44. % Polyline
  45. gs  clippath
  46. 800 2617 m 694 2680 l 758 2575 l 643 2689 l 686 2732 l  cp clip
  47. n 1215 2160 m 675 2700 l gs col-1 s gr gr
  48. % arrowhead
  49. n 800 2617 m 694 2680 l 758 2575 l 779 2596 l 800 2617 l  cp gs 0.00 setgray ef gr  col-1 s
  50. % Polyline
  51. gs  clippath
  52. 2122 2575 m 2185 2680 l 2080 2617 l 2194 2732 l 2237 2689 l  cp clip
  53. n 1665 2160 m 2205 2700 l gs col-1 s gr gr
  54. % arrowhead
  55. n 2122 2575 m 2185 2680 l 2080 2617 l 2101 2596 l 2122 2575 l  cp gs 0.00 setgray ef gr  col-1 s
  56. % Polyline
  57. gs  clippath
  58. 1579 1518 m 1462 1560 l 1546 1468 l 1411 1558 l 1444 1608 l  cp clip
  59. n 2250 1035 m 1440 1575 l gs col-1 s gr gr
  60. % arrowhead
  61. n 1579 1518 m 1462 1560 l 1546 1468 l 1562 1493 l 1579 1518 l  cp gs 0.00 setgray ef gr  col-1 s
  62. % Polyline
  63. gs  clippath
  64. 3411 1458 m 3494 1550 l 3378 1508 l 3513 1598 l 3546 1548 l  cp clip
  65. n 2707 1025 m 3517 1565 l gs col-1 s gr gr
  66. % arrowhead
  67. n 3411 1458 m 3494 1550 l 3378 1508 l 3395 1483 l 3411 1458 l  cp gs 0.00 setgray ef gr  col-1 s
  68. % Polyline
  69. gs  clippath
  70. 3765 2823 m 3735 2943 l 3705 2823 l 3705 2985 l 3765 2985 l  cp clip
  71. n 3735 2160 m 3735 2970 l gs col-1 s gr gr
  72. % arrowhead
  73. n 3765 2823 m 3735 2943 l 3705 2823 l 3735 2823 l 3765 2823 l  cp gs 0.00 setgray ef gr  col-1 s
  74. % Polyline
  75. gs  clippath
  76. 3095 4012 m 2989 4075 l 3053 3970 l 2938 4084 l 2981 4127 l  cp clip
  77. n 3510 3555 m 2970 4095 l gs col-1 s gr gr
  78. % arrowhead
  79. n 3095 4012 m 2989 4075 l 3053 3970 l 3074 3991 l 3095 4012 l  cp gs 0.00 setgray ef gr  col-1 s
  80. % Polyline
  81. gs  clippath
  82. 4417 3970 m 4480 4075 l 4375 4012 l 4489 4127 l 4532 4084 l  cp clip
  83. n 3960 3555 m 4500 4095 l gs col-1 s gr gr
  84. % arrowhead
  85. n 4417 3970 m 4480 4075 l 4375 4012 l 4396 3991 l 4417 3970 l  cp gs 0.00 setgray ef gr  col-1 s
  86. % Polyline
  87. n 45 3555 m 1305 3555 l gs col-1 s gr 
  88. % Polyline
  89. n 45 3285 m 1305 3285 l gs col-1 s gr 
  90. % Polyline
  91. n 45 2700 m 1305 2700 l 1305 3825 l 45 3825 l cp gs col-1 s gr 
  92. % Polyline
  93. n 1035 2925 m 1035 3825 l gs col-1 s gr 
  94. % Polyline
  95. n 45 2925 m 1305 2925 l gs col-1 s gr 
  96. % Polyline
  97. n 1035 3285 m 1305 3555 l gs col-1 s gr 
  98. % Polyline
  99. n 1035 3555 m 1305 3285 l gs col-1 s gr 
  100. % Polyline
  101. n 1305 3555 m 1035 3825 l gs col-1 s gr 
  102. % Polyline
  103. n 1035 3555 m 1305 3825 l gs col-1 s gr 
  104. % Polyline
  105. n 1575 3555 m 2835 3555 l gs col-1 s gr 
  106. % Polyline
  107. n 1575 3285 m 2835 3285 l gs col-1 s gr 
  108. % Polyline
  109. n 1575 2700 m 2835 2700 l 2835 3825 l 1575 3825 l cp gs col-1 s gr 
  110. % Polyline
  111. n 2565 2925 m 2565 3825 l gs col-1 s gr 
  112. % Polyline
  113. n 1575 2925 m 2835 2925 l gs col-1 s gr 
  114. % Polyline
  115. n 2565 3285 m 2835 3555 l gs col-1 s gr 
  116. % Polyline
  117. n 2565 3555 m 2835 3285 l gs col-1 s gr 
  118. % Polyline
  119. n 2835 3555 m 2565 3825 l gs col-1 s gr 
  120. % Polyline
  121. n 2565 3555 m 2835 3825 l gs col-1 s gr 
  122. % Polyline
  123. n 2340 4950 m 3600 4950 l gs col-1 s gr 
  124. % Polyline
  125. n 2340 4680 m 3600 4680 l gs col-1 s gr 
  126. % Polyline
  127. n 2340 4095 m 3600 4095 l 3600 5220 l 2340 5220 l cp gs col-1 s gr 
  128. % Polyline
  129. n 3330 4320 m 3330 5220 l gs col-1 s gr 
  130. % Polyline
  131. n 2340 4320 m 3600 4320 l gs col-1 s gr 
  132. % Polyline
  133. n 3330 4680 m 3600 4950 l gs col-1 s gr 
  134. % Polyline
  135. n 3330 4950 m 3600 4680 l gs col-1 s gr 
  136. % Polyline
  137. n 3600 4950 m 3330 5220 l gs col-1 s gr 
  138. % Polyline
  139. n 3330 4950 m 3600 5220 l gs col-1 s gr 
  140. % Polyline
  141. n 3870 4950 m 5130 4950 l gs col-1 s gr 
  142. % Polyline
  143. n 3870 4680 m 5130 4680 l gs col-1 s gr 
  144. % Polyline
  145. n 3870 4095 m 5130 4095 l 5130 5220 l 3870 5220 l cp gs col-1 s gr 
  146. % Polyline
  147. n 4860 4320 m 4860 5220 l gs col-1 s gr 
  148. % Polyline
  149. n 3870 4320 m 5130 4320 l gs col-1 s gr 
  150. % Polyline
  151. n 4860 4680 m 5130 4950 l gs col-1 s gr 
  152. % Polyline
  153. n 4860 4950 m 5130 4680 l gs col-1 s gr 
  154. % Polyline
  155. n 5130 4950 m 4860 5220 l gs col-1 s gr 
  156. % Polyline
  157. n 4860 4950 m 5130 5220 l gs col-1 s gr 
  158. /Times-Roman ff 150.00 scf sf
  159. 585 3150 m
  160. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  161. /Times-Roman ff 150.00 scf sf
  162. 315 2880 m
  163. gs 1 -1 sc (SeqScan (A)) col-1 sh gr
  164. /Times-Roman ff 150.00 scf sf
  165. 2115 3150 m
  166. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  167. /Times-Roman ff 150.00 scf sf
  168. 1845 2880 m
  169. gs 1 -1 sc (SeqScan (B)) col-1 sh gr
  170. /Times-Roman ff 150.00 scf sf
  171. 2880 4545 m
  172. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  173. /Times-Roman ff 150.00 scf sf
  174. 2610 4275 m
  175. gs 1 -1 sc (SeqScan (C)) col-1 sh gr
  176. /Times-Roman ff 150.00 scf sf
  177. 4410 4545 m
  178. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  179. /Times-Roman ff 150.00 scf sf
  180. 4140 4275 m
  181. gs 1 -1 sc (SeqScan (D)) col-1 sh gr
  182. /Times-Roman ff 150.00 scf sf
  183. 90 3465 m
  184. gs 1 -1 sc (unionClause) col-1 sh gr
  185. /Times-Roman ff 150.00 scf sf
  186. 90 3735 m
  187. gs 1 -1 sc (intersectClause) col-1 sh gr
  188. /Times-Roman ff 150.00 scf sf
  189. 1620 3465 m
  190. gs 1 -1 sc (unionClause) col-1 sh gr
  191. /Times-Roman ff 150.00 scf sf
  192. 1620 3735 m
  193. gs 1 -1 sc (intersectClause) col-1 sh gr
  194. /Times-Roman ff 150.00 scf sf
  195. 2385 4860 m
  196. gs 1 -1 sc (unionClause) col-1 sh gr
  197. /Times-Roman ff 150.00 scf sf
  198. 2385 5130 m
  199. gs 1 -1 sc (intersectClause) col-1 sh gr
  200. /Times-Roman ff 150.00 scf sf
  201. 3915 4860 m
  202. gs 1 -1 sc (unionClause) col-1 sh gr
  203. /Times-Roman ff 150.00 scf sf
  204. 3915 5130 m
  205. gs 1 -1 sc (intersectClause) col-1 sh gr
  206. showpage
  207. $F2psEnd
  208. rs
  209. %%EndDocument
  210.  @endspecial 604 2688 a(Figure)g(3.11:)j Fp(Oper)o(ator)e(tr)n(ee)h
  211. Ft(for)d Fl(()p Fk(A)h Fo([)f Fk(B)r Fl())p Fo(n)p
  212. Fl(()p Fk(C)k Fo(\)d Fk(D)q Fl())198 2864 y Ft(The)24
  213. b(rule)f Fr(SelectStmt)g Ft(transforms)f(the)i Fp(oper)o(ator)g(tr)n
  214. (ee)g Ft(b)o(uilt)f(of)g Fr(A)p 1552 2864 V 18 w(Expr)g
  215. Ft(nodes)h(into)f(an)198 2924 y Fp(oper)o(ator)d(tr)n(ee)g
  216. Ft(using)g Fr(Expr)f Ft(nodes)g(by)g(a)h(call)f(to)h(the)f(function)f
  217. Fr(A)p 1447 2924 V 18 w(Expr)p 1585 2924 V 18 w(to)p
  218. 1663 2924 V 17 w(Expr())h Ft(which)198 2984 y(additionally)13
  219. b(replaces)h(e)o(v)o(ery)f Fr(OR)g Ft(node)h(by)f(an)h
  220. Fr(AND)f Ft(node)h(and)f(vice)h(v)o(ersa.)20 b(This)14
  221. b(is)g(performed)e(in)198 3044 y(order)g(to)g(be)g(able)h(to)f(use)h
  222. (the)f(function)g Fr(cnfify())f Ft(later)h(on.)198
  223. 3163 y(The)j Fp(tr)o(ansformations)g Ft(follo)o(wing)e(the)h
  224. Fp(parser)h Ft(e)o(xpect)g(a)f Fr(SelectStmt)g Ft(node)g(to)g(be)h
  225. (returned)e(by)198 3223 y(the)g(rule)f Fr(SelectStmt)f
  226. Ft(and)i(not)f(an)h Fp(oper)o(ator)g(tr)n(ee)p Ft(.)18
  227. b(So)12 b(if)g(the)g(rule)h Fr(select)p 1640 3223 V 17
  228. w(w)p 1687 3223 V 18 w(o)p 1735 3223 V 18 w(sort)f Ft(hands)198
  229. 3283 y(back)h(such)h(a)f(node)g((meaning)g(that)g(the)g(query)f(did)h
  230. (not)g(contain)g(an)o(y)g(set)h(operations))e(we)h(just)h(ha)o(v)o(e)
  231. 198 3342 y(to)f(attach)h(the)g(data)f(structure)g(b)o(uilt)g(up)h(by)f
  232. (the)h Fr(sort)p 1171 3342 V 17 w(clause)f Ft(rule)g(and)h(are)g
  233. (02nished,)g(b)o(ut)f(when)198 3402 y(we)g(get)f(an)g
  234. Fp(oper)o(ator)h(tr)n(ee)g Ft(we)g(ha)o(v)o(e)g(to)f(perform)f(the)h
  235. (follo)o(wing)f(steps:)p eop
  236. %%Page: 102 102
  237. 102 101 bop 270 60 a Ft(102)57 b Fm(CHAPTER)14 b(3.)28
  238. b(POSTGRESQL)13 b(FR)n(OM)f(THE)i(PR)n(OGRAMMER'S)f(POINT)f(OF)g(VIEW)
  239. 345 234 y Fo(17)25 b Ft(Create)17 b(a)h(03at)f(list)g(of)g(all)h
  240. Fr(SelectStmt)e Ft(nodes)i(of)f(the)g Fp(oper)o(ator)i(tr)n(ee)f
  241. Ft((by)f(a)g(call)h(to)f(the)395 294 y(function)8 b
  242. Fr(create)p 753 294 15 2 v 18 w(select)p 951 294 V 17
  243. w(list())p Ft())h(and)h(attach)g(the)f(list)h(to)g(the)g(02eld)f
  244. Fr(unionClause)395 354 y Ft(of)i(the)i(leftmost)f Fr(SelectStmt)f
  245. Ft((see)i(ne)o(xt)f(step).)345 463 y Fo(17)25 b Ft(Find)d(the)i
  246. (leftmost)e(leaf)h(()p Fr(SelectStmt)f Ft(node))h(of)g(the)g
  247. Fp(oper)o(ator)h(tr)n(ee)g Ft((this)f(is)h(auto-)395
  248. 523 y(matically)h(the)h(02rst)f(member)g(of)g(the)h(abo)o(v)o(e)g
  249. (created)g(list)g(because)g(of)g(the)f(technique)395
  250. 583 y Fr(create)p 578 583 V 17 w(select)p 775 583 V 17
  251. w(list())12 b Ft(uses)h(to)f(create)h(the)f(list).)345
  252. 692 y Fo(17)25 b Ft(Attach)e(the)g(whole)g Fp(oper)o(ator)h(tr)n(ee)g
  253. Ft((including)e(the)i(leftmost)e(node)h(itself))g(to)g(the)g(02eld)
  254. 395 752 y Fr(intersectClause)10 b Ft(of)i(the)h(leftmost)e
  255. Fr(SelectStmt)h Ft(node.)345 861 y Fo(17)25 b Ft(Attach)32
  256. b(the)g(data)h(structure)f(b)o(uilt)g(up)g(by)h(the)f
  257. Fr(sort)p 1480 861 V 18 w(clause)g Ft(rule)g(to)g(the)g(02eld)395
  258. 921 y Fr(sortClause)11 b Ft(of)h(the)g(leftmost)g Fr(SelectStmt)f
  259. Ft(node.)345 1030 y Fo(17)25 b Ft(Hand)16 b(back)g(the)g(leftmost)g
  260. Fr(SelectStmt)f Ft(node)h((with)g(the)g Fp(oper)o(ator)h(tr)n(ee)p
  261. Ft(,)h(the)e(list)g(of)g(all)395 1090 y Fr(SelectStmt)11
  262. b Ft(nodes)i(and)f(the)g Fr(sortClause)g Ft(attached)g(to)g(it).)270
  263. 1197 y(Figure)i(3.12)i(sho)o(ws)g(the)f(02nal)g(data)g(structure)g
  264. (deri)o(v)o(ed)f(from)g(the)i Fp(oper)o(ator)g(tr)n(ee)g
  265. Ft(sho)o(wn)f(in)g(02gure)270 1257 y(3.11)e(handed)f(back)g(by)h(the)
  266. f Fr(SelectStmt)f Ft(rule:)465 3167 y @beginspecial 145
  267. @llx 212 @lly 466 @urx 579 @ury 3210 @rwi @setspecial
  268. %%BeginDocument: figures/union_intersect_select.ps
  269. %Magnification: 1.05
  270. /$F2psDict 200 dict def
  271. $F2psDict begin
  272. $F2psDict /mtrx matrix put
  273. /col-1 {0 setgray} bind def
  274. /col0 {0.000 0.000 0.000 srgb} bind def
  275. /col1 {0.000 0.000 1.000 srgb} bind def
  276. /col2 {0.000 1.000 0.000 srgb} bind def
  277. /col3 {0.000 1.000 1.000 srgb} bind def
  278. /col4 {1.000 0.000 0.000 srgb} bind def
  279. /col5 {1.000 0.000 1.000 srgb} bind def
  280. /col6 {1.000 1.000 0.000 srgb} bind def
  281. /col7 {1.000 1.000 1.000 srgb} bind def
  282. /col8 {0.000 0.000 0.560 srgb} bind def
  283. /col9 {0.000 0.000 0.690 srgb} bind def
  284. /col10 {0.000 0.000 0.820 srgb} bind def
  285. /col11 {0.530 0.810 1.000 srgb} bind def
  286. /col12 {0.000 0.560 0.000 srgb} bind def
  287. /col13 {0.000 0.690 0.000 srgb} bind def
  288. /col14 {0.000 0.820 0.000 srgb} bind def
  289. /col15 {0.000 0.560 0.560 srgb} bind def
  290. /col16 {0.000 0.690 0.690 srgb} bind def
  291. /col17 {0.000 0.820 0.820 srgb} bind def
  292. /col18 {0.560 0.000 0.000 srgb} bind def
  293. /col19 {0.690 0.000 0.000 srgb} bind def
  294. /col20 {0.820 0.000 0.000 srgb} bind def
  295. /col21 {0.560 0.000 0.560 srgb} bind def
  296. /col22 {0.690 0.000 0.690 srgb} bind def
  297. /col23 {0.820 0.000 0.820 srgb} bind def
  298. /col24 {0.500 0.190 0.000 srgb} bind def
  299. /col25 {0.630 0.250 0.000 srgb} bind def
  300. /col26 {0.750 0.380 0.000 srgb} bind def
  301. /col27 {1.000 0.500 0.500 srgb} bind def
  302. /col28 {1.000 0.630 0.630 srgb} bind def
  303. /col29 {1.000 0.750 0.750 srgb} bind def
  304. /col30 {1.000 0.880 0.880 srgb} bind def
  305. /col31 {1.000 0.840 0.000 srgb} bind def
  306. end
  307. save
  308. 132.5 582.5 translate
  309. 1 -1 scale
  310. /cp {closepath} bind def
  311. /ef {eofill} bind def
  312. /gr {grestore} bind def
  313. /gs {gsave} bind def
  314. /sa {save} bind def
  315. /rs {restore} bind def
  316. /l {lineto} bind def
  317. /m {moveto} bind def
  318. /rm {rmoveto} bind def
  319. /n {newpath} bind def
  320. /s {stroke} bind def
  321. /sh {show} bind def
  322. /slc {setlinecap} bind def
  323. /slj {setlinejoin} bind def
  324. /slw {setlinewidth} bind def
  325. /srgb {setrgbcolor} bind def
  326. /rot {rotate} bind def
  327. /sc {scale} bind def
  328. /sd {setdash} bind def
  329. /ff {findfont} bind def
  330. /sf {setfont} bind def
  331. /scf {scalefont} bind def
  332. /sw {stringwidth} bind def
  333. /tr {translate} bind def
  334. /tnt {dup dup currentrgbcolor
  335.   4 -2 roll dup 1 exch sub 3 -1 roll mul add
  336.   4 -2 roll dup 1 exch sub 3 -1 roll mul add
  337.   4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  338.   bind def
  339. /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  340.   4 -2 roll mul srgb} bind def
  341.  /DrawSplineSection {
  342. /y3 exch def
  343. /x3 exch def
  344. /y2 exch def
  345. /x2 exch def
  346. /y1 exch def
  347. /x1 exch def
  348. /xa x1 x2 x1 sub 0.666667 mul add def
  349. /ya y1 y2 y1 sub 0.666667 mul add def
  350. /xb x3 x2 x3 sub 0.666667 mul add def
  351. /yb y3 y2 y3 sub 0.666667 mul add def
  352. x1 y1 lineto
  353. xa ya xb yb x3 y3 curveto
  354. } def
  355. /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
  356. /$F2psEnd {$F2psEnteredState restore end} def
  357. $F2psBegin
  358. 10 setmiterlimit
  359. n 0 792 m 0 0 l 612 0 l 612 792 l cp clip
  360.  0.06299 0.06299 sc
  361. 7.500 slw
  362. % Polyline
  363. n 1800 1350 m 2700 1350 l 2700 2070 l 1800 2070 l cp gs col-1 s gr 
  364. % Polyline
  365. n 1800 1800 m 2700 1800 l gs col-1 s gr 
  366. % Polyline
  367. n 1800 1575 m 2700 1575 l gs col-1 s gr 
  368. % Polyline
  369. n 2430 1800 m 2430 2070 l gs col-1 s gr 
  370. /Times-Roman ff 150.00 scf sf
  371. 2160 1755 m
  372. gs 1 -1 sc (OR) col-1 sh gr
  373. /Times-Roman ff 150.00 scf sf
  374. 2115 1530 m
  375. gs 1 -1 sc (Expr) col-1 sh gr
  376. /Times-Roman ff 150.00 scf sf
  377. 1980 1980 m
  378. gs 1 -1 sc (args) col-1 sh gr
  379. % Polyline
  380. n 225 2475 m 1125 2475 l 1125 3195 l 225 3195 l cp gs col-1 s gr 
  381. % Polyline
  382. n 225 2925 m 1125 2925 l gs col-1 s gr 
  383. % Polyline
  384. n 225 2700 m 1125 2700 l gs col-1 s gr 
  385. % Polyline
  386. n 855 2925 m 855 3195 l gs col-1 s gr 
  387. /Times-Roman ff 150.00 scf sf
  388. 540 2880 m
  389. gs 1 -1 sc (AND) col-1 sh gr
  390. /Times-Roman ff 150.00 scf sf
  391. 540 2655 m
  392. gs 1 -1 sc (Expr) col-1 sh gr
  393. /Times-Roman ff 150.00 scf sf
  394. 360 3105 m
  395. gs 1 -1 sc (args) col-1 sh gr
  396. % Polyline
  397. n 1350 2925 m 1890 2925 l 1890 3195 l 1350 3195 l cp gs col-1 s gr 
  398. % Polyline
  399. n 1620 2925 m 1620 3195 l gs col-1 s gr 
  400. % Polyline
  401. n 2115 2925 m 2655 2925 l 2655 3195 l 2115 3195 l cp gs col-1 s gr 
  402. % Polyline
  403. n 2385 2925 m 2385 3195 l gs col-1 s gr 
  404. % Polyline
  405. n 2385 2925 m 2655 3195 l gs col-1 s gr 
  406. % Polyline
  407. n 2655 2925 m 2385 3195 l gs col-1 s gr 
  408. % Polyline
  409. n 2925 1800 m 3465 1800 l 3465 2070 l 2925 2070 l cp gs col-1 s gr 
  410. % Polyline
  411. n 3195 1800 m 3195 2070 l gs col-1 s gr 
  412. % Polyline
  413. n 3690 1800 m 4230 1800 l 4230 2070 l 3690 2070 l cp gs col-1 s gr 
  414. % Polyline
  415. n 3960 1800 m 3960 2070 l gs col-1 s gr 
  416. % Polyline
  417. n 3960 1800 m 4230 2070 l gs col-1 s gr 
  418. % Polyline
  419. n 4230 1800 m 3960 2070 l gs col-1 s gr 
  420. % Polyline
  421. gs  clippath
  422. 3543 1905 m 3663 1935 l 3543 1965 l 3705 1965 l 3705 1905 l  cp clip
  423. n 3330 1935 m 3690 1935 l gs col-1 s gr gr
  424. % arrowhead
  425. n 3543 1905 m 3663 1935 l 3543 1965 l 3543 1935 l 3543 1905 l  cp gs 0.00 setgray ef gr  col-1 s
  426. % Polyline
  427. n 1710 810 m 2250 810 l 2250 1080 l 1710 1080 l cp gs col-1 s gr 
  428. % Polyline
  429. n 1980 810 m 1980 1080 l gs col-1 s gr 
  430. % Polyline
  431. n 3240 810 m 3780 810 l 3780 1080 l 3240 1080 l cp gs col-1 s gr 
  432. % Polyline
  433. n 3510 810 m 3510 1080 l gs col-1 s gr 
  434. % Polyline
  435. n 4005 810 m 4545 810 l 4545 1080 l 4005 1080 l cp gs col-1 s gr 
  436. % Polyline
  437. n 4275 810 m 4275 1080 l gs col-1 s gr 
  438. % Polyline
  439. n 4275 810 m 4545 1080 l gs col-1 s gr 
  440. % Polyline
  441. n 4545 810 m 4275 1080 l gs col-1 s gr 
  442. % Polyline
  443. n 2475 810 m 3015 810 l 3015 1080 l 2475 1080 l cp gs col-1 s gr 
  444. % Polyline
  445. n 2745 810 m 2745 1080 l gs col-1 s gr 
  446. /Times-Roman ff 150.00 scf sf
  447. 2340 420 m
  448. gs 1 -1 sc (SelectStmt (B)) col-1 sh gr
  449. /Times-Roman ff 150.00 scf sf
  450. 2430 225 m
  451. gs 1 -1 sc (Pointer to) col-1 sh gr
  452. % Polyline
  453. n 2925 2475 m 3825 2475 l 3825 3195 l 2925 3195 l cp gs col-1 s gr 
  454. % Polyline
  455. n 2925 2925 m 3825 2925 l gs col-1 s gr 
  456. % Polyline
  457. n 2925 2700 m 3825 2700 l gs col-1 s gr 
  458. % Polyline
  459. n 3555 2925 m 3555 3195 l gs col-1 s gr 
  460. /Times-Roman ff 150.00 scf sf
  461. 3240 2880 m
  462. gs 1 -1 sc (NOT) col-1 sh gr
  463. /Times-Roman ff 150.00 scf sf
  464. 3240 2655 m
  465. gs 1 -1 sc (Expr) col-1 sh gr
  466. /Times-Roman ff 150.00 scf sf
  467. 3105 3105 m
  468. gs 1 -1 sc (args) col-1 sh gr
  469. % Polyline
  470. n 4050 2925 m 4590 2925 l 4590 3195 l 4050 3195 l cp gs col-1 s gr 
  471. % Polyline
  472. n 4320 2925 m 4320 3195 l gs col-1 s gr 
  473. % Polyline
  474. n 4320 2925 m 4590 3195 l gs col-1 s gr 
  475. % Polyline
  476. n 4590 2925 m 4320 3195 l gs col-1 s gr 
  477. % Polyline
  478. n 2340 3600 m 3240 3600 l 3240 4320 l 2340 4320 l cp gs col-1 s gr 
  479. % Polyline
  480. n 2340 4050 m 3240 4050 l gs col-1 s gr 
  481. % Polyline
  482. n 2340 3825 m 3240 3825 l gs col-1 s gr 
  483. % Polyline
  484. n 2970 4050 m 2970 4320 l gs col-1 s gr 
  485. /Times-Roman ff 150.00 scf sf
  486. 2700 4005 m
  487. gs 1 -1 sc (OR) col-1 sh gr
  488. /Times-Roman ff 150.00 scf sf
  489. 2655 3780 m
  490. gs 1 -1 sc (Expr) col-1 sh gr
  491. /Times-Roman ff 150.00 scf sf
  492. 2520 4230 m
  493. gs 1 -1 sc (args) col-1 sh gr
  494. % Polyline
  495. n 3465 4050 m 4005 4050 l 4005 4320 l 3465 4320 l cp gs col-1 s gr 
  496. % Polyline
  497. n 3735 4050 m 3735 4320 l gs col-1 s gr 
  498. % Polyline
  499. n 4230 4050 m 4770 4050 l 4770 4320 l 4230 4320 l cp gs col-1 s gr 
  500. % Polyline
  501. n 4500 4050 m 4500 4320 l gs col-1 s gr 
  502. % Polyline
  503. n 4500 4050 m 4770 4320 l gs col-1 s gr 
  504. % Polyline
  505. n 4770 4050 m 4500 4320 l gs col-1 s gr 
  506. % Polyline
  507. gs  clippath
  508. 3318 4155 m 3438 4185 l 3318 4215 l 3480 4215 l 3480 4155 l  cp clip
  509. n 3105 4185 m 3465 4185 l gs col-1 s gr gr
  510. % arrowhead
  511. n 3318 4155 m 3438 4185 l 3318 4215 l 3318 4185 l 3318 4155 l  cp gs 0.00 setgray ef gr  col-1 s
  512. % Polyline
  513. gs  clippath
  514. 4083 4155 m 4203 4185 l 4083 4215 l 4245 4215 l 4245 4155 l  cp clip
  515. n 3870 4185 m 4230 4185 l gs col-1 s gr gr
  516. % arrowhead
  517. n 4083 4155 m 4203 4185 l 4083 4215 l 4083 4185 l 4083 4155 l  cp gs 0.00 setgray ef gr  col-1 s
  518. % Polyline
  519. gs  clippath
  520. 1203 3030 m 1323 3060 l 1203 3090 l 1365 3090 l 1365 3030 l  cp clip
  521. n 990 3060 m 1350 3060 l gs col-1 s gr gr
  522. % arrowhead
  523. n 1203 3030 m 1323 3060 l 1203 3090 l 1203 3060 l 1203 3030 l  cp gs 0.00 setgray ef gr  col-1 s
  524. % Polyline
  525. gs  clippath
  526. 2778 1905 m 2898 1935 l 2778 1965 l 2940 1965 l 2940 1905 l  cp clip
  527. n 2565 1935 m 2925 1935 l gs col-1 s gr gr
  528. % arrowhead
  529. n 2778 1905 m 2898 1935 l 2778 1965 l 2778 1935 l 2778 1905 l  cp gs 0.00 setgray ef gr  col-1 s
  530. % Polyline
  531. gs  clippath
  532. 1968 3030 m 2088 3060 l 1968 3090 l 2130 3090 l 2130 3030 l  cp clip
  533. n 1755 3060 m 2115 3060 l gs col-1 s gr gr
  534. % arrowhead
  535. n 1968 3030 m 2088 3060 l 1968 3090 l 1968 3060 l 1968 3030 l  cp gs 0.00 setgray ef gr  col-1 s
  536. % Polyline
  537. gs  clippath
  538. 2328 915 m 2448 945 l 2328 975 l 2490 975 l 2490 915 l  cp clip
  539. n 2115 945 m 2475 945 l gs col-1 s gr gr
  540. % arrowhead
  541. n 2328 915 m 2448 945 l 2328 975 l 2328 945 l 2328 915 l  cp gs 0.00 setgray ef gr  col-1 s
  542. % Polyline
  543. gs  clippath
  544. 3858 915 m 3978 945 l 3858 975 l 4020 975 l 4020 915 l  cp clip
  545. n 3645 945 m 4005 945 l gs col-1 s gr gr
  546. % arrowhead
  547. n 3858 915 m 3978 945 l 3858 975 l 3858 945 l 3858 915 l  cp gs 0.00 setgray ef gr  col-1 s
  548. % Polyline
  549. gs  clippath
  550. 3093 915 m 3213 945 l 3093 975 l 3255 975 l 3255 915 l  cp clip
  551. n 2880 945 m 3240 945 l gs col-1 s gr gr
  552. % arrowhead
  553. n 3093 915 m 3213 945 l 3093 975 l 3093 945 l 3093 915 l  cp gs 0.00 setgray ef gr  col-1 s
  554. % Polyline
  555. gs  clippath
  556. 1563 915 m 1683 945 l 1563 975 l 1725 975 l 1725 915 l  cp clip
  557. n 1350 945 m 1710 945 l gs col-1 s gr gr
  558. % arrowhead
  559. n 1563 915 m 1683 945 l 1563 975 l 1563 945 l 1563 915 l  cp gs 0.00 setgray ef gr  col-1 s
  560. % Polyline
  561. gs  clippath
  562. 3903 3030 m 4023 3060 l 3903 3090 l 4065 3090 l 4065 3030 l  cp clip
  563. n 3690 3060 m 4050 3060 l gs col-1 s gr gr
  564. % arrowhead
  565. n 3903 3030 m 4023 3060 l 3903 3090 l 3903 3060 l 3903 3030 l  cp gs 0.00 setgray ef gr  col-1 s
  566. % Polyline
  567. n 225 4455 m 1485 4455 l gs col-1 s gr 
  568. % Polyline
  569. n 225 4185 m 1485 4185 l gs col-1 s gr 
  570. % Polyline
  571. n 225 3600 m 1485 3600 l 1485 4725 l 225 4725 l cp gs col-1 s gr 
  572. % Polyline
  573. n 1215 3825 m 1215 4725 l gs col-1 s gr 
  574. % Polyline
  575. n 225 3825 m 1485 3825 l gs col-1 s gr 
  576. % Polyline
  577. n 1215 4185 m 1485 4455 l gs col-1 s gr 
  578. % Polyline
  579. n 1215 4455 m 1485 4185 l gs col-1 s gr 
  580. % Polyline
  581. n 1215 4455 m 1485 4725 l gs col-1 s gr 
  582. % Polyline
  583. n 1485 4455 m 1215 4725 l gs col-1 s gr 
  584. % Polyline
  585. n 2025 5580 m 3285 5580 l gs col-1 s gr 
  586. % Polyline
  587. n 2025 5310 m 3285 5310 l gs col-1 s gr 
  588. % Polyline
  589. n 2025 4725 m 3285 4725 l 3285 5850 l 2025 5850 l cp gs col-1 s gr 
  590. % Polyline
  591. n 3015 4950 m 3015 5850 l gs col-1 s gr 
  592. % Polyline
  593. n 2025 4950 m 3285 4950 l gs col-1 s gr 
  594. % Polyline
  595. n 3015 5310 m 3285 5580 l gs col-1 s gr 
  596. % Polyline
  597. n 3015 5580 m 3285 5310 l gs col-1 s gr 
  598. % Polyline
  599. n 3015 5580 m 3285 5850 l gs col-1 s gr 
  600. % Polyline
  601. n 3285 5580 m 3015 5850 l gs col-1 s gr 
  602. % Polyline
  603. n 3825 5580 m 5085 5580 l gs col-1 s gr 
  604. % Polyline
  605. n 3825 5310 m 5085 5310 l gs col-1 s gr 
  606. % Polyline
  607. n 3825 4725 m 5085 4725 l 5085 5850 l 3825 5850 l cp gs col-1 s gr 
  608. % Polyline
  609. n 4815 4950 m 4815 5850 l gs col-1 s gr 
  610. % Polyline
  611. n 3825 4950 m 5085 4950 l gs col-1 s gr 
  612. % Polyline
  613. n 4815 5310 m 5085 5580 l gs col-1 s gr 
  614. % Polyline
  615. n 4815 5580 m 5085 5310 l gs col-1 s gr 
  616. % Polyline
  617. n 4815 5580 m 5085 5850 l gs col-1 s gr 
  618. % Polyline
  619. n 5085 5580 m 4815 5850 l gs col-1 s gr 
  620. % Polyline
  621. n 225 1080 m 1485 1080 l gs col-1 s gr 
  622. % Polyline
  623. n 225 810 m 1485 810 l gs col-1 s gr 
  624. % Polyline
  625. n 225 225 m 1485 225 l 1485 1350 l 225 1350 l cp gs col-1 s gr 
  626. % Polyline
  627. n 1215 450 m 1215 1350 l gs col-1 s gr 
  628. % Polyline
  629. n 225 450 m 1485 450 l gs col-1 s gr 
  630. % Open spline
  631. gs  clippath
  632. 2150 1238 m 2228 1333 l 2114 1286 l 2244 1383 l 2280 1335 l  cp clip
  633. n 1350.0 1215.0 m 1710.0 1215.0 l
  634. 1710.0 1215.0 2070.0 1215.0 2160.0 1282.5 DrawSplineSection
  635. 2250.0 1350.0 l  gs col-1 s gr
  636.  gr
  637. % arrowhead
  638. n 2150 1238 m 2228 1333 l 2114 1286 l 2132 1262 l 2150 1238 l  cp gs 0.00 setgray ef gr  col-1 s
  639. % Open spline
  640. gs  clippath
  641. 996 3548 m 877 3585 l 964 3497 l 826 3583 l 858 3633 l  cp clip
  642. n 2250.0 3060.0 m 2205.0 3195.0 l
  643. 2205.0 3195.0 2160.0 3330.0 1687.5 3352.5 DrawSplineSection
  644. 1687.5 3352.5 1215.0 3375.0 1035.0 3487.5 DrawSplineSection
  645. 855.0 3600.0 l  gs col-1 s gr
  646.  gr
  647. % arrowhead
  648. n 996 3548 m 877 3585 l 964 3497 l 980 3522 l 996 3548 l  cp gs 0.00 setgray ef gr  col-1 s
  649. % Open spline
  650. gs  clippath
  651. 840 1499 m 857 1376 l 899 1493 l 883 1332 l 824 1338 l  cp clip
  652. n 1485.0 3060.0 m 1462.5 2722.5 l
  653. 1462.5 2722.5 1440.0 2385.0 1170.0 2092.5 DrawSplineSection
  654. 1170.0 2092.5 900.0 1800.0 877.5 1575.0 DrawSplineSection
  655. 855.0 1350.0 l  gs col-1 s gr
  656.  gr
  657. % arrowhead
  658. n 840 1499 m 857 1376 l 899 1493 l 870 1496 l 840 1499 l  cp gs 0.00 setgray ef gr  col-1 s
  659. % Open spline
  660. gs  clippath
  661. 807 2404 m 695 2457 l 769 2358 l 644 2462 l 683 2508 l  cp clip
  662. n 3060.0 1935.0 m 3037.5 2070.0 l
  663. 3037.5 2070.0 3015.0 2205.0 1980.0 2227.5 DrawSplineSection
  664. 1980.0 2227.5 945.0 2250.0 810.0 2362.5 DrawSplineSection
  665. 675.0 2475.0 l  gs col-1 s gr
  666.  gr
  667. % arrowhead
  668. n 807 2404 m 695 2457 l 769 2358 l 788 2381 l 807 2404 l  cp gs 0.00 setgray ef gr  col-1 s
  669. % Open spline
  670. gs  clippath
  671. 3487 2375 m 3391 2453 l 3439 2339 l 3342 2469 l 3390 2505 l  cp clip
  672. n 3825.0 1935.0 m 3802.5 2070.0 l
  673. 3802.5 2070.0 3780.0 2205.0 3645.0 2250.0 DrawSplineSection
  674. 3645.0 2250.0 3510.0 2295.0 3442.5 2385.0 DrawSplineSection
  675. 3375.0 2475.0 l  gs col-1 s gr
  676.  gr
  677. % arrowhead
  678. n 3487 2375 m 3391 2453 l 3439 2339 l 3463 2357 l 3487 2375 l  cp gs 0.00 setgray ef gr  col-1 s
  679. % Open spline
  680. gs  clippath
  681. 989 157 m 876 208 l 951 110 l 825 211 l 862 258 l  cp clip
  682. n 1845.0 945.0 m 1845.0 630.0 l
  683. 1845.0 630.0 1845.0 315.0 1755.0 202.5 DrawSplineSection
  684. 1755.0 202.5 1665.0 90.0 1372.5 67.5 DrawSplineSection
  685. 1372.5 67.5 1080.0 45.0 967.5 135.0 DrawSplineSection
  686. 855.0 225.0 l  gs col-1 s gr
  687.  gr
  688. % arrowhead
  689. n 989 157 m 876 208 l 951 110 l 970 133 l 989 157 l  cp gs 0.00 setgray ef gr  col-1 s
  690. % Open spline
  691. gs  clippath
  692. 2644 606 m 2731 518 l 2695 636 l 2778 498 l 2727 467 l  cp clip
  693. n 2610.0 945.0 m 2610.0 832.5 l
  694. 2610.0 832.5 2610.0 720.0 2677.5 607.5 DrawSplineSection
  695. 2745.0 495.0 l  gs col-1 s gr
  696.  gr
  697. % arrowhead
  698. n 2644 606 m 2731 518 l 2695 636 l 2669 621 l 2644 606 l  cp gs 0.00 setgray ef gr  col-1 s
  699. % Open spline
  700. gs  clippath
  701. 3511 563 m 3623 511 l 3549 610 l 3675 509 l 3638 462 l  cp clip
  702. n 3375.0 945.0 m 3397.5 810.0 l
  703. 3397.5 810.0 3420.0 675.0 3532.5 585.0 DrawSplineSection
  704. 3645.0 495.0 l  gs col-1 s gr
  705.  gr
  706. % arrowhead
  707. n 3511 563 m 3623 511 l 3549 610 l 3530 587 l 3511 563 l  cp gs 0.00 setgray ef gr  col-1 s
  708. % Open spline
  709. gs  clippath
  710. 4488 527 m 4610 505 l 4513 582 l 4661 516 l 4637 461 l  cp clip
  711. n 4140.0 945.0 m 4185.0 810.0 l
  712. 4185.0 810.0 4230.0 675.0 4432.5 585.0 DrawSplineSection
  713. 4635.0 495.0 l  gs col-1 s gr
  714.  gr
  715. % arrowhead
  716. n 4488 527 m 4610 505 l 4513 582 l 4501 555 l 4488 527 l  cp gs 0.00 setgray ef gr  col-1 s
  717. % Open spline
  718. gs  clippath
  719. 2927 3539 m 2811 3584 l 2892 3490 l 2760 3584 l 2795 3633 l  cp clip
  720. n 4185.0 3060.0 m 4162.5 3195.0 l
  721. 4162.5 3195.0 4140.0 3330.0 3622.5 3352.5 DrawSplineSection
  722. 3622.5 3352.5 3105.0 3375.0 2947.5 3487.5 DrawSplineSection
  723. 2790.0 3600.0 l  gs col-1 s gr
  724.  gr
  725. % arrowhead
  726. n 2927 3539 m 2811 3584 l 2892 3490 l 2910 3515 l 2927 3539 l  cp gs 0.00 setgray ef gr  col-1 s
  727. % Open spline
  728. gs  clippath
  729. 2780 4642 m 2674 4705 l 2738 4600 l 2623 4714 l 2666 4757 l  cp clip
  730. n 3600.0 4185.0 m 3555.0 4297.5 l
  731. 3555.0 4297.5 3510.0 4410.0 3195.0 4455.0 DrawSplineSection
  732. 3195.0 4455.0 2880.0 4500.0 2767.5 4612.5 DrawSplineSection
  733. 2655.0 4725.0 l  gs col-1 s gr
  734.  gr
  735. % arrowhead
  736. n 2780 4642 m 2674 4705 l 2738 4600 l 2759 4621 l 2780 4642 l  cp gs 0.00 setgray ef gr  col-1 s
  737. % Open spline
  738. gs  clippath
  739. 4437 4576 m 4446 4699 l 4380 4595 l 4431 4749 l 4488 4730 l  cp clip
  740. n 4365.0 4185.0 m 4365.0 4320.0 l
  741. 4365.0 4320.0 4365.0 4455.0 4410.0 4590.0 DrawSplineSection
  742. 4455.0 4725.0 l  gs col-1 s gr
  743.  gr
  744. % arrowhead
  745. n 4437 4576 m 4446 4699 l 4380 4595 l 4409 4586 l 4437 4576 l  cp gs 0.00 setgray ef gr  col-1 s
  746. /Times-Roman ff 150.00 scf sf
  747. 3330 420 m
  748. gs 1 -1 sc (SelectStmt (C)) col-1 sh gr
  749. /Times-Roman ff 150.00 scf sf
  750. 3420 225 m
  751. gs 1 -1 sc (Pointer to) col-1 sh gr
  752. /Times-Roman ff 150.00 scf sf
  753. 4320 420 m
  754. gs 1 -1 sc (SelectStmt (D)) col-1 sh gr
  755. /Times-Roman ff 150.00 scf sf
  756. 4410 225 m
  757. gs 1 -1 sc (Pointer to) col-1 sh gr
  758. /Times-Roman ff 150.00 scf sf
  759. 765 4050 m
  760. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  761. /Times-Roman ff 150.00 scf sf
  762. 405 3780 m
  763. gs 1 -1 sc (SelectStmt (B)) col-1 sh gr
  764. /Times-Roman ff 150.00 scf sf
  765. 2565 5175 m
  766. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  767. /Times-Roman ff 150.00 scf sf
  768. 2205 4905 m
  769. gs 1 -1 sc (SelectStmt (C)) col-1 sh gr
  770. /Times-Roman ff 150.00 scf sf
  771. 4365 5175 m
  772. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  773. /Times-Roman ff 150.00 scf sf
  774. 4005 4905 m
  775. gs 1 -1 sc (SelectStmt (D)) col-1 sh gr
  776. /Times-Roman ff 150.00 scf sf
  777. 765 675 m
  778. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  779. /Times-Roman ff 150.00 scf sf
  780. 405 405 m
  781. gs 1 -1 sc (SelectStmt (A)) col-1 sh gr
  782. /Times-Roman ff 150.00 scf sf
  783. 270 990 m
  784. gs 1 -1 sc (unionClause) col-1 sh gr
  785. /Times-Roman ff 150.00 scf sf
  786. 270 1260 m
  787. gs 1 -1 sc (intersectClause) col-1 sh gr
  788. /Times-Roman ff 150.00 scf sf
  789. 270 4365 m
  790. gs 1 -1 sc (unionClause) col-1 sh gr
  791. /Times-Roman ff 150.00 scf sf
  792. 270 4635 m
  793. gs 1 -1 sc (intersectClause) col-1 sh gr
  794. /Times-Roman ff 150.00 scf sf
  795. 2070 5490 m
  796. gs 1 -1 sc (unionClause) col-1 sh gr
  797. /Times-Roman ff 150.00 scf sf
  798. 2070 5760 m
  799. gs 1 -1 sc (intersectClause) col-1 sh gr
  800. /Times-Roman ff 150.00 scf sf
  801. 3870 5490 m
  802. gs 1 -1 sc (unionClause) col-1 sh gr
  803. /Times-Roman ff 150.00 scf sf
  804. 3870 5760 m
  805. gs 1 -1 sc (intersectClause) col-1 sh gr
  806. showpage
  807. $F2psEnd
  808. rs
  809. %%EndDocument
  810.  @endspecial 537 3277 a(Figure)g(3.12:)16 b(Data)c(structure)g(handed)g
  811. (back)h(by)f Fr(SelectStmt)g Ft(rule)p eop
  812. %%Page: 103 103
  813. 103 102 bop 198 60 a Fm(3.8.)26 b(THE)13 b(REALIZA)-6
  814. b(TION)14 b(OF)e(UNION,)g(INTERSECT)i(AND)f(EXCEPT)327
  815. b Ft(103)198 234 y(Here)26 b(is)g(a)g(description)g(of)f(the)h(abo)o(v)
  816. o(e)g(used)h(functions.)56 b(The)o(y)26 b(can)g(be)g(found)g(in)f(the)h
  817. (02le)198 294 y Fk(:)8 b(:)g(:)p Fr(/src/backend/parser/anlayze.c)p
  818. Ft(.)273 398 y Fo(17)25 b Fr(create)p 506 398 15 2
  819. v 17 w(select)p 703 398 V 17 w(list())p Ft(:)323 457
  820. y(This)15 b(function)f(steps)i(through)e(the)h Fp(tr)n(ee)g
  821. Ft(handed)g(to)g(it)f(by)h(the)g(parameter)f Fr(ptr)h
  822. Ft(and)g(creates)323 517 y(a)h(list)g(of)g(all)g Fr(SelectStmt)f
  823. Ft(nodes)h(found.)27 b(The)17 b(list)f(is)g(handed)g(back)h(by)f(the)g
  824. (parameter)323 577 y Fr(select)p 506 577 V 17 w(list)p
  825. Ft(.)f(The)e(function)f(uses)h(a)g(recursi)o(v)o(e)f
  826. Fp(depth)g(02rst)g(sear)n(c)o(h)i Ft(algorithm)d(to)h(e)o(xam-)323
  827. 637 y(ine)g(the)g Fp(tr)n(ee)h Ft(leading)g(to)f(the)g(fact)g(that)g
  828. (the)h(leftmost)e Fr(SelectStmt)h Ft(node)g(will)g(appear)g(02rst)323
  829. 696 y(in)g(the)g(created)g(list.)382 821 y Fr(void)382
  830. 881 y(create_select_list(Node)28 b(*ptr,)h(List)g(**select_list,)950
  831. 941 y(bool)h(*unionall_present))382 1001 y({)442 1060
  832. y(if(IsA(ptr,)f(SelectStmt)))442 1120 y({)502 1180
  833. y(*select_list)f(=)i(lappend(*select_list,)e(ptr);)502
  834. 1240 y(if(((SelectStmt)g(*)ptr)->unionall)g(==)i(TRUE))562
  835. 1299 y(*unionall_present)e(=)h(TRUE;)502 1359 y(return;)442
  836. 1419 y(})442 1539 y(/*)h(Recursively)e(call)i(for)f(all)h(arguments.)
  837. 472 1598 y(*)g(A)g(NOT)f(expr)h(has)f(no)h(lexpr!)472
  838. 1658 y(*/)442 1718 y(if)g((((A_Expr)f(*)ptr)->lexpr)f(!=)i(NULL))
  839. 502 1778 y(create_select_list(((A_Expr)d(*)ptr)->lexpr,)1010
  840. 1837 y(select_list,)h(unionall_present);)442 1897 y
  841. (create_select_list(((A_Expr)f(*)ptr)->rexpr,)1010
  842. 1957 y(select_list,)h(unionall_present);)323 2017 y(})273
  843. 2142 y Fo(17)d Fr(A)p 356 2142 V 17 w(Expr)p 493 2142
  844. V 18 w(to)p 571 2142 V 18 w(Expr())p Ft(:)323 2201
  845. y(This)14 b(function)e(recursi)o(v)o(ely)h(steps)h(through)e(the)i
  846. Fp(oper)o(ator)g(tr)n(ee)g Ft(handed)f(to)g(it)g(by)h(the)f(param-)323
  847. 2261 y(eter)k Fr(ptr)g Ft(and)h(replaces)g Fr(A)p 826
  848. 2261 V 18 w(Expr)f Ft(nodes)h(by)f Fr(Expr)h Ft(nodes.)31
  849. b(Additionally)17 b(it)g(e)o(xchanges)323 2321 y Fr(AND)e
  850. Ft(nodes)h(with)g Fr(OR)f Ft(nodes)h(and)g(vice)g(v)o(ersa.)27
  851. b(The)16 b(reason)g(for)f(this)h(e)o(xchange)g(is)g(easy)g(to)323
  852. 2381 y(understand.)27 b(W)l(e)17 b(implement)e Fp(intersect)i
  853. Ft(and)f Fp(e)o(xcept)h Ft(clauses)g(by)f(re)o(writing)f(these)i
  854. (queries)323 2441 y(to)d(semantically)h(equi)o(v)o(alent)f(queries)h
  855. (that)g(use)g Fr(IN)g Ft(and)g Fr(NOT)29 b(IN)15 b Ft(subselects.)25
  856. b(T)l(o)15 b(be)g(able)323 2500 y(to)d(use)h(all)f(three)h(operations)f
  857. (()p Fp(unions)p Ft(,)h Fp(intersects)g Ft(and)f Fp(e)o(xcepts)p
  858. Ft())h(in)f(one)h(comple)o(x)g(query)m(,)f(we)323 2560
  859. y(ha)o(v)o(e)18 b(to)g(translate)h(the)f(queries)g(into)g
  860. Fp(Disjunctive)g(Normal)h(F)-5 b(orm)19 b Ft((DNF).)f(Unfortunately)
  861. 323 2620 y(there)12 b(is)g(no)h(function)e Fr(dnfify())p
  862. Ft(,)i(b)o(ut)f(there)g(is)h(a)g(function)e Fr(cnfify())h
  863. Ft(which)g(produces)323 2680 y(DNF)17 b(when)g(we)h(e)o(xchange)g
  864. Fr(AND)g Ft(nodes)g(with)f Fr(OR)g Ft(nodes)h(and)g(vice)f(v)o(ersa)h
  865. (before)f(calling)323 2739 y Fr(cnfify())11 b Ft(and)h(e)o(xchange)h
  866. (them)f(again)g(in)h(the)f(result.)382 2864 y Fr(Node)30
  867. b(*)382 2924 y(A_Expr_to_Expr(Node)e(*ptr,)831 2984
  868. y(bool)h(*intersect_present))382 3044 y({)442 3103 y(Node)h(*result;)
  869. 442 3223 y(switch(nodeTag(ptr)))442 3283 y({)502
  870. 3342 y(case)f(T_A_Expr:)502 3402 y({)p eop
  871. %%Page: 104 104
  872. 104 103 bop 270 60 a Ft(104)60 b Fm(CHAPTER)14 b(3.)25
  873. b(POSTGRESQL)13 b(FR)n(OM)f(THE)i(PR)n(OGRAMMER'S)f(POINT)f(OF)g(VIEW)
  874. 634 234 y Fr(A_Expr)29 b(*a)h(=)f((A_Expr)g(*)ptr;)634
  875. 354 y(switch)g((a->oper))634 413 y({)693 473 y(case)h(AND:)693
  876. 533 y({)753 593 y(Expr)g(*expr)f(=)h(makeNode(Expr);)753
  877. 653 y(Node)g(*lexpr)f(=)843 712 y(A_Expr_to_Expr(((A_Expr)e
  878. (*)ptr)->lexpr,)1291 772 y(intersect_present);)753
  879. 832 y(Node)j(*rexpr)f(=)843 892 y(A_Expr_to_Expr(((A_Expr)e
  880. (*)ptr)->rexpr,)1291 951 y(intersect_present);)753
  881. 1071 y(*intersect_present)h(=)i(TRUE;)753 1191 y(expr->typeOid)f(=)g
  882. (BOOLOID;)753 1250 y(expr->opType)g(=)h(OR_EXPR;)753
  883. 1310 y(expr->args)f(=)h(makeList(lexpr,)e(rexpr,)h(-1);)753
  884. 1370 y(result)g(=)h((Node)g(*))f(expr;)753 1430 y(break;)693
  885. 1489 y(})693 1549 y(case)h(OR:)693 1609 y({)753 1669
  886. y(Expr)g(*expr)f(=)h(makeNode(Expr);)753 1729 y(Node)g(*lexpr)f(=)843
  887. 1788 y(A_Expr_to_Expr(((A_Expr)e(*)ptr)->lexpr,)1291
  888. 1848 y(intersect_present);)753 1908 y(Node)j(*rexpr)f(=)843
  889. 1968 y(A_Expr_to_Expr(((A_Expr)e(*)ptr)->rexpr,)1291
  890. 2027 y(intersect_present);)753 2147 y(expr->typeOid)i(=)g(BOOLOID;)753
  891. 2207 y(expr->opType)g(=)h(AND_EXPR;)753 2267 y(expr->args)f(=)h
  892. (makeList(lexpr,)e(rexpr,)h(-1);)753 2326 y(result)g(=)h((Node)g
  893. (*))f(expr;)753 2386 y(break;)693 2446 y(})693 2506
  894. y(case)h(NOT:)693 2565 y({)753 2625 y(Expr)g(*expr)f(=)h
  895. (makeNode(Expr);)753 2685 y(Node)g(*rexpr)f(=)843 2745
  896. y(A_Expr_to_Expr(((A_Expr)e(*)ptr)->rexpr,)1291
  897. 2804 y(intersect_present);)753 2924 y(expr->typeOid)i(=)g(BOOLOID;)753
  898. 2984 y(expr->opType)g(=)h(NOT_EXPR;)753 3044 y(expr->args)f(=)h
  899. (makeList(rexpr,)e(-1);)753 3103 y(result)h(=)h((Node)g(*))f(expr;)
  900. 753 3163 y(break;)693 3223 y(})634 3283 y(})634 3342
  901. y(break;)574 3402 y(})p eop
  902. %%Page: 105 105
  903. 105 104 bop 198 60 a Fm(3.8.)29 b(THE)13 b(REALIZA)-6
  904. b(TION)14 b(OF)e(UNION,)g(INTERSECT)i(AND)f(EXCEPT)324
  905. b Ft(105)502 234 y Fr(default:)502 294 y({)562 354 y(result)29
  906. b(=)h(ptr;)502 413 y(})442 473 y(})382 533 y(})382 593
  907. y(return)g(result;)323 653 y(})198 787 y Ft(Note)11 b(that)g(the)g
  908. Fr(stmtmulti)f Ft(and)h Fr(OptStmtMulti)f Ft(rules)h(had)g(to)g(be)g
  909. (changed)g(in)g(order)f(to)h(a)o(v)o(oid)198 847 y Fp(shift/r)n(educe)
  910. 16 b Ft(con03icts.)26 b(The)17 b(old)e(rules)h(allo)o(wed)g(an)g(in)n
  911. (v)o(alid)f(syntax)h((e.g.)26 b(the)16 b(concatenation)g(of)198
  912. 907 y(two)c(statements)i(without)e(a)i(';')e(inbetween))h(which)g
  913. (will)g(be)g(pre)o(v)o(ented)g(no)o(w)m(.)k(The)d(ne)o(w)f(rules)g(ha)o
  914. (v)o(e)198 967 y(the)f(second)h(line)f(commented)g(out)g(as)h(sho)o(wn)
  915. f(belo)o(w:)258 1082 y Fr(stmtmulti)208 b(:)60 b(stmtmulti)29
  916. b(stmt)g(';')646 1142 y(/*)h(|)60 b(stmtmulti)29 b(stmt)g(*/)736
  917. 1201 y(|)60 b(stmt)29 b(';')736 1261 y(;)258 1381 y(OptStmtMulti)118
  918. b(:)60 b(OptStmtMulti)28 b(OptimizableStmt)g(';')646
  919. 1440 y(/*)i(|)60 b(OptStmtMulti)28 b(OptimizableStmt)g(*/)736
  920. 1500 y(|)60 b(OptimizableStmt)28 b(';')736 1560 y(;)198
  921. 1714 y Fn(T)l(ransf)o(ormations)198 1814 y Ft(This)17
  922. b(step)g(normally)f(transforms)f(e)o(v)o(ery)i Fr(SelectStmt)e
  923. Ft(node)i(found)f(into)g(a)g Fr(Query)h Ft(node)f(and)198
  924. 1874 y(does)f(a)f(lot)g(of)g(transformations)f(to)h(the)h
  925. Fp(tar)n(getlist)p Ft(,)g(the)f Fr(where)g Ft(quali02cation)f(etc.)22
  926. b(As)15 b(mentioned)198 1934 y(abo)o(v)o(e)d(this)g(stage)g(e)o(xpects)
  927. g(a)g Fr(SelectStmt)f Ft(node)g(and)h(cannot)g(handle)f(an)h
  928. Fr(A)p 1603 1934 15 2 v 18 w(Expr)f Ft(node.)k(That')m(s)198
  929. 1994 y(why)d(we)h(did)f(the)g(changes)h(to)f(the)g Fp(oper)o(ator)h(tr)
  930. n(ee)h Ft(sho)o(wn)e(in)g(02gure)g(3.12.)198 2113 y(In)g(this)g
  931. (stage)h(only)f(v)o(ery)g(fe)o(w)g(changes)h(ha)o(v)o(e)g(been)f
  932. (necessary:)273 2224 y Fo(17)25 b Ft(The)13 b(transformation)e(of)h
  933. (the)g(list)h(attached)g(to)f Fr(unionClause)f Ft(is)i(pre)o(v)o
  934. (ented.)j(The)d(ra)o(w)g(list)323 2284 y(is)g(no)o(w)h(passed)g
  935. (through)f(instead)g(and)h(the)f(necessary)i(transformations)d(are)h
  936. (performed)f(at)i(a)323 2344 y(later)e(point)f(in)i(time.)273
  937. 2459 y Fo(17)25 b Ft(The)20 b(additionally)e(introduced)h(02eld)g
  938. Fr(intersectClause)f Ft(is)h(also)h(passed)g(untouched)323
  939. 2519 y(through)11 b(this)h(stage.)198 2630 y(The)29 b(changes)f
  940. (described)g(in)g(the)g(abo)o(v)o(e)g(paragraph)g(ha)o(v)o(e)g(been)g
  941. (applied)g(to)g(the)g(functions)198 2690 y Fr(transformInsertStmt())
  942. 17 b Ft(and)i Fr(transformSelectStmt())e Ft(which)i(are)g(contained)
  943. 198 2749 y(in)12 b(the)h(02le)f Fk(:)c(:)g(:)p Fr
  944. (/src/backend/parser/analyze.c)p Ft(:)273 2861 y Fo(17)25
  945. b Fr(transformInsertStmt())p Ft(:)382 2995 y Fr(static)30
  946. b(Query)f(*)382 3055 y(transformInsertStmt(ParseState)e(*pstate,)980
  947. 3115 y(InsertStmt)i(*stmt))382 3175 y({)1159 3235 y(.)1159
  948. 3294 y(.)1159 3354 y(.)p eop
  949. %%Page: 106 106
  950. 106 105 bop 270 60 a Ft(106)57 b Fm(CHAPTER)14 b(3.)28
  951. b(POSTGRESQL)13 b(FR)n(OM)f(THE)i(PR)n(OGRAMMER'S)f(POINT)f(OF)g(VIEW)
  952. 514 234 y Fr(/*)30 b(Just)f(pass)h(through)f(the)g(unionClause)g(and)
  953. 544 294 y(*)h(intersectClause.)e(We)i(will)f(process)g(it)h(in)544
  954. 354 y(*)g(the)f(function)g(Except_Intersect_Rewrite())544
  955. 413 y(*/)514 473 y(qry->unionClause)f(=)i(stmt->unionClause;)514
  956. 533 y(qry->intersectClause)e(=)i(stmt->intersectClause;)1231
  957. 593 y(.)1231 653 y(.)1231 712 y(.)514 832 y(return)f((Query)h(*))f
  958. (qry;)454 892 y(})345 1043 y Fo(17)c Fr(transformSelectStmt())p
  959. Ft(:)454 1180 y Fr(static)30 b(Query)f(*)454 1240 y
  960. (transformSelectStmt(ParseState)e(*pstate,)1052 1300
  961. y(SelectStmt)i(*stmt))454 1360 y({)1231 1419 y(.)1231
  962. 1479 y(.)1231 1539 y(.)514 1599 y(/*)h(Just)f(pass)h(through)f(the)g
  963. (unionClause)g(and)544 1658 y(*)h(intersectClause.)e(We)i(will)f
  964. (process)g(it)h(in)544 1718 y(*)g(the)f(function)g
  965. (Except_Intersect_Rewrite())544 1778 y(*/)514 1838
  966. y(qry->unionClause)f(=)i(stmt->unionClause;)514 1898
  967. y(qry->intersectClause)e(=)i(stmt->intersectClause;)1231
  968. 1957 y(.)1231 2017 y(.)1231 2077 y(.)514 2137 y(return)f((Query)h(*))
  969. f(qry;)454 2196 y(})270 2353 y Fn(The)12 b(Rewrite)h(System)270
  970. 2455 y Ft(In)24 b(this)h(stage)g(the)f(information)f(contained)h(in)g
  971. (the)h Fp(oper)o(ator)g(tr)n(ee)g Ft(attached)g(to)f(the)g(topmost)270
  972. 2515 y Fr(SelectStmt)18 b Ft(node)i(is)g(used)g(to)f(form)f(a)i(tree)f
  973. (of)g Fr(Query)g Ft(nodes)h(representing)f(the)g(re)o(written)270
  974. 2574 y(query)c((i.e.)25 b(the)15 b(semantically)g(equi)o(v)o(alent)g
  975. (query)g(that)g(contains)h(only)f Fp(union)g Ft(b)o(ut)g(no)g
  976. Fp(intersect)h Ft(or)270 2634 y Fp(e)o(xcept)d Ft(operations).)270
  977. 2754 y(The)g(follo)o(wing)e(steps)i(ha)o(v)o(e)g(to)f(be)g(performed:)
  978. 345 2867 y Fo(17)25 b Ft(Sa)o(v)o(e)16 b(the)g Fr(sortClause)p
  979. Ft(,)g Fr(uniqueFlag)p Ft(,)g Fr(targetList)f Ft(02elds)h(etc.)27
  980. b(of)16 b(the)f(topmost)395 2926 y Fr(Query)f Ft(node)g(because)h(the)f
  981. (topmost)h(node)f(may)g(change)h(during)e(the)i(re)o(write)e(process)i
  982. ((re-)395 2986 y(member)f((only))f(the)i(topmost)g
  983. Fr(SelectStmt)f Ft(node)h(has)g(already)f(been)h(transformed)f(to)h(a)
  984. 395 3046 y Fr(Query)c Ft(node).)345 3163 y Fo(17)25
  985. b Ft(Recursi)o(v)o(ely)12 b(step)h(through)e(the)h Fp(oper)o(ator)h(tr)
  986. n(ee)g Ft(and)g(transform)e(e)o(v)o(ery)h Fr(SelectStmt)f
  987. Ft(node)395 3223 y(to)18 b(a)h Fr(Query)f Ft(node)g(using)h(the)f
  988. (function)g Fr(intersect)p 1440 3223 15 2 v 17 w(tree)p
  989. 1577 3223 V 17 w(analyze())g Ft(described)395 3283
  990. y(belo)o(w)m(.)d(The)d(one)g(node)g(already)f(transformed)g((the)h
  991. (topmost)f(node))h(is)g(still)g(contained)f(in)h(the)395
  992. 3342 y Fp(oper)o(ator)j(tr)n(ee)g Ft(and)f(must)g(not)h(be)f
  993. (transformed)f(again)h(because)h(this)g(would)e(cause)j(troubles)395
  994. 3402 y(in)c(the)g Fp(tr)o(ansforming)h(logic)p Ft(.)p
  995. eop
  996. %%Page: 107 107
  997. 107 106 bop 198 60 a Fm(3.8.)26 b(THE)13 b(REALIZA)-6
  998. b(TION)14 b(OF)e(UNION,)g(INTERSECT)i(AND)f(EXCEPT)327
  999. b Ft(107)433 2199 y @beginspecial 173 @llx 194 @lly 439
  1000. @urx 597 @ury 2660 @rwi @setspecial
  1001. %%BeginDocument: figures/union_intersect_dnf.ps
  1002. %Magnification: 1.05
  1003. /$F2psDict 200 dict def
  1004. $F2psDict begin
  1005. $F2psDict /mtrx matrix put
  1006. /col-1 {0 setgray} bind def
  1007. /col0 {0.000 0.000 0.000 srgb} bind def
  1008. /col1 {0.000 0.000 1.000 srgb} bind def
  1009. /col2 {0.000 1.000 0.000 srgb} bind def
  1010. /col3 {0.000 1.000 1.000 srgb} bind def
  1011. /col4 {1.000 0.000 0.000 srgb} bind def
  1012. /col5 {1.000 0.000 1.000 srgb} bind def
  1013. /col6 {1.000 1.000 0.000 srgb} bind def
  1014. /col7 {1.000 1.000 1.000 srgb} bind def
  1015. /col8 {0.000 0.000 0.560 srgb} bind def
  1016. /col9 {0.000 0.000 0.690 srgb} bind def
  1017. /col10 {0.000 0.000 0.820 srgb} bind def
  1018. /col11 {0.530 0.810 1.000 srgb} bind def
  1019. /col12 {0.000 0.560 0.000 srgb} bind def
  1020. /col13 {0.000 0.690 0.000 srgb} bind def
  1021. /col14 {0.000 0.820 0.000 srgb} bind def
  1022. /col15 {0.000 0.560 0.560 srgb} bind def
  1023. /col16 {0.000 0.690 0.690 srgb} bind def
  1024. /col17 {0.000 0.820 0.820 srgb} bind def
  1025. /col18 {0.560 0.000 0.000 srgb} bind def
  1026. /col19 {0.690 0.000 0.000 srgb} bind def
  1027. /col20 {0.820 0.000 0.000 srgb} bind def
  1028. /col21 {0.560 0.000 0.560 srgb} bind def
  1029. /col22 {0.690 0.000 0.690 srgb} bind def
  1030. /col23 {0.820 0.000 0.820 srgb} bind def
  1031. /col24 {0.500 0.190 0.000 srgb} bind def
  1032. /col25 {0.630 0.250 0.000 srgb} bind def
  1033. /col26 {0.750 0.380 0.000 srgb} bind def
  1034. /col27 {1.000 0.500 0.500 srgb} bind def
  1035. /col28 {1.000 0.630 0.630 srgb} bind def
  1036. /col29 {1.000 0.750 0.750 srgb} bind def
  1037. /col30 {1.000 0.880 0.880 srgb} bind def
  1038. /col31 {1.000 0.840 0.000 srgb} bind def
  1039. end
  1040. save
  1041. 149.0 635.5 translate
  1042. 1 -1 scale
  1043. /cp {closepath} bind def
  1044. /ef {eofill} bind def
  1045. /gr {grestore} bind def
  1046. /gs {gsave} bind def
  1047. /sa {save} bind def
  1048. /rs {restore} bind def
  1049. /l {lineto} bind def
  1050. /m {moveto} bind def
  1051. /rm {rmoveto} bind def
  1052. /n {newpath} bind def
  1053. /s {stroke} bind def
  1054. /sh {show} bind def
  1055. /slc {setlinecap} bind def
  1056. /slj {setlinejoin} bind def
  1057. /slw {setlinewidth} bind def
  1058. /srgb {setrgbcolor} bind def
  1059. /rot {rotate} bind def
  1060. /sc {scale} bind def
  1061. /sd {setdash} bind def
  1062. /ff {findfont} bind def
  1063. /sf {setfont} bind def
  1064. /scf {scalefont} bind def
  1065. /sw {stringwidth} bind def
  1066. /tr {translate} bind def
  1067. /tnt {dup dup currentrgbcolor
  1068.   4 -2 roll dup 1 exch sub 3 -1 roll mul add
  1069.   4 -2 roll dup 1 exch sub 3 -1 roll mul add
  1070.   4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  1071.   bind def
  1072. /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  1073.   4 -2 roll mul srgb} bind def
  1074.  /DrawSplineSection {
  1075. /y3 exch def
  1076. /x3 exch def
  1077. /y2 exch def
  1078. /x2 exch def
  1079. /y1 exch def
  1080. /x1 exch def
  1081. /xa x1 x2 x1 sub 0.666667 mul add def
  1082. /ya y1 y2 y1 sub 0.666667 mul add def
  1083. /xb x3 x2 x3 sub 0.666667 mul add def
  1084. /yb y3 y2 y3 sub 0.666667 mul add def
  1085. x1 y1 lineto
  1086. xa ya xb yb x3 y3 curveto
  1087. } def
  1088. /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
  1089. /$F2psEnd {$F2psEnteredState restore end} def
  1090. $F2psBegin
  1091. 10 setmiterlimit
  1092. n 0 792 m 0 0 l 612 0 l 612 792 l cp clip
  1093.  0.06299 0.06299 sc
  1094. 7.500 slw
  1095. % Polyline
  1096. n 675 810 m 675 1350 l 405 1350 l 405 810 l cp gs col-1 s gr 
  1097. % Polyline
  1098. n 675 1080 m 405 1080 l gs col-1 s gr 
  1099. % Polyline
  1100. n 675 4095 m 675 4635 l 405 4635 l 405 4095 l cp gs col-1 s gr 
  1101. % Polyline
  1102. n 675 4365 m 405 4365 l gs col-1 s gr 
  1103. % Polyline
  1104. n 675 4365 m 405 4635 l gs col-1 s gr 
  1105. % Polyline
  1106. n 675 4635 m 405 4365 l gs col-1 s gr 
  1107. % Polyline
  1108. gs  clippath
  1109. 888 4200 m 1008 4230 l 888 4260 l 1050 4260 l 1050 4200 l  cp clip
  1110. n 1035 4230 m 540 4230 l gs col-1 s gr gr
  1111. % arrowhead
  1112. n 888 4200 m 1008 4230 l 888 4260 l 888 4230 l 888 4200 l  cp gs 0.00 setgray ef gr  col-1 s
  1113. % Polyline
  1114. n 2925 4905 m 3825 4905 l 3825 5625 l 2925 5625 l cp gs col-1 s gr 
  1115. % Polyline
  1116. n 2925 5355 m 3825 5355 l gs col-1 s gr 
  1117. % Polyline
  1118. n 2925 5130 m 3825 5130 l gs col-1 s gr 
  1119. % Polyline
  1120. n 3555 5355 m 3555 5625 l gs col-1 s gr 
  1121. /Times-Roman ff 150.00 scf sf
  1122. 3240 5310 m
  1123. gs 1 -1 sc (NOT) col-1 sh gr
  1124. /Times-Roman ff 150.00 scf sf
  1125. 3240 5085 m
  1126. gs 1 -1 sc (Expr) col-1 sh gr
  1127. /Times-Roman ff 150.00 scf sf
  1128. 3105 5535 m
  1129. gs 1 -1 sc (args) col-1 sh gr
  1130. % Polyline
  1131. n 4050 5355 m 4590 5355 l 4590 5625 l 4050 5625 l cp gs col-1 s gr 
  1132. % Polyline
  1133. n 4320 5355 m 4320 5625 l gs col-1 s gr 
  1134. % Polyline
  1135. n 4320 5355 m 4590 5625 l gs col-1 s gr 
  1136. % Polyline
  1137. n 4590 5355 m 4320 5625 l gs col-1 s gr 
  1138. % Polyline
  1139. gs  clippath
  1140. 3903 5460 m 4023 5490 l 3903 5520 l 4065 5520 l 4065 5460 l  cp clip
  1141. n 3690 5490 m 4050 5490 l gs col-1 s gr gr
  1142. % arrowhead
  1143. n 3903 5460 m 4023 5490 l 3903 5520 l 3903 5490 l 3903 5460 l  cp gs 0.00 setgray ef gr  col-1 s
  1144. % Polyline
  1145. n 2160 4365 m 2700 4365 l 2700 4635 l 2160 4635 l cp gs col-1 s gr 
  1146. % Polyline
  1147. n 2430 4365 m 2430 4635 l gs col-1 s gr 
  1148. % Polyline
  1149. n 2925 4365 m 3465 4365 l 3465 4635 l 2925 4635 l cp gs col-1 s gr 
  1150. % Polyline
  1151. n 3195 4365 m 3195 4635 l gs col-1 s gr 
  1152. % Polyline
  1153. n 3195 4365 m 3465 4635 l gs col-1 s gr 
  1154. % Polyline
  1155. n 3465 4365 m 3195 4635 l gs col-1 s gr 
  1156. % Polyline
  1157. gs  clippath
  1158. 2778 4470 m 2898 4500 l 2778 4530 l 2940 4530 l 2940 4470 l  cp clip
  1159. n 2565 4500 m 2925 4500 l gs col-1 s gr gr
  1160. % arrowhead
  1161. n 2778 4470 m 2898 4500 l 2778 4530 l 2778 4500 l 2778 4470 l  cp gs 0.00 setgray ef gr  col-1 s
  1162. % Polyline
  1163. n 1035 3915 m 1935 3915 l 1935 4635 l 1035 4635 l cp gs col-1 s gr 
  1164. % Polyline
  1165. n 1035 4365 m 1935 4365 l gs col-1 s gr 
  1166. % Polyline
  1167. n 1035 4140 m 1935 4140 l gs col-1 s gr 
  1168. % Polyline
  1169. n 1665 4365 m 1665 4635 l gs col-1 s gr 
  1170. /Times-Roman ff 150.00 scf sf
  1171. 1395 4320 m
  1172. gs 1 -1 sc (OR) col-1 sh gr
  1173. /Times-Roman ff 150.00 scf sf
  1174. 1350 4095 m
  1175. gs 1 -1 sc (Expr) col-1 sh gr
  1176. /Times-Roman ff 150.00 scf sf
  1177. 1215 4545 m
  1178. gs 1 -1 sc (args) col-1 sh gr
  1179. % Polyline
  1180. n 2925 1620 m 3825 1620 l 3825 2340 l 2925 2340 l cp gs col-1 s gr 
  1181. % Polyline
  1182. n 2925 2070 m 3825 2070 l gs col-1 s gr 
  1183. % Polyline
  1184. n 2925 1845 m 3825 1845 l gs col-1 s gr 
  1185. % Polyline
  1186. n 3555 2070 m 3555 2340 l gs col-1 s gr 
  1187. /Times-Roman ff 150.00 scf sf
  1188. 3240 2025 m
  1189. gs 1 -1 sc (NOT) col-1 sh gr
  1190. /Times-Roman ff 150.00 scf sf
  1191. 3240 1800 m
  1192. gs 1 -1 sc (Expr) col-1 sh gr
  1193. /Times-Roman ff 150.00 scf sf
  1194. 3105 2250 m
  1195. gs 1 -1 sc (args) col-1 sh gr
  1196. % Polyline
  1197. n 4050 2070 m 4590 2070 l 4590 2340 l 4050 2340 l cp gs col-1 s gr 
  1198. % Polyline
  1199. n 4320 2070 m 4320 2340 l gs col-1 s gr 
  1200. % Polyline
  1201. n 4320 2070 m 4590 2340 l gs col-1 s gr 
  1202. % Polyline
  1203. n 4590 2070 m 4320 2340 l gs col-1 s gr 
  1204. % Polyline
  1205. gs  clippath
  1206. 3903 2175 m 4023 2205 l 3903 2235 l 4065 2235 l 4065 2175 l  cp clip
  1207. n 3690 2205 m 4050 2205 l gs col-1 s gr gr
  1208. % arrowhead
  1209. n 3903 2175 m 4023 2205 l 3903 2235 l 3903 2205 l 3903 2175 l  cp gs 0.00 setgray ef gr  col-1 s
  1210. % Polyline
  1211. n 2160 1080 m 2700 1080 l 2700 1350 l 2160 1350 l cp gs col-1 s gr 
  1212. % Polyline
  1213. n 2430 1080 m 2430 1350 l gs col-1 s gr 
  1214. % Polyline
  1215. n 2925 1080 m 3465 1080 l 3465 1350 l 2925 1350 l cp gs col-1 s gr 
  1216. % Polyline
  1217. n 3195 1080 m 3195 1350 l gs col-1 s gr 
  1218. % Polyline
  1219. n 3195 1080 m 3465 1350 l gs col-1 s gr 
  1220. % Polyline
  1221. n 3465 1080 m 3195 1350 l gs col-1 s gr 
  1222. % Polyline
  1223. gs  clippath
  1224. 2778 1185 m 2898 1215 l 2778 1245 l 2940 1245 l 2940 1185 l  cp clip
  1225. n 2565 1215 m 2925 1215 l gs col-1 s gr gr
  1226. % arrowhead
  1227. n 2778 1185 m 2898 1215 l 2778 1245 l 2778 1215 l 2778 1185 l  cp gs 0.00 setgray ef gr  col-1 s
  1228. % Polyline
  1229. n 1035 630 m 1935 630 l 1935 1350 l 1035 1350 l cp gs col-1 s gr 
  1230. % Polyline
  1231. n 1035 1080 m 1935 1080 l gs col-1 s gr 
  1232. % Polyline
  1233. n 1035 855 m 1935 855 l gs col-1 s gr 
  1234. % Polyline
  1235. n 1665 1080 m 1665 1350 l gs col-1 s gr 
  1236. /Times-Roman ff 150.00 scf sf
  1237. 1395 1035 m
  1238. gs 1 -1 sc (OR) col-1 sh gr
  1239. /Times-Roman ff 150.00 scf sf
  1240. 1350 810 m
  1241. gs 1 -1 sc (Expr) col-1 sh gr
  1242. /Times-Roman ff 150.00 scf sf
  1243. 1215 1260 m
  1244. gs 1 -1 sc (args) col-1 sh gr
  1245. % Polyline
  1246. gs  clippath
  1247. 570 3948 m 540 4068 l 510 3948 l 510 4110 l 570 4110 l  cp clip
  1248. n 540 1215 m 540 4095 l gs col-1 s gr gr
  1249. % arrowhead
  1250. n 570 3948 m 540 4068 l 510 3948 l 540 3948 l 570 3948 l  cp gs 0.00 setgray ef gr  col-1 s
  1251. % Polyline
  1252. gs  clippath
  1253. 888 915 m 1008 945 l 888 975 l 1050 975 l 1050 915 l  cp clip
  1254. n 540 945 m 1035 945 l gs col-1 s gr gr
  1255. % arrowhead
  1256. n 888 915 m 1008 945 l 888 975 l 888 945 l 888 915 l  cp gs 0.00 setgray ef gr  col-1 s
  1257. % Polyline
  1258. gs  clippath
  1259. 2013 4470 m 2133 4500 l 2013 4530 l 2175 4530 l 2175 4470 l  cp clip
  1260. n 1800 4500 m 2160 4500 l gs col-1 s gr gr
  1261. % arrowhead
  1262. n 2013 4470 m 2133 4500 l 2013 4530 l 2013 4500 l 2013 4470 l  cp gs 0.00 setgray ef gr  col-1 s
  1263. % Polyline
  1264. gs  clippath
  1265. 2325 5703 m 2295 5823 l 2265 5703 l 2265 5865 l 2325 5865 l  cp clip
  1266. n 2295 4500 m 2295 5850 l gs col-1 s gr gr
  1267. % arrowhead
  1268. n 2325 5703 m 2295 5823 l 2265 5703 l 2295 5703 l 2325 5703 l  cp gs 0.00 setgray ef gr  col-1 s
  1269. % Polyline
  1270. n 1665 6705 m 2925 6705 l gs col-1 s gr 
  1271. % Polyline
  1272. n 1665 6435 m 2925 6435 l gs col-1 s gr 
  1273. % Polyline
  1274. n 1665 5850 m 2925 5850 l 2925 6975 l 1665 6975 l cp gs col-1 s gr 
  1275. % Polyline
  1276. n 2655 6075 m 2655 6975 l gs col-1 s gr 
  1277. % Polyline
  1278. n 1665 6075 m 2925 6075 l gs col-1 s gr 
  1279. % Polyline
  1280. n 2655 6435 m 2925 6705 l gs col-1 s gr 
  1281. % Polyline
  1282. n 2655 6705 m 2925 6435 l gs col-1 s gr 
  1283. % Polyline
  1284. n 2655 6705 m 2925 6975 l gs col-1 s gr 
  1285. % Polyline
  1286. n 2925 6705 m 2655 6975 l gs col-1 s gr 
  1287. % Polyline
  1288. n 3330 6705 m 4590 6705 l gs col-1 s gr 
  1289. % Polyline
  1290. n 3330 6435 m 4590 6435 l gs col-1 s gr 
  1291. % Polyline
  1292. n 3330 5850 m 4590 5850 l 4590 6975 l 3330 6975 l cp gs col-1 s gr 
  1293. % Polyline
  1294. n 4320 6075 m 4320 6975 l gs col-1 s gr 
  1295. % Polyline
  1296. n 3330 6075 m 4590 6075 l gs col-1 s gr 
  1297. % Polyline
  1298. n 4320 6435 m 4590 6705 l gs col-1 s gr 
  1299. % Polyline
  1300. n 4320 6705 m 4590 6435 l gs col-1 s gr 
  1301. % Polyline
  1302. n 4320 6705 m 4590 6975 l gs col-1 s gr 
  1303. % Polyline
  1304. n 4590 6705 m 4320 6975 l gs col-1 s gr 
  1305. % Polyline
  1306. gs  clippath
  1307. 2013 1185 m 2133 1215 l 2013 1245 l 2175 1245 l 2175 1185 l  cp clip
  1308. n 1800 1215 m 2160 1215 l gs col-1 s gr gr
  1309. % arrowhead
  1310. n 2013 1185 m 2133 1215 l 2013 1245 l 2013 1215 l 2013 1185 l  cp gs 0.00 setgray ef gr  col-1 s
  1311. % Polyline
  1312. gs  clippath
  1313. 2325 2418 m 2295 2538 l 2265 2418 l 2265 2580 l 2325 2580 l  cp clip
  1314. n 2295 1215 m 2295 2565 l gs col-1 s gr gr
  1315. % arrowhead
  1316. n 2325 2418 m 2295 2538 l 2265 2418 l 2295 2418 l 2325 2418 l  cp gs 0.00 setgray ef gr  col-1 s
  1317. % Polyline
  1318. n 1665 3420 m 2925 3420 l gs col-1 s gr 
  1319. % Polyline
  1320. n 1665 3150 m 2925 3150 l gs col-1 s gr 
  1321. % Polyline
  1322. n 1665 2565 m 2925 2565 l 2925 3690 l 1665 3690 l cp gs col-1 s gr 
  1323. % Polyline
  1324. n 2655 2790 m 2655 3690 l gs col-1 s gr 
  1325. % Polyline
  1326. n 1665 2790 m 2925 2790 l gs col-1 s gr 
  1327. % Polyline
  1328. n 2655 3150 m 2925 3420 l gs col-1 s gr 
  1329. % Polyline
  1330. n 2655 3420 m 2925 3150 l gs col-1 s gr 
  1331. % Polyline
  1332. n 2655 3420 m 2925 3690 l gs col-1 s gr 
  1333. % Polyline
  1334. n 2925 3420 m 2655 3690 l gs col-1 s gr 
  1335. % Polyline
  1336. n 3330 3420 m 4590 3420 l gs col-1 s gr 
  1337. % Polyline
  1338. n 3330 3150 m 4590 3150 l gs col-1 s gr 
  1339. % Polyline
  1340. n 3330 2565 m 4590 2565 l 4590 3690 l 3330 3690 l cp gs col-1 s gr 
  1341. % Polyline
  1342. n 4320 2790 m 4320 3690 l gs col-1 s gr 
  1343. % Polyline
  1344. n 3330 2790 m 4590 2790 l gs col-1 s gr 
  1345. % Polyline
  1346. n 4320 3150 m 4590 3420 l gs col-1 s gr 
  1347. % Polyline
  1348. n 4320 3420 m 4590 3150 l gs col-1 s gr 
  1349. % Polyline
  1350. n 4320 3420 m 4590 3690 l gs col-1 s gr 
  1351. % Polyline
  1352. n 4590 3420 m 4320 3690 l gs col-1 s gr 
  1353. % Open spline
  1354. gs  clippath
  1355. 3269 4798 m 3352 4890 l 3236 4848 l 3371 4938 l 3404 4888 l  cp clip
  1356. n 3060.0 4500.0 m 3082.5 4612.5 l
  1357. 3082.5 4612.5 3105.0 4725.0 3240.0 4815.0 DrawSplineSection
  1358. 3375.0 4905.0 l  gs col-1 s gr
  1359.  gr
  1360. % arrowhead
  1361. n 3269 4798 m 3352 4890 l 3236 4848 l 3253 4823 l 3269 4798 l  cp gs 0.00 setgray ef gr  col-1 s
  1362. % Open spline
  1363. gs  clippath
  1364. 4096 5786 m 3981 5833 l 4060 5738 l 3930 5835 l 3966 5883 l  cp clip
  1365. n 4185.0 5490.0 m 4162.5 5602.5 l
  1366. 4162.5 5602.5 4140.0 5715.0 4050.0 5782.5 DrawSplineSection
  1367. 3960.0 5850.0 l  gs col-1 s gr
  1368.  gr
  1369. % arrowhead
  1370. n 4096 5786 m 3981 5833 l 4060 5738 l 4078 5762 l 4096 5786 l  cp gs 0.00 setgray ef gr  col-1 s
  1371. % Open spline
  1372. gs  clippath
  1373. 3269 1513 m 3352 1605 l 3236 1563 l 3371 1653 l 3404 1603 l  cp clip
  1374. n 3060.0 1215.0 m 3082.5 1327.5 l
  1375. 3082.5 1327.5 3105.0 1440.0 3240.0 1530.0 DrawSplineSection
  1376. 3375.0 1620.0 l  gs col-1 s gr
  1377.  gr
  1378. % arrowhead
  1379. n 3269 1513 m 3352 1605 l 3236 1563 l 3253 1538 l 3269 1513 l  cp gs 0.00 setgray ef gr  col-1 s
  1380. % Open spline
  1381. gs  clippath
  1382. 4096 2501 m 3981 2548 l 4060 2453 l 3930 2550 l 3966 2598 l  cp clip
  1383. n 4185.0 2205.0 m 4162.5 2317.5 l
  1384. 4162.5 2317.5 4140.0 2430.0 4050.0 2497.5 DrawSplineSection
  1385. 3960.0 2565.0 l  gs col-1 s gr
  1386.  gr
  1387. % arrowhead
  1388. n 4096 2501 m 3981 2548 l 4060 2453 l 4078 2477 l 4096 2501 l  cp gs 0.00 setgray ef gr  col-1 s
  1389. /Times-Roman ff 150.00 scf sf
  1390. 2205 6300 m
  1391. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  1392. /Times-Roman ff 150.00 scf sf
  1393. 1980 6030 m
  1394. gs 1 -1 sc (Query (B)) col-1 sh gr
  1395. /Times-Roman ff 150.00 scf sf
  1396. 3870 6300 m
  1397. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  1398. /Times-Roman ff 150.00 scf sf
  1399. 3690 6030 m
  1400. gs 1 -1 sc (Query (C)) col-1 sh gr
  1401. /Times-Roman ff 150.00 scf sf
  1402. 2205 3015 m
  1403. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  1404. /Times-Roman ff 150.00 scf sf
  1405. 1980 2745 m
  1406. gs 1 -1 sc (Query (A)) col-1 sh gr
  1407. /Times-Roman ff 150.00 scf sf
  1408. 3870 3015 m
  1409. gs 1 -1 sc  90.0 rot (. . .) col-1 sh gr
  1410. /Times-Roman ff 150.00 scf sf
  1411. 3690 2745 m
  1412. gs 1 -1 sc (Query (C)) col-1 sh gr
  1413. /Times-Roman ff 150.00 scf sf
  1414. 1710 3330 m
  1415. gs 1 -1 sc (unionClause) col-1 sh gr
  1416. /Times-Roman ff 150.00 scf sf
  1417. 1710 3600 m
  1418. gs 1 -1 sc (intersectClause) col-1 sh gr
  1419. /Times-Roman ff 150.00 scf sf
  1420. 3375 3330 m
  1421. gs 1 -1 sc (unionClause) col-1 sh gr
  1422. /Times-Roman ff 150.00 scf sf
  1423. 3375 3600 m
  1424. gs 1 -1 sc (intersectClause) col-1 sh gr
  1425. /Times-Roman ff 150.00 scf sf
  1426. 3375 6615 m
  1427. gs 1 -1 sc (unionClause) col-1 sh gr
  1428. /Times-Roman ff 150.00 scf sf
  1429. 3375 6885 m
  1430. gs 1 -1 sc (intersectClause) col-1 sh gr
  1431. /Times-Roman ff 150.00 scf sf
  1432. 1710 6615 m
  1433. gs 1 -1 sc (unionClause) col-1 sh gr
  1434. /Times-Roman ff 150.00 scf sf
  1435. 1710 6885 m
  1436. gs 1 -1 sc (intersectClause) col-1 sh gr
  1437. showpage
  1438. $F2psEnd
  1439. rs
  1440. %%EndDocument
  1441.  @endspecial 391 2309 a(Figure)11 b(3.13:)16 b(Data)c(structure)g(of)g
  1442. Fl(()p Fk(A)g Fo([)f Fk(B)r Fl())p Fo(n)p Fk(C)16 b
  1443. Ft(after)c(transformation)f(to)h(DNF)273 2542 y Fo(17)25
  1444. b Ft(T)n(ransform)14 b(the)g(ne)o(w)h Fp(oper)o(ator)g(tr)n(ee)g
  1445. Ft(into)f(DNF)h((disjuncti)o(v)o(e)f(normal)f(form).)21
  1446. b(PostgreSQL)323 2602 y(does)f(not)f(pro)o(vide)h(an)o(y)g(function)f
  1447. (for)g(the)h(transformation)e(into)h(DNF)h(b)o(ut)g(it)f(pro)o(vides)h
  1448. (a)323 2662 y(function)14 b Fr(cnfify())g Ft(that)h(performs)f(a)i
  1449. (transformation)e(into)g(CNF)i((conjuncti)o(v)o(e)e(normal)323
  1450. 2721 y(form).)g(So)e(we)g(can)h(easily)g(make)f(use)g(of)g(this)h
  1451. (function)e(when)i(we)f(e)o(xchange)h(e)o(v)o(ery)f Fr(OR)g
  1452. Ft(with)323 2781 y(an)17 b Fr(AND)f Ft(and)h(vice)g(v)o(ersa)h(before)e
  1453. (calling)h Fr(cnfify())f Ft(as)h(we)g(did)g(already)g(in)g(the)f
  1454. Fp(parser)323 2841 y Ft((compare)11 b(02gure)h(3.11)h(to)f(02gure)
  1455. g(3.12).)k(When)c Fr(cnfify())g Ft(is)h(called)f(with)g(a)h(special)
  1456. g(03ag,)323 2901 y(the)f Fr(removeAndFlag)g Ft(set)h(to)f
  1457. Fr(true)h Ft(it)f(returns)g(a)h(list)g(where)g(the)f(entries)h(can)g
  1458. (be)g(thought)323 2961 y(of)e(being)i(connected)f(together)g(by)g
  1459. Fr(ANDs)p Ft(,)g(so)h(the)f(e)o(xplicit)h Fr(AND)f Ft(nodes)g(are)h
  1460. (remo)o(v)o(ed.)323 3062 y(After)d Fr(cnfify())h Ft(has)h(been)f
  1461. (called)h(we)f(normally)g(would)f(ha)o(v)o(e)i(to)g(e)o(xchange)g
  1462. Fr(OR)f Ft(and)g Fr(AND)323 3122 y Ft(nodes)16 b(again.)28
  1463. b(W)l(e)17 b(skip)g(this)g(step)f(by)h(simply)f(treating)g(e)o(v)o(ery)
  1464. g Fr(OR)h Ft(node)f(as)h(an)g Fr(AND)f Ft(node)323 3181
  1465. y(throughout)10 b(the)h(follo)o(wing)f(steps)i((remember)n(,)f(that)g
  1466. (there)h(are)f(no)g Fr(AND)h Ft(nodes)f(left)g(that)h(ha)o(v)o(e)323
  1467. 3241 y(to)g(be)g(treated)g(as)h Fr(OR)f Ft(nodes)h(because)g(of)f(the)g
  1468. Fr(removeAndFlag)p Ft().)323 3342 y(Figure)e(3.13)i(sho)o(ws)h(what)e
  1469. (the)h(data)g(structure)f(looks)h(like)f(after)g(the)h(transformation)e
  1470. (to)h(DNF)323 3402 y(has)h(taken)g(place)h(for)e(the)i(follo)o(wing)e
  1471. (query:)p eop
  1472. %%Page: 108 108
  1473. 108 107 bop 270 60 a Ft(108)57 b Fm(CHAPTER)14 b(3.)28
  1474. b(POSTGRESQL)13 b(FR)n(OM)f(THE)i(PR)n(OGRAMMER'S)f(POINT)f(OF)g(VIEW)
  1475. 454 234 y Fr((select)29 b(*)h(from)g(A)484 294 y(union)484
  1476. 354 y(select)f(*)h(from)g(B))484 413 y(except)484 473
  1477. y(select)f(*)h(from)g(C;)345 589 y Fo(17)25 b Ft(F)o(or)10
  1478. b(e)o(v)o(ery)h(entry)g(of)g(the)g(list)g(returned)g(by)g
  1479. Fr(cnfify())f Ft((i.e.)16 b(for)10 b(e)o(v)o(ery)h
  1480. Fp(oper)o(ator)h(tr)n(ee)g Ft(which)395 648 y(may)e(only)g(contain)h
  1481. Fr(OR)f Ft(and)h Fr(NOT)f Ft(operator)g(nodes)h(and)f
  1482. Fr(Query)g Ft(nodes)h(as)g(lea)o(v)o(es))g(contained)395
  1483. 708 y(in)h(the)g Fr(union)p 672 708 15 2 v 17 w(list)g
  1484. Ft(perform)f(the)i(follo)o(wing)e(steps:)454 806 y Fn(226)25
  1485. b Ft(Check)15 b(if)g(the)g Fp(tar)n(getlists)f Ft(of)h(all)g
  1486. Fr(Query)f Ft(nodes)h(appearing)g(are)f(compatible)h((i.e.)23
  1487. b(all)504 866 y Fp(tar)n(getlists)13 b Ft(ha)o(v)o(e)h(the)f(same)h
  1488. (number)e(of)h(attrib)o(utes)g(and)g(the)g(corresponding)g(attrib)o
  1489. (utes)504 926 y(are)f(of)g(the)h(same)f(type))454 1004
  1490. y Fn(226)25 b Ft(There)13 b(must)f(be)h(at)g(least)g(one)f(positi)o(v)
  1491. o(e)h Fr(OR)f Ft(node)h((i.e.)j(at)d(least)g(one)f Fr(OR)h
  1492. Ft(node)f(which)h(is)504 1064 y(not)h(preceded)g(by)f(a)h
  1493. Fr(NOT)g Ft(node).)20 b(Create)14 b(a)g(list)g(of)g(all)f
  1494. Fr(Query)h Ft(nodes)g((or)f(of)h Fr(Query)504 1123 y
  1495. Ft(nodes)f(preceded)f(by)h Fr(NOT)f Ft(nodes)h(if)f Fr(OR)29
  1496. b(NOT)13 b Ft(is)f(found))g(with)g(the)g(non)h(ne)o(gated)f(node)504
  1497. 1183 y(02rst)g(using)g(the)h(function)e Fr(create)p
  1498. 1149 1183 V 18 w(list())g Ft(described)i(belo)o(w)m(.)454
  1499. 1261 y Fn(226)25 b Ft(The)19 b(02rst)f((non)f(ne)o(gated))h(node)g
  1500. (of)g(the)g(list)g(will)g(be)g(the)g(topmost)g Fr(Query)f
  1501. Ft(node)i(of)504 1321 y(the)g(current)f Fp(union)h Ft(operand.)36
  1502. b(F)o(or)18 b(all)h(other)g(nodes)g(found)g(in)g(the)g(list)g(add)g(an)
  1503. g Fr(IN)504 1381 y Ft(subselect)14 b(()p Fr(NOT)29 b(IN)14
  1504. b Ft(subselect)g(if)f(the)g Fr(Query)g Ft(node)h(is)g(preceded)f(by)g
  1505. (a)h Fr(NOT)p Ft())f(to)g(the)504 1440 y Fr(where)j
  1506. Ft(quali02cation)g(of)f(the)i(topmost)f(node.)28 b(Adding)15
  1507. b(a)i(subselect)g(to)f(the)h Fr(where)504 1500 y Ft(quali02cation)12
  1508. b(is)g(done)h(by)f(logically)g Fr(AND)p Ft(ing)f(it)i(to)f(the)g
  1509. (original)g(quali02cation.)454 1578 y Fn(226)25 b
  1510. Ft(Append)16 b(the)f Fr(Query)g Ft(node)h(setup)g(in)f(the)h(last)g
  1511. (steps)g(to)f(a)h(list)g(which)f(is)h(hold)g(by)f(the)504
  1512. 1638 y(pointer)d Fr(union)p 811 1638 V 17 w(list)p Ft(.)345
  1513. 1736 y Fo(17)25 b Ft(T)l(ake)17 b(the)f(02rst)h(node)g(of)f
  1514. Fr(union)p 1004 1736 V 18 w(list)g Ft(as)i(the)e(ne)o(w)h(topmost)g
  1515. (node)g(of)f(the)h(whole)g(query)395 1796 y(and)11 b(attach)h(the)f
  1516. (rest)h(of)f(the)g(list)h(to)f(the)h(02eld)f Fr(unionClause)f
  1517. Ft(of)h(this)h(topmost)f(node.)k(Since)395 1856 y(the)f(ne)o(w)g
  1518. (topmost)g(node)h(might)f(dif)o(fer)f(from)g(the)i(original)e(one)i
  1519. ((i.e.)22 b(from)13 b(the)i(node)f(which)395 1915 y(was)h(topmost)g
  1520. (when)g(we)g(entered)g(the)g Fp(r)n(e)o(write)i(stage)p
  1521. Ft())d(we)h(ha)o(v)o(e)h(to)f(attach)g(the)g(02elds)g(sa)o(v)o(ed)
  1522. 395 1975 y(in)h(the)h(02rst)g(step)g(to)g(the)g(ne)o(w)g(topmost)f
  1523. (node)h((i.e.)30 b(the)17 b Fr(sortClause)p Ft(,)h Fr(targetList)p
  1524. Ft(,)395 2035 y Fr(unionFlag)p Ft(,)11 b(etc.).)345
  1525. 2133 y Fo(17)25 b Ft(Hand)16 b(the)h(ne)o(w)g(topmost)g
  1526. Fr(Query)f Ft(node)h(back.)29 b(No)o(w)17 b(the)g(normal)f
  1527. Fp(query)h(r)n(e)o(writing)h Ft(takes)395 2193 y(place)12
  1528. b((in)f(order)g(to)h(handle)g(vie)o(ws)g(if)f(present))h(and)f(then)h
  1529. (the)g Fp(planner/optimizer)g Ft(and)g Fp(e)o(xecu-)395
  1530. 2252 y(tor)g Ft(functions)f(are)g(called)h(to)g(get)g(a)g(result.)j
  1531. (There)d(ha)o(v)o(e)g(no)g(changes)g(been)g(made)g(to)f(the)h(code)395
  1532. 2312 y(of)f(these)i(stages.)270 2408 y(Figure)f(3.14)g(sho)o(ws)h(the)f
  1533. (re)o(written)f(data)i(structure)e(of)h(the)h(query:)360
  1534. 2505 y Fr(select)29 b(C1,)g(C2)h(from)g(A)360 2565 y(intersect)360
  1535. 2624 y(select)f(C1,)g(C3)h(from)g(C;)270 2721 y Ft(against)11
  1536. b(the)g(tables)h(de02ned)f(in)g(e)o(xample)g(3.4.)16
  1537. b(The)c(re)o(written)d(data)j(structure)e(represents)i(the)f(query:)330
  1538. 2817 y Fr(select)29 b(C1,)h(C2)f(form)h(A)330 2877 y(where)f((C1,)h
  1539. (C2))f(in)509 2936 y((select)g(C1,C3)h(from)f(C);)270
  1540. 3033 y Ft(The)15 b(02eld)e Fr(lefttree)h Ft(of)g(the)g
  1541. Fr(Sublink)f Ft(node)h(points)g(to)g(a)g(list)h(where)e(e)o(v)o(ery)h
  1542. (entry)g(points)g(to)g(a)270 3093 y Fr(VAR)e Ft(node)g(of)g(the)g
  1543. Fp(tar)n(getlist)g Ft(of)g(the)h(topmost)e(node)i((node)f(A).)g(The)h
  1544. (02eld)f Fr(oper)g Ft(of)g(the)g Fr(Sublink)270 3152
  1545. y Ft(node)i(points)h(to)f(a)h(list)f(holding)g(a)h(pointer)e(to)i(an)f
  1546. Fr(Expr)g Ft(node)h(for)e(e)o(v)o(ery)h(attrib)o(ute)g(of)g(the)g
  1547. (topmost)270 3212 y Fp(tar)n(getlist)p Ft(.)k(Ev)o(ery)13
  1548. b Fr(Expr)g Ft(node)g(is)h(used)f(to)g(compare)g(a)g
  1549. Fr(VAR)g Ft(node)g(of)g(the)g(topmost)g Fp(tar)n(getlist)f
  1550. Ft(with)270 3272 y(the)17 b(corresponding)f Fr(VAR)g
  1551. Ft(node)h(of)f(the)h(subselect')m(s)h Fp(tar)n(getlist)p
  1552. Ft(.)28 b(So)17 b(the)g(02rst)f(ar)o(gument)g(of)g(e)o(v)o(ery)270
  1553. 3332 y Fr(Expr)c Ft(node)h(points)g(to)g(a)g Fr(VAR)f
  1554. Ft(node)h(of)f(the)h(topmost)g Fp(tar)n(getlist)f Ft(and)h(the)g
  1555. (second)g(ar)o(gument)f(points)270 3391 y(to)g(the)h(corresponding)e
  1556. Fr(VAR)h Ft(node)g(of)g(the)h(subselect')m(s)g Fp(tar)n(getlist)p
  1557. Ft(.)p eop
  1558. %%Page: 109 109
  1559. 109 108 bop 198 60 a Fm(3.8.)29 b(THE)13 b(REALIZA)-6
  1560. b(TION)14 b(OF)e(UNION,)g(INTERSECT)i(AND)f(EXCEPT)324
  1561. b Ft(109)298 3216 y @beginspecial 136 @llx 94 @lly 476
  1562. @urx 697 @ury 3400 @rwi @setspecial
  1563. %%BeginDocument: figures/union_operand.ps
  1564. %Magnification: 1.05
  1565. /$F2psDict 200 dict def
  1566. $F2psDict begin
  1567. $F2psDict /mtrx matrix put
  1568. /col-1 {0 setgray} bind def
  1569. /col0 {0.000 0.000 0.000 srgb} bind def
  1570. /col1 {0.000 0.000 1.000 srgb} bind def
  1571. /col2 {0.000 1.000 0.000 srgb} bind def
  1572. /col3 {0.000 1.000 1.000 srgb} bind def
  1573. /col4 {1.000 0.000 0.000 srgb} bind def
  1574. /col5 {1.000 0.000 1.000 srgb} bind def
  1575. /col6 {1.000 1.000 0.000 srgb} bind def
  1576. /col7 {1.000 1.000 1.000 srgb} bind def
  1577. /col8 {0.000 0.000 0.560 srgb} bind def
  1578. /col9 {0.000 0.000 0.690 srgb} bind def
  1579. /col10 {0.000 0.000 0.820 srgb} bind def
  1580. /col11 {0.530 0.810 1.000 srgb} bind def
  1581. /col12 {0.000 0.560 0.000 srgb} bind def
  1582. /col13 {0.000 0.690 0.000 srgb} bind def
  1583. /col14 {0.000 0.820 0.000 srgb} bind def
  1584. /col15 {0.000 0.560 0.560 srgb} bind def
  1585. /col16 {0.000 0.690 0.690 srgb} bind def
  1586. /col17 {0.000 0.820 0.820 srgb} bind def
  1587. /col18 {0.560 0.000 0.000 srgb} bind def
  1588. /col19 {0.690 0.000 0.000 srgb} bind def
  1589. /col20 {0.820 0.000 0.000 srgb} bind def
  1590. /col21 {0.560 0.000 0.560 srgb} bind def
  1591. /col22 {0.690 0.000 0.690 srgb} bind def
  1592. /col23 {0.820 0.000 0.820 srgb} bind def
  1593. /col24 {0.500 0.190 0.000 srgb} bind def
  1594. /col25 {0.630 0.250 0.000 srgb} bind def
  1595. /col26 {0.750 0.380 0.000 srgb} bind def
  1596. /col27 {1.000 0.500 0.500 srgb} bind def
  1597. /col28 {1.000 0.630 0.630 srgb} bind def
  1598. /col29 {1.000 0.750 0.750 srgb} bind def
  1599. /col30 {1.000 0.880 0.880 srgb} bind def
  1600. /col31 {1.000 0.840 0.000 srgb} bind def
  1601. end
  1602. save
  1603. 126.0 696.5 translate
  1604. 1 -1 scale
  1605. /cp {closepath} bind def
  1606. /ef {eofill} bind def
  1607. /gr {grestore} bind def
  1608. /gs {gsave} bind def
  1609. /sa {save} bind def
  1610. /rs {restore} bind def
  1611. /l {lineto} bind def
  1612. /m {moveto} bind def
  1613. /rm {rmoveto} bind def
  1614. /n {newpath} bind def
  1615. /s {stroke} bind def
  1616. /sh {show} bind def
  1617. /slc {setlinecap} bind def
  1618. /slj {setlinejoin} bind def
  1619. /slw {setlinewidth} bind def
  1620. /srgb {setrgbcolor} bind def
  1621. /rot {rotate} bind def
  1622. /sc {scale} bind def
  1623. /sd {setdash} bind def
  1624. /ff {findfont} bind def
  1625. /sf {setfont} bind def
  1626. /scf {scalefont} bind def
  1627. /sw {stringwidth} bind def
  1628. /tr {translate} bind def
  1629. /tnt {dup dup currentrgbcolor
  1630.   4 -2 roll dup 1 exch sub 3 -1 roll mul add
  1631.   4 -2 roll dup 1 exch sub 3 -1 roll mul add
  1632.   4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
  1633.   bind def
  1634. /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
  1635.   4 -2 roll mul srgb} bind def
  1636.  /DrawSplineSection {
  1637. /y3 exch def
  1638. /x3 exch def
  1639. /y2 exch def
  1640. /x2 exch def
  1641. /y1 exch def
  1642. /x1 exch def
  1643. /xa x1 x2 x1 sub 0.666667 mul add def
  1644. /ya y1 y2 y1 sub 0.666667 mul add def
  1645. /xb x3 x2 x3 sub 0.666667 mul add def
  1646. /yb y3 y2 y3 sub 0.666667 mul add def
  1647. x1 y1 lineto
  1648. xa ya xb yb x3 y3 curveto
  1649. } def
  1650. /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
  1651. /$F2psEnd {$F2psEnteredState restore end} def
  1652. $F2psBegin
  1653. 10 setmiterlimit
  1654. n 0 792 m 0 0 l 612 0 l 612 792 l cp clip
  1655.  0.06299 0.06299 sc
  1656. 7.500 slw
  1657. % Polyline
  1658. n 180 3780 m 1170 3780 l gs col-1 s gr 
  1659. % Polyline
  1660. n 180 4050 m 1170 4050 l gs col-1 s gr 
  1661. % Polyline
  1662. n 180 4320 m 1170 4320 l gs col-1 s gr 
  1663. % Polyline
  1664. n 180 4590 m 1170 4590 l gs col-1 s gr 
  1665. % Polyline
  1666. n 900 3780 m 900 5040 l gs col-1 s gr 
  1667. % Polyline
  1668. n 180 3555 m 1170 3555 l 1170 5040 l 180 5040 l cp gs col-1 s gr 
  1669. /Times-Roman ff 150.00 scf sf
  1670. 450 3735 m
  1671. gs 1 -1 sc (Sublink) col-1 sh gr
  1672. /Times-Roman ff 150.00 scf sf
  1673. 540 4725 m
  1674. gs 1 -1 sc  270.0 rot (. . .) col-1 sh gr
  1675. /Times-Roman ff 150.00 scf sf
  1676. 270 4500 m
  1677. gs 1 -1 sc (subselect) col-1 sh gr
  1678. /Times-Roman ff 150.00 scf sf
  1679. 270 4230 m
  1680. gs 1 -1 sc (oper) col-1 sh gr
  1681. /Times-Roman ff 150.00 scf sf
  1682. 270 3960 m
  1683. gs 1 -1 sc (lefthand) col-1 sh gr
  1684. % Polyline
  1685. n 3195 3780 m 3735 3780 l 3735 4050 l 3195 4050 l cp gs col-1 s gr 
  1686. % Polyline
  1687. n 3465 3780 m 3465 4050 l gs col-1 s gr 
  1688. % Polyline
  1689. n 3465 3780 m 3735 4050 l gs col-1 s gr 
  1690. % Polyline
  1691. n 3735 3780 m 3465 4050 l gs col-1 s gr 
  1692. % Polyline
  1693. n 1710 3780 m 2250 3780 l 2250 4050 l 1710 4050 l cp gs col-1 s gr 
  1694. % Polyline
  1695. n 1980 3780 m 1980 4050 l gs col-1 s gr 
  1696. % Polyline
  1697. gs  clippath
  1698. 3048 3885 m 3168 3915 l 3048 3945 l 3210 3945 l 3210 3885 l  cp clip
  1699. n 2115 3915 m 3195 3915 l gs col-1 s gr gr
  1700. % arrowhead
  1701. n 3048 3885 m 3168 3915 l 3048 3945 l 3048 3915 l 3048 3885 l  cp gs 0.00 setgray ef gr  col-1 s
  1702. % Polyline
  1703. n 3195 4140 m 3735 4140 l 3735 4410 l 3195 4410 l cp gs col-1 s gr 
  1704. % Polyline
  1705. n 3465 4140 m 3465 4410 l gs col-1 s gr 
  1706. % Polyline
  1707. n 3465 4140 m 3735 4410 l gs col-1 s gr 
  1708. % Polyline
  1709. n 3735 4140 m 3465 4410 l gs col-1 s gr 
  1710. % Polyline
  1711. n 1710 4140 m 2250 4140 l 2250 4410 l 1710 4410 l cp gs col-1 s gr 
  1712. % Polyline
  1713. n 1980 4140 m 1980 4410 l gs col-1 s gr 
  1714. % Polyline
  1715. gs  clippath
  1716. 3048 4245 m 3168 4275 l 3048 4305 l 3210 4305 l 3210 4245 l  cp clip
  1717. n 2115 4275 m 3195 4275 l gs col-1 s gr gr
  1718. % arrowhead
  1719. n 3048 4245 m 3168 4275 l 3048 4305 l 3048 4275 l 3048 4245 l  cp gs 0.00 setgray ef gr  col-1 s
  1720. % Polyline
  1721. n 1395 5265 m 2295 5265 l gs col-1 s gr 
  1722. % Polyline
  1723. n 1395 5535 m 2295 5535 l gs col-1 s gr 
  1724. % Polyline
  1725. n 1395 5040 m 2295 5040 l 2295 5805 l 1395 5805 l cp gs col-1 s gr 
  1726. % Polyline
  1727. n 2025 5535 m 2025 5805 l gs col-1 s gr 
  1728. /Times-Roman ff 150.00 scf sf
  1729. 1710 5220 m
  1730. gs 1 -1 sc (Expr) col-1 sh gr
  1731. /Times-Roman ff 150.00 scf sf
  1732. 1485 5445 m
  1733. gs 1 -1 sc (opType: '=') col-1 sh gr
  1734. /Times-Roman ff 150.00 scf sf
  1735. 1485 5715 m
  1736. gs 1 -1 sc (args) col-1 sh gr
  1737. % Polyline
  1738. n 2520 5535 m 3060 5535 l 3060 5805 l 2520 5805 l cp gs col-1 s gr 
  1739. % Polyline
  1740. n 2790 5535 m 2790 5805 l gs col-1 s gr 
  1741. % Polyline
  1742. n 3285 5535 m 3825 5535 l 3825 5805 l 3285 5805 l cp gs col-1 s gr 
  1743. % Polyline
  1744. n 3555 5535 m 3555 5805 l gs col-1 s gr 
  1745. % Polyline
  1746. n 3555 5535 m 3825 5805 l gs col-1 s gr 
  1747. % Polyline
  1748. n 3825 5535 m 3555 5805 l gs col-1 s gr 
  1749. % Polyline
  1750. gs  clippath
  1751. 3138 5640 m 3258 5670 l 3138 5700 l 3300 5700 l 3300 5640 l  cp clip
  1752. n 2925 5670 m 3285 5670 l gs col-1 s gr gr
  1753. % arrowhead
  1754. n 3138 5640 m 3258 5670 l 3138 5700 l 3138 5670 l 3138 5640 l  cp gs 0.00 setgray ef gr  col-1 s
  1755. % Polyline
  1756. gs  clippath
  1757. 2373 5640 m 2493 5670 l 2373 5700 l 2535 5700 l 2535 5640 l  cp clip
  1758. n 2160 5670 m 2520 5670 l gs col-1 s gr gr
  1759. % arrowhead
  1760. n 2373 5640 m 2493 5670 l 2373 5700 l 2373 5670 l 2373 5640 l  cp gs 0.00 setgray ef gr  col-1 s
  1761. % Polyline
  1762. n 3105 4815 m 4005 4815 l gs col-1 s gr 
  1763. % Polyline
  1764. n 3105 5085 m 4005 5085 l gs col-1 s gr 
  1765. % Polyline
  1766. n 3105 4590 m 4005 4590 l 4005 5355 l 3105 5355 l cp gs col-1 s gr 
  1767. % Polyline
  1768. n 3735 5085 m 3735 5355 l gs col-1 s gr 
  1769. /Times-Roman ff 150.00 scf sf
  1770. 3420 4770 m
  1771. gs 1 -1 sc (Expr) col-1 sh gr
  1772. /Times-Roman ff 150.00 scf sf
  1773. 3195 4995 m
  1774. gs 1 -1 sc (opType: '=') col-1 sh gr
  1775. /Times-Roman ff 150.00 scf sf
  1776. 3195 5265 m
  1777. gs 1 -1 sc (args) col-1 sh gr
  1778. % Polyline
  1779. n 4230 5085 m 4770 5085 l 4770 5355 l 4230 5355 l cp gs col-1 s gr 
  1780. % Polyline
  1781. n 4500 5085 m 4500 5355 l gs col-1 s gr 
  1782. % Polyline
  1783. n 4995 5085 m 5535 5085 l 5535 5355 l 4995 5355 l cp gs col-1 s gr 
  1784. % Polyline
  1785. n 5265 5085 m 5265 5355 l gs col-1 s gr 
  1786. % Polyline
  1787. n 5265 5085 m 5535 5355 l gs col-1 s gr 
  1788. % Polyline
  1789. n 5535 5085 m 5265 5355 l gs col-1 s gr 
  1790. % Polyline
  1791. n 3600 0 m 4140 0 l 4140 270 l 3600 270 l cp gs col-1 s gr 
  1792. % Polyline
  1793. n 3870 0 m 3870 270 l gs col-1 s gr 
  1794. % Polyline
  1795. n 3870 0 m 4140 270 l gs col-1 s gr 
  1796. % Polyline
  1797. n 4140 0 m 3870 270 l gs col-1 s gr 
  1798. % Polyline
  1799. n 3285 495 m 4185 495 l 4185 990 l 3285 990 l cp gs col-1 s gr 
  1800. % Polyline
  1801. n 3285 720 m 4185 720 l gs col-1 s gr 
  1802. /Times-Roman ff 150.00 scf sf
  1803. 3375 900 m
  1804. gs 1 -1 sc (relname: "A") col-1 sh gr
  1805. /Times-Roman ff 150.00 scf sf
  1806. 3600 675 m
  1807. gs 1 -1 sc (RTE) col-1 sh gr
  1808. % Polyline
  1809. n 1395 315 m 1935 315 l 1935 585 l 1395 585 l cp gs col-1 s gr 
  1810. % Polyline
  1811. n 1665 315 m 1665 585 l gs col-1 s gr 
  1812. % Polyline
  1813. n 2160 315 m 2700 315 l 2700 585 l 2160 585 l cp gs col-1 s gr 
  1814. % Polyline
  1815. n 2430 315 m 2430 585 l gs col-1 s gr 
  1816. % Polyline
  1817. n 2430 315 m 2700 585 l gs col-1 s gr 
  1818. % Polyline
  1819. n 2700 315 m 2430 585 l gs col-1 s gr 
  1820. % Polyline
  1821. gs  clippath
  1822. 2013 420 m 2133 450 l 2013 480 l 2175 480 l 2175 420 l  cp clip
  1823. n 1800 450 m 2160 450 l gs col-1 s gr gr
  1824. % arrowhead
  1825. n 2013 420 m 2133 450 l 2013 480 l 2013 450 l 2013 420 l  cp gs 0.00 setgray ef gr  col-1 s
  1826. % Polyline
  1827. n 1440 2340 m 2340 2340 l gs col-1 s gr 
  1828. % Polyline
  1829. n 1440 2115 m 2340 2115 l 2340 2610 l 1440 2610 l cp gs col-1 s gr 
  1830. /Times-Roman ff 150.00 scf sf
  1831. 1665 2295 m
  1832. gs 1 -1 sc (Resdom) col-1 sh gr
  1833. /Times-Roman ff 150.00 scf sf
  1834. 1530 2520 m
  1835. gs 1 -1 sc (resname: C1) col-1 sh gr
  1836. % Polyline
  1837. n 2925 2340 m 3825 2340 l gs col-1 s gr 
  1838. % Polyline
  1839. n 2925 2115 m 3825 2115 l 3825 2610 l 2925 2610 l cp gs col-1 s gr 
  1840. /Times-Roman ff 150.00 scf sf
  1841. 3150 2295 m
  1842. gs 1 -1 sc (Resdom) col-1 sh gr
  1843. /Times-Roman ff 150.00 scf sf
  1844. 3015 2520 m
  1845. gs 1 -1 sc (resname: C2) col-1 sh gr
  1846. % Polyline
  1847. n 3600 5985 m 4140 5985 l 4140 6255 l 3600 6255 l cp gs col-1 s gr 
  1848. % Polyline
  1849. n 3870 5985 m 3870 6255 l gs col-1 s gr 
  1850. % Polyline
  1851. n 3870 5985 m 4140 6255 l gs col-1 s gr 
  1852. % Polyline
  1853. n 4140 5985 m 3870 6255 l gs col-1 s gr 
  1854. % Polyline
  1855. n 1395 6300 m 1935 6300 l 1935 6570 l 1395 6570 l cp gs col-1 s gr 
  1856. % Polyline
  1857. n 1665 6300 m 1665 6570 l gs col-1 s gr 
  1858. % Polyline
  1859. n 2160 6300 m 2700 6300 l 2700 6570 l 2160 6570 l cp gs col-1 s gr 
  1860. % Polyline
  1861. n 2430 6300 m 2430 6570 l gs col-1 s gr 
  1862. % Polyline
  1863. n 2430 6300 m 2700 6570 l gs col-1 s gr 
  1864. % Polyline
  1865. n 2700 6300 m 2430 6570 l gs col-1 s gr 
  1866. % Polyline
  1867. gs  clippath
  1868. 2013 6405 m 2133 6435 l 2013 6465 l 2175 6465 l 2175 6405 l  cp clip
  1869. n 1800 6435 m 2160 6435 l gs col-1 s gr gr
  1870. % arrowhead
  1871. n 2013 6405 m 2133 6435 l 2013 6465 l 2013 6435 l 2013 6405 l  cp gs 0.00 setgray ef gr  col-1 s
  1872. % Polyline
  1873. n 1440 8325 m 2340 8325 l gs col-1 s gr 
  1874. % Polyline
  1875. n 1440 8100 m 2340 8100 l 2340 8595 l 1440 8595 l cp gs col-1 s gr 
  1876. /Times-Roman ff 150.00 scf sf
  1877. 1665 8280 m
  1878. gs 1 -1 sc (Resdom) col-1 sh gr
  1879. /Times-Roman ff 150.00 scf sf
  1880. 1530 8505 m
  1881. gs 1 -1 sc (resname: C1) col-1 sh gr
  1882. % Polyline
  1883. n 180 225 m 1170 225 l gs col-1 s gr 
  1884. % Polyline
  1885. n 180 495 m 1170 495 l gs col-1 s gr 
  1886. % Polyline
  1887. n 180 765 m 1170 765 l gs col-1 s gr 
  1888. % Polyline
  1889. n 180 1035 m 1170 1035 l gs col-1 s gr 
  1890. % Polyline
  1891. n 900 225 m 900 1440 l gs col-1 s gr 
  1892. % Polyline
  1893. n 180 0 m 1170 0 l 1170 1440 l 180 1440 l cp gs col-1 s gr 
  1894. % Polyline
  1895. gs  clippath
  1896. 3300 3702 m 3330 3582 l 3360 3702 l 3360 3540 l 3300 3540 l  cp clip
  1897. n 3330 3915 m 3330 3555 l gs col-1 s gr gr
  1898. % arrowhead
  1899. n 3300 3702 m 3330 3582 l 3360 3702 l 3330 3702 l 3300 3702 l  cp gs 0.00 setgray ef gr  col-1 s
  1900. % Polyline
  1901. gs  clippath
  1902. 1815 3702 m 1845 3582 l 1875 3702 l 1875 3540 l 1815 3540 l  cp clip
  1903. n 1845 3915 m 1845 3555 l gs col-1 s gr gr
  1904. % arrowhead
  1905. n 1815 3702 m 1845 3582 l 1875 3702 l 1845 3702 l 1815 3702 l  cp gs 0.00 setgray ef gr  col-1 s
  1906. % Polyline
  1907. gs  clippath
  1908. 1875 4893 m 1845 5013 l 1815 4893 l 1815 5055 l 1875 5055 l  cp clip
  1909. n 1845 4275 m 1845 5040 l gs col-1 s gr gr
  1910. % arrowhead
  1911. n 1875 4893 m 1845 5013 l 1815 4893 l 1845 4893 l 1875 4893 l  cp gs 0.00 setgray ef gr  col-1 s
  1912. % Polyline
  1913. gs  clippath
  1914. 1563 3885 m 1683 3915 l 1563 3945 l 1725 3945 l 1725 3885 l  cp clip
  1915. n 1035 3915 m 1710 3915 l gs col-1 s gr gr
  1916. % arrowhead
  1917. n 1563 3885 m 1683 3915 l 1563 3945 l 1563 3915 l 1563 3885 l  cp gs 0.00 setgray ef gr  col-1 s
  1918. % Polyline
  1919. gs  clippath
  1920. 4848 5190 m 4968 5220 l 4848 5250 l 5010 5250 l 5010 5190 l  cp clip
  1921. n 4635 5220 m 4995 5220 l gs col-1 s gr gr
  1922. % arrowhead
  1923. n 4848 5190 m 4968 5220 l 4848 5250 l 4848 5220 l 4848 5190 l  cp gs 0.00 setgray ef gr  col-1 s
  1924. % Polyline
  1925. gs  clippath
  1926. 4083 5190 m 4203 5220 l 4083 5250 l 4245 5250 l 4245 5190 l  cp clip
  1927. n 3870 5220 m 4230 5220 l gs col-1 s gr gr
  1928. % arrowhead
  1929. n 4083 5190 m 4203 5220 l 4083 5250 l 4083 5220 l 4083 5190 l  cp gs 0.00 setgray ef gr  col-1 s
  1930. % Polyline
  1931. gs  clippath
  1932. 3765 348 m 3735 468 l 3705 348 l 3705 510 l 3765 510 l  cp clip
  1933. n 3735 135 m 3735 495 l gs col-1 s gr gr
  1934. % arrowhead
  1935. n 3765 348 m 3735 468 l 3705 348 l 3735 348 l 3765 348 l  cp gs 0.00 setgray ef gr  col-1 s
  1936. % Polyline
  1937. n 3555 1395 m 3555 1935 l gs col-1 s gr 
  1938. % Polyline
  1939. n 2925 1395 m 3825 1395 l gs col-1 s gr 
  1940. % Polyline
  1941. n 2925 1665 m 3825 1665 l gs col-1 s gr 
  1942. % Polyline
  1943. n 2925 1170 m 3825 1170 l 3825 1935 l 2925 1935 l cp gs col-1 s gr 
  1944. % Polyline
  1945. n 2070 1395 m 2070 1935 l gs col-1 s gr 
  1946. % Polyline
  1947. n 1440 1395 m 2340 1395 l gs col-1 s gr 
  1948. % Polyline
  1949. n 1440 1665 m 2340 1665 l gs col-1 s gr 
  1950. % Polyline
  1951. n 1440 1170 m 2340 1170 l 2340 1935 l 1440 1935 l cp gs col-1 s gr 
  1952. % Polyline
  1953. n 180 6210 m 1170 6210 l gs col-1 s gr 
  1954. % Polyline
  1955. n 180 6480 m 1170 6480 l gs col-1 s gr 
  1956. % Polyline
  1957. n 180 6750 m 1170 6750 l gs col-1 s gr 
  1958. % Polyline
  1959. n 180 7020 m 1170 7020 l gs col-1 s gr 
  1960. % Polyline
  1961. n 900 6210 m 900 7425 l gs col-1 s gr 
  1962. % Polyline
  1963. n 180 5985 m 1170 5985 l 1170 7425 l 180 7425 l cp gs col-1 s gr 
  1964. % Polyline
  1965. gs  clippath
  1966. 3765 6333 m 3735 6453 l 3705 6333 l 3705 6495 l 3765 6495 l  cp clip
  1967. n 3735 6120 m 3735 6480 l gs col-1 s gr gr
  1968. % arrowhead
  1969. n 3765 6333 m 3735 6453 l 3705 6333 l 3735 6333 l 3765 6333 l  cp gs 0.00 setgray ef gr  col-1 s
  1970. % Polyline
  1971. n 3555 7380 m 3555 7920 l gs col-1 s gr 
  1972. % Polyline
  1973. n 2925 7380 m 3825 7380 l gs col-1 s gr 
  1974. % Polyline
  1975. n 2925 7650 m 3825 7650 l gs col-1 s gr 
  1976. % Polyline
  1977. n 2925 7155 m 3825 7155 l 3825 7920 l 2925 7920 l cp gs col-1 s gr 
  1978. % Polyline
  1979. n 2070 7380 m 2070 7920 l gs col-1 s gr 
  1980. % Polyline
  1981. n 1440 7380 m 2340 7380 l gs col-1 s gr 
  1982. % Polyline
  1983. n 1440 7650 m 2340 7650 l gs col-1 s gr 
  1984. % Polyline
  1985. n 1440 7155 m 2340 7155 l 2340 7920 l 1440 7920 l cp gs col-1 s gr 
  1986. % Polyline
  1987. n 2925 8325 m 3825 8325 l gs col-1 s gr 
  1988. % Polyline
  1989. n 2925 8100 m 3825 8100 l 3825 8595 l 2925 8595 l cp gs col-1 s gr 
  1990. % Polyline
  1991. n 3285 6480 m 4185 6480 l 4185 6975 l 3285 6975 l cp gs col-1 s gr 
  1992. % Polyline
  1993. n 3285 6705 m 4185 6705 l gs col-1 s gr 
  1994. % Polyline
  1995. n 1485 3015 m 2295 3015 l gs col-1 s gr 
  1996. % Polyline
  1997. n 1485 3285 m 2295 3285 l gs col-1 s gr 
  1998. % Polyline
  1999. n 1485 2790 m 2295 2790 l 2295 3555 l 1485 3555 l cp gs col-1 s gr 
  2000. % Polyline
  2001. n 2970 3015 m 3780 3015 l gs col-1 s gr 
  2002. % Polyline
  2003. n 2970 3285 m 3780 3285 l gs col-1 s gr 
  2004. % Polyline
  2005. n 2970 2790 m 3780 2790 l 3780 3555 l 2970 3555 l cp gs col-1 s gr 
  2006. % Polyline
  2007. n 1485 9000 m 2295 9000 l gs col-1 s gr 
  2008. % Polyline
  2009. n 1485 9270 m 2295 9270 l gs col-1 s gr 
  2010. % Polyline
  2011. n 1485 8775 m 2295 8775 l 2295 9540 l 1485 9540 l cp gs col-1 s gr 
  2012. % Polyline
  2013. n 2970 9000 m 3780 9000 l gs col-1 s gr 
  2014. % Polyline
  2015. n 2970 9270 m 3780 9270 l gs col-1 s gr 
  2016. % Polyline
  2017. n 2970 8775 m 3780 8775 l 3780 9540 l 2970 9540 l cp gs col-1 s gr 
  2018. % Open spline
  2019. gs  clippath
  2020. 2363 3284 m 2311 3171 l 2410 3246 l 2309 3120 l 2262 3157 l  cp clip
  2021. n 2655.0 5670.0 m 2655.0 4635.0 l
  2022. 2655.0 4635.0 2655.0 3600.0 2475.0 3375.0 DrawSplineSection
  2023. 2295.0 3150.0 l  gs col-1 s gr
  2024.  gr
  2025. % arrowhead
  2026. n 2363 3284 m 2311 3171 l 2410 3246 l 2387 3265 l 2363 3284 l  cp gs 0.00 setgray ef gr  col-1 s
  2027. % Open spline
  2028. gs  clippath
  2029. 3878 3263 m 3801 3166 l 3915 3216 l 3786 3117 l 3750 3165 l  cp clip
  2030. n 4365.0 5220.0 m 4365.0 4410.0 l
  2031. 4365.0 4410.0 4365.0 3600.0 4072.5 3375.0 DrawSplineSection
  2032. 3780.0 3150.0 l  gs col-1 s gr
  2033.  gr
  2034. % arrowhead
  2035. n 3878 3263 m 3801 3166 l 3915 3216 l 3897 3240 l 3878 3263 l  cp gs 0.00 setgray ef gr  col-1 s
  2036. % Open spline
  2037. gs  clippath
  2038. 1577 4206 m 1684 4267 l 1560 4263 l 1716 4308 l 1733 4250 l  cp clip
  2039. n 1035.0 4185.0 m 1215.0 4185.0 l
  2040. 1215.0 4185.0 1395.0 4185.0 1552.5 4230.0 DrawSplineSection
  2041. 1710.0 4275.0 l  gs col-1 s gr
  2042.  gr
  2043. % arrowhead
  2044. n 1577 4206 m 1684 4267 l 1560 4263 l 1569 4235 l 1577 4206 l  cp gs 0.00 setgray ef gr  col-1 s
  2045. % Open spline
  2046. gs  clippath
  2047. 3455 4478 m 3533 4573 l 3419 4526 l 3549 4623 l 3585 4575 l  cp clip
  2048. n 3330.0 4275.0 m 3352.5 4365.0 l
  2049. 3352.5 4365.0 3375.0 4455.0 3465.0 4522.5 DrawSplineSection
  2050. 3555.0 4590.0 l  gs col-1 s gr
  2051.  gr
  2052. % arrowhead
  2053. n 3455 4478 m 3533 4573 l 3419 4526 l 3437 4502 l 3455 4478 l  cp gs 0.00 setgray ef gr  col-1 s
  2054. % Open spline
  2055. gs  clippath
  2056. 711 3409 m 676 3528 l 651 3407 l 644 3569 l 704 3571 l  cp clip
  2057. n 1016.0 890.0 m 1151.0 912.5 l
  2058. 1151.0 912.5 1286.0 935.0 1286.0 1407.5 DrawSplineSection
  2059. 1286.0 1407.5 1286.0 1880.0 993.5 2420.0 DrawSplineSection
  2060. 993.5 2420.0 701.0 2960.0 688.0 3257.5 DrawSplineSection
  2061. 675.0 3555.0 l  gs col-1 s gr
  2062.  gr
  2063. % arrowhead
  2064. n 711 3409 m 676 3528 l 651 3407 l 681 3408 l 711 3409 l  cp gs 0.00 setgray ef gr  col-1 s
  2065. % Open spline
  2066. gs  clippath
  2067. 3453 105 m 3573 135 l 3453 165 l 3615 165 l 3615 105 l  cp clip
  2068. n 1035.0 360.0 m 1215.0 270.0 l
  2069. 1215.0 270.0 1395.0 180.0 1912.5 157.5 DrawSplineSection
  2070. 1912.5 157.5 2430.0 135.0 3015.0 135.0 DrawSplineSection
  2071. 3600.0 135.0 l  gs col-1 s gr
  2072.  gr
  2073. % arrowhead
  2074. n 3453 105 m 3573 135 l 3453 165 l 3453 135 l 3453 105 l  cp gs 0.00 setgray ef gr  col-1 s
  2075. % Open spline
  2076. gs  clippath
  2077. 1270 533 m 1375 469 l 1312 575 l 1427 461 l 1384 418 l  cp clip
  2078. n 1035.0 630.0 m 1147.5 607.5 l
  2079. 1147.5 607.5 1260.0 585.0 1327.5 517.5 DrawSplineSection
  2080. 1395.0 450.0 l  gs col-1 s gr
  2081.  gr
  2082. % arrowhead
  2083. n 1270 533 m 1375 469 l 1312 575 l 1291 554 l 1270 533 l  cp gs 0.00 setgray ef gr  col-1 s
  2084. % Open spline
  2085. gs  clippath
  2086. 1807 1045 m 1870 1150 l 1765 1087 l 1879 1202 l 1922 1159 l  cp clip
  2087. n 1530.0 450.0 m 1552.5 652.5 l
  2088. 1552.5 652.5 1575.0 855.0 1732.5 1012.5 DrawSplineSection
  2089. 1890.0 1170.0 l  gs col-1 s gr
  2090.  gr
  2091. % arrowhead
  2092. n 1807 1045 m 1870 1150 l 1765 1087 l 1786 1066 l 1807 1045 l  cp gs 0.00 setgray ef gr  col-1 s
  2093. % Open spline
  2094. gs  clippath
  2095. 3262 1071 m 3351 1156 l 3232 1123 l 3373 1203 l 3403 1151 l  cp clip
  2096. n 2295.0 450.0 m 2362.5 697.5 l
  2097. 2362.5 697.5 2430.0 945.0 2745.0 967.5 DrawSplineSection
  2098. 2745.0 967.5 3060.0 990.0 3217.5 1080.0 DrawSplineSection
  2099. 3375.0 1170.0 l  gs col-1 s gr
  2100.  gr
  2101. % arrowhead
  2102. n 3262 1071 m 3351 1156 l 3232 1123 l 3247 1097 l 3262 1071 l  cp gs 0.00 setgray ef gr  col-1 s
  2103. % Open spline
  2104. gs  clippath
  2105. 2035 2076 m 1914 2102 l 2008 2022 l 1863 2095 l 1890 2149 l  cp clip
  2106. n 2205.0 1530.0 m 2362.5 1530.0 l
  2107. 2362.5 1530.0 2520.0 1530.0 2520.0 1777.5 DrawSplineSection
  2108. 2520.0 1777.5 2520.0 2025.0 2295.0 2025.0 DrawSplineSection
  2109. 2295.0 2025.0 2070.0 2025.0 1980.0 2070.0 DrawSplineSection
  2110. 1890.0 2115.0 l  gs col-1 s gr
  2111.  gr
  2112. % arrowhead
  2113. n 2035 2076 m 1914 2102 l 2008 2022 l 2021 2049 l 2035 2076 l  cp gs 0.00 setgray ef gr  col-1 s
  2114. % Open spline
  2115. gs  clippath
  2116. 2029 2733 m 1912 2775 l 1996 2683 l 1861 2773 l 1894 2823 l  cp clip
  2117. n 2205.0 1800.0 m 2407.5 1800.0 l
  2118. 2407.5 1800.0 2610.0 1800.0 2610.0 2047.5 DrawSplineSection
  2119. 2610.0 2047.5 2610.0 2295.0 2610.0 2497.5 DrawSplineSection
  2120. 2610.0 2497.5 2610.0 2700.0 2317.5 2700.0 DrawSplineSection
  2121. 2317.5 2700.0 2025.0 2700.0 1957.5 2745.0 DrawSplineSection
  2122. 1890.0 2790.0 l  gs col-1 s gr
  2123.  gr
  2124. % arrowhead
  2125. n 2029 2733 m 1912 2775 l 1996 2683 l 2012 2708 l 2029 2733 l  cp gs 0.00 setgray ef gr  col-1 s
  2126. % Open spline
  2127. gs  clippath
  2128. 3520 2751 m 3399 2777 l 3493 2697 l 3348 2770 l 3375 2824 l  cp clip
  2129. n 3690.0 1800.0 m 3892.5 1800.0 l
  2130. 3892.5 1800.0 4095.0 1800.0 4095.0 2047.5 DrawSplineSection
  2131. 4095.0 2047.5 4095.0 2295.0 4095.0 2497.5 DrawSplineSection
  2132. 4095.0 2497.5 4095.0 2700.0 3825.0 2700.0 DrawSplineSection
  2133. 3825.0 2700.0 3555.0 2700.0 3465.0 2745.0 DrawSplineSection
  2134. 3375.0 2790.0 l  gs col-1 s gr
  2135.  gr
  2136. % arrowhead
  2137. n 3520 2751 m 3399 2777 l 3493 2697 l 3506 2724 l 3520 2751 l  cp gs 0.00 setgray ef gr  col-1 s
  2138. % Open spline
  2139. gs  clippath
  2140. 3520 2076 m 3399 2102 l 3493 2022 l 3348 2095 l 3375 2149 l  cp clip
  2141. n 3690.0 1530.0 m 3847.5 1530.0 l
  2142. 3847.5 1530.0 4005.0 1530.0 4005.0 1777.5 DrawSplineSection
  2143. 4005.0 1777.5 4005.0 2025.0 3780.0 2025.0 DrawSplineSection
  2144. 3780.0 2025.0 3555.0 2025.0 3465.0 2070.0 DrawSplineSection
  2145. 3375.0 2115.0 l  gs col-1 s gr
  2146.  gr
  2147. % arrowhead
  2148. n 3520 2076 m 3399 2102 l 3493 2022 l 3506 2049 l 3520 2076 l  cp gs 0.00 setgray ef gr  col-1 s
  2149. % Open spline
  2150. gs  clippath
  2151. 3453 6090 m 3573 6120 l 3453 6150 l 3615 6150 l 3615 6090 l  cp clip
  2152. n 1035.0 6345.0 m 1215.0 6255.0 l
  2153. 1215.0 6255.0 1395.0 6165.0 1912.5 6142.5 DrawSplineSection
  2154. 1912.5 6142.5 2430.0 6120.0 3015.0 6120.0 DrawSplineSection
  2155. 3600.0 6120.0 l  gs col-1 s gr
  2156.  gr
  2157. % arrowhead
  2158. n 3453 6090 m 3573 6120 l 3453 6150 l 3453 6120 l 3453 6090 l  cp gs 0.00 setgray ef gr  col-1 s
  2159. % Open spline
  2160. gs  clippath
  2161. 1270 6518 m 1375 6454 l 1312 6560 l 1427 6446 l 1384 6403 l  cp clip
  2162. n 1035.0 6615.0 m 1147.5 6592.5 l
  2163. 1147.5 6592.5 1260.0 6570.0 1327.5 6502.5 DrawSplineSection
  2164. 1395.0 6435.0 l  gs col-1 s gr
  2165.  gr
  2166. % arrowhead
  2167. n 1270 6518 m 1375 6454 l 1312 6560 l 1291 6539 l 1270 6518 l  cp gs 0.00 setgray ef gr  col-1 s
  2168. % Open spline
  2169. gs  clippath
  2170. 1807 7030 m 1870 7135 l 1765 7072 l 1879 7187 l 1922 7144 l  cp clip
  2171. n 1530.0 6435.0 m 1552.5 6637.5 l
  2172. 1552.5 6637.5 1575.0 6840.0 1732.5 6997.5 DrawSplineSection
  2173. 1890.0 7155.0 l  gs col-1 s gr
  2174.  gr
  2175. % arrowhead
  2176. n 1807 7030 m 1870 7135 l 1765 7072 l 1786 7051 l 1807 7030 l  cp gs 0.00 setgray ef gr  col-1 s
  2177. % Open spline
  2178. gs  clippath
  2179. 3262 7056 m 3351 7141 l 3232 7108 l 3373 7188 l 3403 7136 l  cp clip
  2180. n 2295.0 6435.0 m 2362.5 6682.5 l
  2181. 2362.5 6682.5 2430.0 6930.0 2745.0 6952.5 DrawSplineSection
  2182. 2745.0 6952.5 3060.0 6975.0 3217.5 7065.0 DrawSplineSection
  2183. 3375.0 7155.0 l  gs col-1 s gr
  2184.  gr
  2185. % arrowhead
  2186. n 3262 7056 m 3351 7141 l 3232 7108 l 3247 7082 l 3262 7056 l  cp gs 0.00 setgray ef gr  col-1 s
  2187. % Open spline
  2188. gs  clippath
  2189. 2035 8061 m 1914 8087 l 2008 8007 l 1863 8080 l 1890 8134 l  cp clip
  2190. n 2205.0 7515.0 m 2362.5 7515.0 l
  2191. 2362.5 7515.0 2520.0 7515.0 2520.0 7762.5 DrawSplineSection
  2192. 2520.0 7762.5 2520.0 8010.0 2295.0 8010.0 DrawSplineSection
  2193. 2295.0 8010.0 2070.0 8010.0 1980.0 8055.0 DrawSplineSection
  2194. 1890.0 8100.0 l  gs col-1 s gr
  2195.  gr
  2196. % arrowhead
  2197. n 2035 8061 m 1914 8087 l 2008 8007 l 2021 8034 l 2035 8061 l  cp gs 0.00 setgray ef gr  col-1 s
  2198. % Open spline
  2199. gs  clippath
  2200. 2029 8718 m 1912 8760 l 1996 8668 l 1861 8758 l 1894 8808 l  cp clip
  2201. n 2205.0 7785.0 m 2407.5 7785.0 l
  2202. 2407.5 7785.0 2610.0 7785.0 2610.0 8032.5 DrawSplineSection
  2203. 2610.0 8032.5 2610.0 8280.0 2610.0 8482.5 DrawSplineSection
  2204. 2610.0 8482.5 2610.0 8685.0 2317.5 8685.0 DrawSplineSection
  2205. 2317.5 8685.0 2025.0 8685.0 1957.5 8730.0 DrawSplineSection
  2206. 1890.0 8775.0 l  gs col-1 s gr
  2207.  gr
  2208. % arrowhead
  2209. n 2029 8718 m 1912 8760 l 1996 8668 l 2012 8693 l 2029 8718 l  cp gs 0.00 setgray ef gr  col-1 s
  2210. % Open spline
  2211. gs  clippath
  2212. 3520 8736 m 3399 8762 l 3493 8682 l 3348 8755 l 3375 8809 l  cp clip
  2213. n 3690.0 7785.0 m 3892.5 7785.0 l
  2214. 3892.5 7785.0 4095.0 7785.0 4095.0 8032.5 DrawSplineSection
  2215. 4095.0 8032.5 4095.0 8280.0 4095.0 8482.5 DrawSplineSection
  2216. 4095.0 8482.5 4095.0 8685.0 3825.0 8685.0 DrawSplineSection
  2217. 3825.0 8685.0 3555.0 8685.0 3465.0 8730.0 DrawSplineSection
  2218. 3375.0 8775.0 l  gs col-1 s gr
  2219.  gr
  2220. % arrowhead
  2221. n 3520 8736 m 3399 8762 l 3493 8682 l 3506 8709 l 3520 8736 l  cp gs 0.00 setgray ef gr  col-1 s
  2222. % Open spline
  2223. gs  clippath
  2224. 3520 8061 m 3399 8087 l 3493 8007 l 3348 8080 l 3375 8134 l  cp clip
  2225. n 3690.0 7515.0 m 3847.5 7515.0 l
  2226. 3847.5 7515.0 4005.0 7515.0 4005.0 7762.5 DrawSplineSection
  2227. 4005.0 7762.5 4005.0 8010.0 3780.0 8010.0 DrawSplineSection
  2228. 3780.0 8010.0 3555.0 8010.0 3465.0 8055.0 DrawSplineSection
  2229. 3375.0 8100.0 l  gs col-1 s gr
  2230.  gr
  2231. % arrowhead
  2232. n 3520 8061 m 3399 8087 l 3493 8007 l 3506 8034 l 3520 8061 l  cp gs 0.00 setgray ef gr  col-1 s
  2233. % Open spline
  2234. gs  clippath
  2235. 3930 9145 m 3806 9131 l 3922 9085 l 3761 9107 l 3769 9167 l  cp clip
  2236. n 5130.0 5220.0 m 5130.0 6930.0 l
  2237. 5130.0 6930.0 5130.0 8640.0 4950.0 8820.0 DrawSplineSection
  2238. 4950.0 8820.0 4770.0 9000.0 4275.0 9067.5 DrawSplineSection
  2239. 3780.0 9135.0 l  gs col-1 s gr
  2240.  gr
  2241. % arrowhead
  2242. n 3930 9145 m 3806 9131 l 3922 9085 l 3926 9115 l 3930 9145 l  cp gs 0.00 setgray ef gr  col-1 s
  2243. % Open spline
  2244. gs  clippath
  2245. 2444 9150 m 2321 9132 l 2438 9091 l 2277 9107 l 2283 9166 l  cp clip
  2246. n 3420.0 5670.0 m 3217.5 6030.0 l
  2247. 3217.5 6030.0 3015.0 6390.0 2880.0 6750.0 DrawSplineSection
  2248. 2880.0 6750.0 2745.0 7110.0 2745.0 8100.0 DrawSplineSection
  2249. 2745.0 8100.0 2745.0 9090.0 2520.0 9112.5 DrawSplineSection
  2250. 2295.0 9135.0 l  gs col-1 s gr
  2251.  gr
  2252. % arrowhead
  2253. n 2444 9150 m 2321 9132 l 2438 9091 l 2441 9120 l 2444 9150 l  cp gs 0.00 setgray ef gr  col-1 s
  2254. % Open spline
  2255. gs  clippath
  2256. 740 5850 m 681 5958 l 682 5835 l 642 5992 l 700 6007 l  cp clip
  2257. n 1035.0 4455.0 m 1170.0 4455.0 l
  2258. 1170.0 4455.0 1305.0 4455.0 1282.5 4972.5 DrawSplineSection
  2259. 1282.5 4972.5 1260.0 5490.0 1012.5 5557.5 DrawSplineSection
  2260. 1012.5 5557.5 765.0 5625.0 720.0 5805.0 DrawSplineSection
  2261. 675.0 5985.0 l  gs col-1 s gr
  2262.  gr
  2263. % arrowhead
  2264. n 740 5850 m 681 5958 l 682 5835 l 711 5842 l 740 5850 l  cp gs 0.00 setgray ef gr  col-1 s
  2265. /Times-Roman ff 150.00 scf sf
  2266. 495 180 m
  2267. gs 1 -1 sc (Query) col-1 sh gr
  2268. /Times-Roman ff 150.00 scf sf
  2269. 540 1170 m
  2270. gs 1 -1 sc  270.0 rot (. . .) col-1 sh gr
  2271. /Times-Roman ff 150.00 scf sf
  2272. 270 945 m
  2273. gs 1 -1 sc (qual) col-1 sh gr
  2274. /Times-Roman ff 150.00 scf sf
  2275. 270 675 m
  2276. gs 1 -1 sc (targetlist) col-1 sh gr
  2277. /Times-Roman ff 150.00 scf sf
  2278. 270 405 m
  2279. gs 1 -1 sc (rtable) col-1 sh gr
  2280. /Times-Roman ff 150.00 scf sf
  2281. 3240 1350 m
  2282. gs 1 -1 sc (TLE) col-1 sh gr
  2283. /Times-Roman ff 150.00 scf sf
  2284. 3015 1575 m
  2285. gs 1 -1 sc (resdom) col-1 sh gr
  2286. /Times-Roman ff 150.00 scf sf
  2287. 3015 1845 m
  2288. gs 1 -1 sc (expr) col-1 sh gr
  2289. /Times-Roman ff 150.00 scf sf
  2290. 1755 1350 m
  2291. gs 1 -1 sc (TLE) col-1 sh gr
  2292. /Times-Roman ff 150.00 scf sf
  2293. 1530 1575 m
  2294. gs 1 -1 sc (resdom) col-1 sh gr
  2295. /Times-Roman ff 150.00 scf sf
  2296. 1530 1845 m
  2297. gs 1 -1 sc (expr) col-1 sh gr
  2298. /Times-Roman ff 150.00 scf sf
  2299. 495 6165 m
  2300. gs 1 -1 sc (Query) col-1 sh gr
  2301. /Times-Roman ff 150.00 scf sf
  2302. 540 7155 m
  2303. gs 1 -1 sc  270.0 rot (. . .) col-1 sh gr
  2304. /Times-Roman ff 150.00 scf sf
  2305. 270 6390 m
  2306. gs 1 -1 sc (rtable) col-1 sh gr
  2307. /Times-Roman ff 150.00 scf sf
  2308. 270 6660 m
  2309. gs 1 -1 sc (targetlist) col-1 sh gr
  2310. /Times-Roman ff 150.00 scf sf
  2311. 270 6930 m
  2312. gs 1 -1 sc (qual) col-1 sh gr
  2313. /Times-Roman ff 150.00 scf sf
  2314. 3240 7335 m
  2315. gs 1 -1 sc (TLE) col-1 sh gr
  2316. /Times-Roman ff 150.00 scf sf
  2317. 3015 7560 m
  2318. gs 1 -1 sc (resdom) col-1 sh gr
  2319. /Times-Roman ff 150.00 scf sf
  2320. 3015 7830 m
  2321. gs 1 -1 sc (expr) col-1 sh gr
  2322. /Times-Roman ff 150.00 scf sf
  2323. 1755 7335 m
  2324. gs 1 -1 sc (TLE) col-1 sh gr
  2325. /Times-Roman ff 150.00 scf sf
  2326. 1530 7560 m
  2327. gs 1 -1 sc (resdom) col-1 sh gr
  2328. /Times-Roman ff 150.00 scf sf
  2329. 1530 7830 m
  2330. gs 1 -1 sc (expr) col-1 sh gr
  2331. /Times-Roman ff 150.00 scf sf
  2332. 3150 8280 m
  2333. gs 1 -1 sc (Resdom) col-1 sh gr
  2334. /Times-Roman ff 150.00 scf sf
  2335. 3015 8505 m
  2336. gs 1 -1 sc (resname: C3) col-1 sh gr
  2337. /Times-Roman ff 150.00 scf sf
  2338. 3375 6885 m
  2339. gs 1 -1 sc (relname: "C") col-1 sh gr
  2340. /Times-Roman ff 150.00 scf sf
  2341. 3600 6660 m
  2342. gs 1 -1 sc (RTE) col-1 sh gr
  2343. /Times-Roman ff 150.00 scf sf
  2344. 1620 2970 m
  2345. gs 1 -1 sc (VAR) col-1 sh gr
  2346. /Times-Roman ff 150.00 scf sf
  2347. 1575 3195 m
  2348. gs 1 -1 sc (varno: 1) col-1 sh gr
  2349. /Times-Roman ff 150.00 scf sf
  2350. 1575 3480 m
  2351. gs 1 -1 sc (varattno: 1) col-1 sh gr
  2352. /Times-Roman ff 150.00 scf sf
  2353. 3105 2970 m
  2354. gs 1 -1 sc (VAR) col-1 sh gr
  2355. /Times-Roman ff 150.00 scf sf
  2356. 3060 3195 m
  2357. gs 1 -1 sc (varno: 1) col-1 sh gr
  2358. /Times-Roman ff 150.00 scf sf
  2359. 3060 3480 m
  2360. gs 1 -1 sc (varattno: 2) col-1 sh gr
  2361. /Times-Roman ff 150.00 scf sf
  2362. 1620 8955 m
  2363. gs 1 -1 sc (VAR) col-1 sh gr
  2364. /Times-Roman ff 150.00 scf sf
  2365. 1575 9180 m
  2366. gs 1 -1 sc (varno: 1) col-1 sh gr
  2367. /Times-Roman ff 150.00 scf sf
  2368. 3105 8955 m
  2369. gs 1 -1 sc (VAR) col-1 sh gr
  2370. /Times-Roman ff 150.00 scf sf
  2371. 3060 9180 m
  2372. gs 1 -1 sc (varno: 1) col-1 sh gr
  2373. /Times-Roman ff 150.00 scf sf
  2374. 1575 9465 m
  2375. gs 1 -1 sc (varattno: 1) col-1 sh gr
  2376. /Times-Roman ff 150.00 scf sf
  2377. 3060 9465 m
  2378. gs 1 -1 sc (varattno: 2) col-1 sh gr
  2379. showpage
  2380. $F2psEnd
  2381. rs
  2382. %%EndDocument
  2383.  @endspecial 517 3325 a(Figure)12 b(3.14:)j(Data)e(structure)e(of)h
  2384. Fk(A)g Fo(\)f Fk(C)16 b Ft(after)11 b(query)h(re)o(writing)p
  2385. eop
  2386. %%Page: 110 110
  2387. 110 109 bop 270 60 a Ft(110)57 b Fm(CHAPTER)14 b(3.)28
  2388. b(POSTGRESQL)13 b(FR)n(OM)f(THE)i(PR)n(OGRAMMER'S)f(POINT)f(OF)g(VIEW)
  2389. 270 234 y Ft(If)h(the)g(user')m(s)g(query)g(in)n(v)o(olv)o(es)h
  2390. Fp(union)f Ft(as)g(well)h(as)g Fp(intersect)f Ft(or)g
  2391. Fp(e)o(xcept)h Ft(there)e(will)h(be)h(more)f Fr(Query)270
  2392. 294 y Ft(nodes)f(of)f(the)h(form)f(sho)o(wn)g(in)h(02gure)f(3.14.)16
  2393. b(One)c(will)f(be)h(the)f(topmost)h(node)f((as)h(described)g(abo)o(v)o
  2394. (e))270 354 y(and)j(the)g(others)g(will)f(be)h(collected)g(in)g(a)g
  2395. (list)g(which)f(is)i(attached)f(to)f(the)h(02eld)g
  2396. Fr(unionClause)f Ft(of)270 413 y(the)k(topmost)f(node.)32
  2397. b((The)18 b Fp(intersectClause)g Ft(02elds)g(of)f(all)g
  2398. Fr(Query)h Ft(nodes)g(will)f(be)h(set)g(to)f Fr(NULL)270
  2399. 473 y Ft(because)c(the)o(y)g(are)f(no)g(longer)g(needed.))270
  2400. 593 y(The)28 b(function)f Fr(pg)p 632 593 15 2 v 17 w(parse)p
  2401. 799 593 V 18 w(and)p 907 593 V 17 w(plan())g Ft(is)h(responsible)g
  2402. (for)e(in)n(v)o(oking)h(the)h(re)o(write)e(pro-)270 653
  2403. y(cedure.)16 b(It)c(can)g(be)h(found)e(in)h(the)h(02le)f
  2404. Fk(:)c(:)g(:)p Fr(/src/backend/tcop/postgres.c)p Ft(.)330
  2405. 845 y Fr(List)29 b(*)330 905 y(pg_parse_and_plan(char)e
  2406. (*query_string,)i(Oid)g(*typev,)868 965 y(int)g(nargs,)868
  2407. 1024 y(QueryTreeList)f(**queryListP,)868 1084 y(CommandDest)g(dest))
  2408. 330 1144 y({)1107 1204 y(.)1107 1264 y(.)1107 1323 y(.)390
  2409. 1383 y(/*)h(Rewrite)g(Union,)h(Intersect)e(and)i(Except)f(Queries)419
  2410. 1443 y(*)h(to)g(normal)f(Union)g(Queries)h(using)f(IN)h(and)f(NOT)419
  2411. 1503 y(*)h(IN)g(subselects)f(*/)390 1562 y
  2412. (if(querytree->intersectClaus)o(e)e(!=)j(NIL))390 1622
  2413. y({)449 1682 y(querytree)f(=)h(Except_Intersect_Rewrite(querytr)o
  2414. (ee);)390 1742 y(})1107 1802 y(.)1107 1861 y(.)1107
  2415. 1921 y(.)330 1981 y(})270 2150 y Ft(Here)14 b(are)f(the)h(functions)f
  2416. (that)h(ha)o(v)o(e)g(been)g(added)g(to)g(perform)e(the)i(functionality)
  2417. e(described)i(abo)o(v)o(e.)270 2210 y(The)o(y)f(can)g(be)f(found)g(in)g
  2418. (the)g(02le)g Fk(:)c(:)g(:)q Fr(/src/backend/rewrite/rewrite)o
  2419. (Handler.c)o Ft(.)345 2379 y Fo(17)25 b Fr(Except)p
  2420. 578 2379 V 17 w(Intersect)p 865 2379 V 17 w(Rewrite())395
  2421. 2439 y Ft(Re)o(writes)19 b(queries)g(in)n(v)o(olving)f
  2422. Fp(union)h(clauses)p Ft(,)j Fp(intersect)d(clauses)h
  2423. Ft(and)f Fp(e)o(xcept)g(clauses)h Ft(to)395 2499 y(semantiacally)12
  2424. b(equi)o(v)o(alent)f(queries)i(that)f(use)h Fr(IN)f Ft(and)g
  2425. Fr(NOT)30 b(IN)12 b Ft(subselects)i(instead.)395 2625
  2426. y(The)23 b Fp(oper)o(ator)g(tr)n(ee)h Ft(is)f(attached)g(to)f
  2427. Fr(intersectClause)g Ft((see)h(rule)f Fr(SelectStmt)395
  2428. 2685 y Ft(abo)o(v)o(e))f(of)f(the)h Fp(parsetr)n(ee)h
  2429. Ft(gi)o(v)o(en)f(as)g(an)g(ar)o(gument.)41 b(First)21
  2430. b(we)g(sa)o(v)o(e)g(some)h(clauses)g((the)395 2745 y
  2431. Fr(sortClause)p Ft(,)j(the)e Fr(unique)29 b(flag)23 b
  2432. Ft(etc.).)48 b(Then)23 b(we)h(translate)f(the)g Fp(oper)o(ator)g(tr)n
  2433. (ee)395 2804 y Ft(to)d(DNF)g(()p Fp(Disjunctive)g(Normal)h(F)-5
  2434. b(orm)p Ft())20 b(by)h Fr(cnfify())p Ft(.)39 b(Note)20
  2435. b(that)g Fr(cnfify())g Ft(pro-)395 2864 y(duces)27
  2436. b(CNF)g(b)o(ut)g(as)h(we)f(e)o(xchanged)h Fr(AND)f Ft(nodes)g(with)g
  2437. Fr(OR)g Ft(nodes)g(within)g(function)395 2924 y Fr(A)p
  2438. 428 2924 V 17 w(Expr)p 565 2924 V 18 w(to)p 643 2924
  2439. V 18 w(Expr())17 b Ft(earlier)g(we)h(get)f(DNF)h(when)g(we)g(e)o
  2440. (xchange)g Fr(AND)f Ft(nodes)h(and)g Fr(OR)395 2984 y
  2441. Ft(nodes)c(again)g(in)g(the)g(result.)21 b(No)o(w)14
  2442. b(we)h(create)f(a)g(ne)o(w)g((re)o(written))e(query)i(by)g(e)o
  2443. (xamining)g(the)395 3044 y(ne)o(w)f Fp(oper)o(ator)i(tr)n(ee)f
  2444. Ft(which)g(is)g(in)g(DNF)f(no)o(w)m(.)20 b(F)o(or)13
  2445. b(e)o(v)o(ery)h Fr(AND)f Ft(node)h(we)g(create)g(an)g(entry)f(in)395
  2446. 3103 y(the)e Fp(union)g(list)h Ft(and)g(for)f(e)o(v)o(ery)g
  2447. Fr(OR)h Ft(node)f(we)h(create)g(an)g Fr(IN)f Ft(subselect.)16
  2448. b(()p Fr(NOT)29 b(IN)12 b Ft(subselects)395 3163 y(are)i(created)g
  2449. (for)f Fr(OR)30 b(NOT)14 b Ft(nodes).)21 b(The)14 b(02rst)g(entry)g
  2450. (of)f(the)i Fp(union)e(list)h Ft(is)h(handed)f(back)g(b)o(ut)395
  2451. 3223 y(before)e(that)h(the)h(sa)o(v)o(ed)g(clauses)g(()p
  2452. Fr(sortClause)e Ft(etc.))18 b(are)13 b(restored)g(to)g(the)h(ne)o(w)f
  2453. (top)g(node.)395 3283 y(Note)d(that)g(the)g(ne)o(w)g(top)h(node)f(can)g
  2454. (dif)o(fer)f(from)h(the)g(one)g(of)g(the)g Fp(parsetr)n(ee)i
  2455. Ft(gi)o(v)o(en)e(as)h(ar)o(gument)395 3342 y(because)k(of)g(the)f
  2456. (translation)h(into)f(DNF)l(.)h(That')m(s)h(why)e(we)h(had)g(to)g(sa)o
  2457. (v)o(e)g(the)g Fr(sortClause)395 3402 y Ft(etc.)p eop
  2458. %%Page: 111 111
  2459. 111 110 bop 198 60 a Fm(3.8.)26 b(THE)13 b(REALIZA)-6
  2460. b(TION)14 b(OF)e(UNION,)g(INTERSECT)i(AND)f(EXCEPT)327
  2461. b Ft(111)382 234 y Fr(Query)30 b(*)382 294 y(Except_Intersect_Rewrite)e
  2462. ((Query)h(*parsetree))382 354 y({)1219 413 y(.)1219
  2463. 473 y(.)1219 533 y(.)442 593 y(/*)h(Save)f(some)h(fields,)f(to)g(be)h
  2464. (able)f(to)h(restore)f(them)472 653 y(*)h(to)f(the)h(resulting)f(top)g
  2465. (node)h(at)f(the)h(end)g(of)f(the)472 712 y(*)h(function)472
  2466. 772 y(*/)442 832 y(sortClause)f(=)h(parsetree->sortClause;)442
  2467. 892 y(uniqueFlag)f(=)h(parsetree->uniqueFlag;)442 951
  2468. y(into)g(=)f(parsetree->into;)442 1011 y(isBinary)g(=)h
  2469. (parsetree->isBinary;)442 1071 y(isPortal)f(=)h(parsetree->isPortal;)
  2470. 442 1191 y(/*)g(Transform)f(the)g(SelectStmt)g(nodes)g(into)h(Query)f
  2471. (nodes)472 1250 y(*)h(as)f(usually)h(done)f(by)h
  2472. (transformSelectStmt())d(earlier.)472 1310 y(*)j(/)442
  2473. 1370 y(intersectClause)e(=)502 1430 y((List)h
  2474. (*)intersect_tree_analyze()741 1489 y((Node)g
  2475. (*)parsetree->intersectClause,)741 1549 y((Node)g
  2476. (*)lfirst(parsetree->unionClause),)741 1609 y((Node)g
  2477. (*)parsetree);)1219 1669 y(.)1219 1729 y(.)1219 1788
  2478. y(.)442 1848 y(/*)h(Transform)f(the)g(operator)g(tree)h(to)f(DNF)h(*/)
  2479. 442 1908 y(intersectClause)e(=)801 1968 y(cnfify((Expr)g
  2480. (*)intersectClause,)g(true);)442 2027 y(/*)i(For)f(every)h(entry)f
  2481. (of)h(the)f(intersectClause)f(list)i(we)472 2087 y(*)g(generate)f(one)g
  2482. (entry)h(in)f(the)h(union_list)472 2147 y(*/)442 2207
  2483. y(foreach(intersect,)e(intersectClause))442 2267 y({)502
  2484. 2326 y(/*)i(For)f(every)g(OR)h(we)g(create)f(an)h(IN)f(subselect)g(and)
  2485. 532 2386 y(*)h(for)f(every)g(OR)h(NOT)g(we)f(create)g(a)h(NOT)g(IN)f
  2486. (subselect,)532 2446 y(*/)502 2506 y(intersect_list)f(=)i(NIL;)502
  2487. 2565 y(create_list((Node)e(*)lfirst(intersect),)861
  2488. 2625 y(&intersect_list);)502 2685 y(/*)i(The)f(first)g(node)h(will)f
  2489. (become)g(the)h(Select)f(Query)532 2745 y(*)h(node,)f(all)g(other)h
  2490. (nodes)f(are)h(transformed)e(into)532 2804 y(*)i(subselects)e(under)i
  2491. (this)f(node!)532 2864 y(*/)502 2924 y(intersect_node)f(=)i((Query)f
  2492. (*)lfirst(intersect_list);)502 2984 y(intersect_list)f(=)i
  2493. (lnext(intersect_list);)1219 3044 y(.)1219 3103 y(.)1219
  2494. 3163 y(.)502 3223 y(/*)g(Transform)e(all)i(remaining)f(nodes)g(into)h
  2495. (subselects)532 3283 y(*)g(and)f(add)h(them)f(to)h(the)f
  2496. (qualifications)g(of)g(the)532 3342 y(*)h(Select)f(Query)g(node)532
  2497. 3402 y(*/)p eop
  2498. %%Page: 112 112
  2499. 112 111 bop 270 60 a Ft(112)60 b Fm(CHAPTER)14 b(3.)25
  2500. b(POSTGRESQL)13 b(FR)n(OM)f(THE)i(PR)n(OGRAMMER'S)f(POINT)f(OF)g(VIEW)
  2501. 574 234 y Fr(while(intersect_list)28 b(!=)h(NIL))574
  2502. 294 y({)634 354 y(n)g(=)h(makeNode(SubLink);)634 473
  2503. y(/*)f(Here)h(we)f(got)h(an)g(OR)f(so)h(transform)f(it)g(to)h(an)664
  2504. 533 y(*)f(IN)h(subselect)664 593 y(*/)634 653 y
  2505. (if(IsA(lfirst(intersect_list)o(),)d(Query)))634
  2506. 712 y({)1291 772 y(.)1291 832 y(.)1291 892 y(.)693 951
  2507. y(n->subselect)i(=)h(lfirst(intersect_list);)693 1011
  2508. y(op)g(=)g("=";)693 1071 y(n->subLinkType)f(=)h(ANY_SUBLINK;)693
  2509. 1131 y(n->useor)f(=)h(false;)634 1191 y(})634 1310 y(/*)f(Here)h(we)f
  2510. (got)h(an)g(OR)f(NOT)h(node)f(so)h(transform)664 1370
  2511. y(*)f(it)h(to)g(a)f(NOT)h(IN)60 b(subselect)664 1430
  2512. y(*/)634 1489 y(else)634 1549 y({)1291 1609 y(.)1291
  2513. 1669 y(.)1291 1729 y(.)693 1788 y(n->subselect)29 b(=)783
  2514. 1848 y((Node)g(*)lfirst(((Expr)g(*))962 1908 y
  2515. (lfirst(intersect_list))->args);)693 1968 y(op)h(=)g("<>";)693
  2516. 2027 y(n->subLinkType)f(=)h(ALL_SUBLINK;)693 2087 y(n->useor)f(=)h
  2517. (true;)634 2147 y(})634 2267 y(/*)f(Prepare)g(the)h(lefthand)f(side)g
  2518. (of)h(the)g(Sublinks:)664 2326 y(*)f(All)h(the)f(entries)h(of)f(the)h
  2519. (targetlist)e(must)i(be)664 2386 y(*)f((IN))h(or)f(must)h(not)f(be)h
  2520. ((NOT)f(IN))h(the)g(subselect)664 2446 y(*/)634 2506
  2521. y(foreach(elist,)e(intersect_node->targetList))634
  2522. 2565 y({)693 2625 y(Node)239 b(*expr)29 b(=)h(lfirst(elist);)693
  2523. 2685 y(TargetEntry)f(*tent)g(=)h((TargetEntry)f(*)expr;)693
  2524. 2804 y(n->lefthand)g(=)903 2864 y(lappend(n->lefthand,)e
  2525. (tent->expr);)634 2924 y(})634 3044 y(/*)i(The)h(first)f(arguments)g
  2526. (of)h(oper)f(also)h(have)f(to)h(be)664 3103 y(*)f(created)g(for)h(the)g
  2527. (sublink)f((they)g(are)g(the)h(same)664 3163 y(*)f(as)h(the)g
  2528. (lefthand)f(side!))664 3223 y(*/)634 3283 y(left_expr)g(=)g
  2529. (n->lefthand;)634 3342 y(right_expr)f(=)783 3402 y(((Query)h
  2530. (*)(n->subselect))->targetList;)p eop
  2531. %%Page: 113 113
  2532. 113 112 bop 198 60 a Fm(3.8.)29 b(THE)13 b(REALIZA)-6
  2533. b(TION)14 b(OF)e(UNION,)g(INTERSECT)i(AND)f(EXCEPT)324
  2534. b Ft(113)562 234 y Fr(foreach(elist,)28 b(left_expr))562
  2535. 294 y({)621 354 y(Node)269 b(*lexpr)29 b(=)h(lfirst(elist);)621
  2536. 413 y(Node)269 b(*rexpr)29 b(=)h(lfirst(right_expr);)621
  2537. 473 y(TargetEntry)f(*tent)g(=)h((TargetEntry)f(*))g(rexpr;)621
  2538. 533 y(Expr)269 b(*op_expr;)621 653 y(op_expr)30 b(=)f(make_op(op,)g
  2539. (lexpr,)g(tent->expr);)621 712 y(n->oper)h(=)f(lappend(n->oper,)f
  2540. (op_expr);)621 772 y(right_expr)h(=)h(lnext(right_expr);)562
  2541. 832 y(})562 951 y(/*)f(If)h(the)g(Select)f(Query)g(node)g(has)h
  2542. (aggregates)592 1011 y(*)f(in)h(use)g(add)f(all)h(the)f(subselects)g
  2543. (to)h(the)592 1071 y(*)f(HAVING)h(qual)f(else)g(to)h(the)g(WHERE)f
  2544. (qual)592 1131 y(*/)562 1191 y(if(intersect_node->hasAggs)e(==)i
  2545. (false))562 1250 y({)621 1310 y(AddQual(intersect_node,)f((Node)h
  2546. (*)n);)562 1370 y(})562 1430 y(else)562 1489 y({)621
  2547. 1549 y(AddHavingQual(intersect_node,)e((Node)i(*)n);)562
  2548. 1609 y(})562 1729 y(/*)g(Now)h(we)g(got)f(sublinks)g(*/)562
  2549. 1788 y(intersect_node->hasSubLinks)d(=)k(true;)562 1848
  2550. y(intersect_list)e(=)i(lnext(intersect_list);)502 1908
  2551. y(})502 1968 y(intersect_node->intersectClaus)o(e)d(=)j(NIL;)502
  2552. 2027 y(union_list)f(=)g(lappend(union_list,)f(intersect_node);)442
  2553. 2087 y(})442 2207 y(/*)i(The)f(first)h(entry)f(to)h(union_list)e(is)i
  2554. (our)472 2267 y(*)g(new)f(top)h(node)472 2326 y(*/)442
  2555. 2386 y(result)f(=)h((Query)f(*)lfirst(union_list);)442
  2556. 2506 y(/*)h(attach)f(the)h(rest)f(to)h(unionClause)e(*/)442
  2557. 2565 y(result->unionClause)g(=)i(lnext(union_list);)442
  2558. 2685 y(/*)g(Attach)f(all)h(the)f(items)g(saved)h(in)f(the)472
  2559. 2745 y(*)h(beginning)f(of)g(the)h(function)f(*/)442 2804
  2560. y(result->sortClause)f(=)i(sortClause;)442 2864 y(result->uniqueFlag)e
  2561. (=)i(uniqueFlag;)442 2924 y(result->into)f(=)g(into;)442
  2562. 2984 y(result->isPortal)f(=)i(isPortal;)442 3044 y(result->isBinary)e
  2563. (=)i(isBinary;)1219 3103 y(.)1219 3163 y(.)1219 3223
  2564. y(.)442 3283 y(return)59 b(result;)382 3342 y(})p eop
  2565. %%Page: 114 114
  2566. 114 113 bop 270 60 a Ft(114)60 b Fm(CHAPTER)14 b(3.)25
  2567. b(POSTGRESQL)13 b(FR)n(OM)f(THE)i(PR)n(OGRAMMER'S)f(POINT)f(OF)g(VIEW)
  2568. 345 234 y Fo(17)25 b Fr(create)p 578 234 15 2 v 17
  2569. w(list())395 294 y Ft(Create)19 b(a)h(list)g(of)f(nodes)h(that)f(are)
  2570. g(either)h Fr(Query)f Ft(nodes)h(or)f Fr(NOT)g Ft(nodes)h(follo)o(wed)e
  2571. (by)i(a)395 354 y Fr(Query)11 b Ft(node.)16 b(The)c Fp(tr)n(ee)h
  2572. Ft(gi)o(v)o(en)f(in)f Fr(ptr)h Ft(contains)g(at)g(least)h(one)f
  2573. Fp(non)f(ne)n(gated)h Fr(Query)g Ft(node.)395 413 y(This)h(node)f(is)h
  2574. (put)f(to)g(the)g(be)o(ginning)g(of)g(the)g(list.)454
  2575. 533 y Fr(void)30 b(create_list(Node)e(*ptr,)962 593
  2576. y(List)i(**intersect_list))454 653 y({)514 712 y(List)g(*arg;)514
  2577. 832 y(if(IsA(ptr,Query)))514 892 y({)574 951 y(/*)g(The)f(non)h
  2578. (negated)f(node)g(is)h(attached)f(at)g(the)604 1011 y(*)h(beginning)e
  2579. ((lcons))i(*/)574 1071 y(*intersect_list)e(=)i(lcons(ptr,)f
  2580. (*intersect_list);)574 1131 y(return;)514 1191 y(})514
  2581. 1250 y(if(IsA(ptr,Expr)))514 1310 y({)574 1370 y(if(((Expr)g
  2582. (*)ptr)->opType)f(==)i(NOT_EXPR))574 1430 y({)634
  2583. 1489 y(/*)f(negated)g(nodes)h(are)f(appended)g(to)h(the)664
  2584. 1549 y(*)f(end)h((lappend))664 1609 y(*/)634 1669 y(*intersect_list)e
  2585. (=)843 1729 y(lappend(*intersect_list,)f(ptr);)634
  2586. 1788 y(return;)574 1848 y(})574 1908 y(else)574 1968
  2587. y({)634 2027 y(foreach(arg,)h(((Expr)h(*)ptr)->args))634
  2588. 2087 y({)693 2147 y(create_list(lfirst(arg),)f(intersect_list);)634
  2589. 2207 y(})634 2267 y(return;)574 2326 y(})574 2386 y(return;)514
  2590. 2446 y(})454 2506 y(})345 2625 y Fo(17)d Fr(intersect)p
  2591. 668 2625 V 16 w(tree)p 804 2625 V 18 w(analyze())395
  2592. 2685 y Ft(The)32 b(nodes)h(gi)o(v)o(en)f(in)g Fr(tree)g
  2593. Ft(are)g(not)g(transformed)f(yet)h(so)g(process)h(them)f(using)395
  2594. 2745 y Fr(parse)p 548 2745 V 17 w(analyze())p Ft(.)d(The)18
  2595. b(node)f(gi)o(v)o(en)g(in)g Fr(first)p 1417 2745 V 18
  2596. w(select)f Ft(has)i(already)f(been)g(pro-)395 2804 y(cessed,)e(so)f
  2597. (don')o(t)e(transform)h(it)g(again)g(b)o(ut)g(return)g(a)g(pointer)g
  2598. (to)g(the)h(already)f(processed)h(v)o(er)o(-)395 2864
  2599. y(sion)e(gi)o(v)o(en)g(in)g Fr(parsetree)g Ft(instead.)454
  2600. 2984 y Fr(Node)30 b(*intersect_tree_analyze(Node)c(*tree,)873
  2601. 3044 y(Node)j(*first_select,)f(Node)i(*parsetree))454
  2602. 3103 y({)514 3163 y(Node)g(*result;)514 3223 y(List)g(*arg;)514
  2603. 3342 y(if(IsA(tree,)f(SelectStmt)))514 3402 y({)p
  2604. eop
  2605. %%Page: 115 115
  2606. 115 114 bop 198 60 a Fm(3.8.)29 b(THE)13 b(REALIZA)-6
  2607. b(TION)14 b(OF)e(UNION,)g(INTERSECT)i(AND)f(EXCEPT)324
  2608. b Ft(115)502 234 y Fr(QueryTreeList)28 b(*qtree;)502
  2609. 354 y(/*)i(If)f(we)h(get)f(to)h(the)g(tree)f(given)g(in)h(first_select)
  2610. 532 413 y(*)g(return)f(parsetree)g(instead)g(of)g(performing)532
  2611. 473 y(*)h(parse_analyze())e(*/)502 533 y(if(tree)h(==)h
  2612. (first_select))502 593 y({)562 653 y(result)f(=)h(parsetree;)502
  2613. 712 y(})502 772 y(else)502 832 y({)562 892 y(/*)f(transform)g(the)h
  2614. (unprocessed)e(Query)i(nodes)f(*/)562 951 y(qtree)g(=)711
  2615. 1011 y(parse_analyze(lcons(tree,)e(NIL),)i(NULL);)562
  2616. 1071 y(result)g(=)h((Node)f(*)qtree->qtrees[0];)502
  2617. 1131 y(})442 1191 y(})442 1250 y(if(IsA(tree,Expr)))442
  2618. 1310 y({)502 1370 y(/*)h(Call)f(recursively)g(for)g(every)g(argument)g
  2619. (*/)532 1430 y(foreach(arg,)f(((Expr)i(*)tree)->args))532
  2620. 1489 y({)592 1549 y(lfirst(arg))e(=)711 1609 y
  2621. (intersect_tree_analyze(lfirst(ar)o(g),)1100 1669
  2622. y(first_select,)g(parsetree);)532 1729 y(})532 1788
  2623. y(result)h(=)h(tree;)442 1848 y(})442 1908 y(return)f(result;)382
  2624. 1968 y(})p eop
  2625. %%Page: 116 116
  2626. 116 115 bop 270 633 a Fq(Summary)270 892 y Ft(PostgreSQL)14
  2627. b(has)g(become)g(one)g(of)g(the)g(most)g(popular)f(non)h(commercial)g
  2628. (RDBMSs)h(in)e(the)i(UNIX)270 951 y(world.)27 b(It)16
  2629. b(pro)o(vides)h(an)f(e)o(xtended)h(subset)g(of)f(the)h(SQL92)g
  2630. (standard)f(as)h(query)f(language,)i(allo)o(ws)270 1011
  2631. y(concurrent)c(database)i(access,)h(pro)o(vides)e(a)h(huge)f(amount)f
  2632. (of)h(datatypes,)h(etc.)25 b(At)15 b(the)g(the)g(time)g(of)270
  2633. 1071 y(writing)9 b(this)i(document)e(the)i(implemented)e(part)h(of)g
  2634. (SQL92)g(in)g(PostgreSQL)g(lacked)g(two)f(important)270
  2635. 1131 y(features:)345 1230 y Fo(17)25 b Ft(The)12 b
  2636. Fp(having)g(clause)h Ft(was)g(not)f(implemented.)345
  2637. 1330 y Fo(17)25 b Ft(The)12 b(use)h(of)f Fp(e)o(xcept)h
  2638. Ft(and)f Fp(intersect)h Ft(statements)g(was)f(not)g(possible.)270
  2639. 1430 y(The)19 b(implementation)f(of)g(these)h(two)f(items)g(was)h(the)g
  2640. (moti)o(v)o(ation)e(for)h(the)g(whole)h(work.)33 b(When)270
  2641. 1489 y(I)22 b(started)g(to)g(implement)g(the)g(abo)o(v)o(e)h(mentioned)
  2642. e(features,)k(I)d(noticed)g(that)g(there)g(was)g(almost)270
  2643. 1549 y(no)g(documentation)e(on)i(the)g(internal)f(structure)g(of)g
  2644. (PostgreSQL)g(a)o(v)o(ailable)g(that)h(could)f(help)h(a)270
  2645. 1609 y(programmer)c(to)h(02nd)g(his)h(way)f(in.)37
  2646. b(So)20 b(I)f(decided)g(to)h(include)f(all)h(the)f(kno)o(wledge)g(I)g
  2647. (collected)270 1669 y(while)14 b(working)e(with)i(the)g(source)g(code)g
  2648. (into)f(this)h(document,)h(hoping)e(that)h(it)f(will)h(be)g(a)g(useful)
  2649. g(for)270 1729 y(an)o(y)19 b(ne)o(wcomer)f(who)h(wants)g(to)f(enhance)i
  2650. (PostgreSQL)e(etc.)35 b(Additionally)18 b(I)h(included)f(a)h(short)270
  2651. 1788 y(discussion)13 b(on)g(SQL)g(and)g(a)g(description)f(of)g
  2652. (PostgreSQL)-5 b(')m(s)14 b(features)e((like)g Fp(triggers)g
  2653. Ft(etc.))17 b(and)12 b(ho)o(w)270 1848 y(the)o(y)g(can)h(be)g(used.)
  2654. 270 1968 y(Chapter)24 b(1)h(discusses)h(the)f(theoretical)f
  2655. ((mathematical))f(background)h(of)h(relational)e(database)270
  2656. 2027 y(management)12 b(systems)h((RDBMSs))g(ending)f(in)g(a)g(short)h
  2657. (description)e(of)h(SQL.)270 2147 y(Chapter)30 b(2)g(02rst)g(gi)o(v)o
  2658. (es)g(an)h(o)o(v)o(ervie)o(w)e(of)h(ho)o(w)g(to)g(setup)g(and)g
  2659. (administrate)g(PostgreSQL.)270 2207 y(Ne)o(xt)15 b(some)g(of)f
  2660. (PostgreSQL)-5 b(')m(s)15 b(special)g(features)g(are)g(presented)f
  2661. ((i.e.)23 b Fp(multiple)14 b(inheritance)p Ft(,)i Fp(user)270
  2662. 2267 y(de02ned)c(data)g(types)p Ft(,)i Fp(rules)p Ft(,)f
  2663. Fp(triggers)p Ft(,)f(etc.))k(using)c(a)h(lot)f(of)g(e)o(xamples.)270
  2664. 2386 y(Chapter)19 b(3)g(02rst)g(gi)o(v)o(es)g(an)g(o)o(v)o(ervie)o(w)
  2665. g(on)g(the)g(internal)g(structure)f(of)h(PostgreSQL)g(and)g(presents)
  2666. 270 2446 y(the)k(stages)g(and)g(data)f(structures)g(that)h(are)f(in)n
  2667. (v)o(olv)o(ed)h(whene)o(v)o(er)f(a)h(SQL)f(query)g(arri)o(v)o(es.)47
  2668. b(The)270 2506 y Fp(parser)15 b(stage)p Ft(,)g(the)f
  2669. Fp(rule)h(system)h Ft((which)e(is)g(mainly)g(used)h(for)f(the)h
  2670. (implementation)e(of)h Fp(vie)o(ws)p Ft(),)i(the)270
  2671. 2565 y Fp(planner/optimizer)f Ft(and)f(the)h Fp(e)o(xecutor)g
  2672. Ft(are)f(described)h(and)f(illustrated)g(by)h(a)f(lot)h(of)f
  2673. (02gures.)22 b(After)270 2625 y(that)15 b(the)g(changes)h(necessary)g
  2674. (for)e(the)i(implementation)e(of)h(the)g(missing)g(features)g(()p
  2675. Fp(having)g(clause)270 2685 y Ft(and)d Fp(e)o(xcept/intersect)p
  2676. Ft())h(are)f(presented)g(including)g(parts)g(of)g(the)g(added)h
  2677. (source)f(code.)1133 3552 y(116)p eop
  2678. %%Page: 117 117
  2679. 117 116 bop 198 633 a Fq(Bibliograph)n(y)198 892 y Ft([D)n(A)-6
  2680. b(TE96])99 b(C.)15 b(J.)g(Date)f(with)g(H.)g(Darwen:)k
  2681. Fp(A)d(Guide)f(to)f(the)h(SQL)g(Standar)n(d)p Ft(,)h(F)o(ourth)e
  2682. (Edition,)505 951 y(Addison-W)l(esle)o(y)g(1996)198 1051
  2683. y([ULL88])127 b(Jef)o(fre)o(y)12 b(D.)h(Ullman:)i Fp(Principles)e(of)f
  2684. (Database)h(and)f(Knowledge)g(-)g(Base)i(Systems)p Ft(,)505
  2685. 1111 y(V)-6 b(olume)12 b(1,)g(Computer)g(Science)h(Press)f(1988)198
  2686. 1210 y([D)n(A)-6 b(TE94])99 b(C.)23 b(J.)g(Date:)36 b
  2687. Fp(An)23 b(Intr)n(oduction)e(to)h(Database)g(Systems)p
  2688. Ft(,)k(V)-6 b(ol.)23 b(1,)i(6th)d(Edition,)505 1270 y(Addison-W)l(esle)
  2689. o(y)13 b(1994)198 1370 y([LOCK98])88 b(Thomas)23 b(Lockhart:)36
  2690. b Fp(P)l(ostgr)n(eSQL)23 b(Pr)n(ogr)o(ammer')n(s)h(Guide)p
  2691. Ft(,)h(part)d(of)g(the)h(Post-)505 1430 y(greSQL)12 b(documentation.)
  2692. 198 1529 y([ST)o(ON89])94 b(Michael)16 b(Stonebraker)d(et.)j(al.:)21
  2693. b Fp(On)16 b(Rules,)h(Pr)n(ocedur)n(es,)h(Cac)o(hing)d(and)g(V)l(ie)o
  2694. (ws)i(in)505 1589 y(Data)12 b(Base)i(Systems)p Ft(.)1061
  2695. 3552 y(117)p eop
  2696. %%Trailer
  2697. end
  2698. userdict /end-hook known{end-hook}if
  2699. %%EOF