globegit-postgresql-plruby 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. data/Changes +121 -0
  2. data/README.markdown +155 -0
  3. data/Rakefile +48 -0
  4. data/docs/plruby.rb +1931 -0
  5. data/ex_trans.sql +33 -0
  6. data/extconf.rb +267 -0
  7. data/plruby.html +1454 -0
  8. data/plruby.rd +1571 -0
  9. data/postgresql-plruby.gemspec +56 -0
  10. data/src/conversions.h +5 -0
  11. data/src/conversions/basic/conversions.h +25 -0
  12. data/src/conversions/basic/extconf.rb +8 -0
  13. data/src/conversions/basic/plruby_basic.c +357 -0
  14. data/src/conversions/bitstring/bitstring.sql +75 -0
  15. data/src/conversions/bitstring/conversions.h +15 -0
  16. data/src/conversions/bitstring/extconf.rb +8 -0
  17. data/src/conversions/bitstring/plruby_bitstring.c +579 -0
  18. data/src/conversions/convcommon.h +129 -0
  19. data/src/conversions/datetime/conversions.h +13 -0
  20. data/src/conversions/datetime/extconf.rb +8 -0
  21. data/src/conversions/datetime/plruby_datetime.c +269 -0
  22. data/src/conversions/geometry/conversions.h +37 -0
  23. data/src/conversions/geometry/extconf.rb +8 -0
  24. data/src/conversions/geometry/geometry.sql +196 -0
  25. data/src/conversions/geometry/plruby_geometry.c +2494 -0
  26. data/src/conversions/network/conversions.h +21 -0
  27. data/src/conversions/network/extconf.rb +8 -0
  28. data/src/conversions/network/network.sql +63 -0
  29. data/src/conversions/network/plruby_network.c +537 -0
  30. data/src/package.h +20 -0
  31. data/src/plpl.c +1708 -0
  32. data/src/plplan.c +893 -0
  33. data/src/plruby.c +1676 -0
  34. data/src/plruby.h +324 -0
  35. data/src/pltrans.c +388 -0
  36. data/test/conv_bitstring/b.rb +45 -0
  37. data/test/conv_bitstring/runtest +26 -0
  38. data/test/conv_bitstring/test.expected.73 +148 -0
  39. data/test/conv_bitstring/test.expected.74 +148 -0
  40. data/test/conv_bitstring/test.expected.80 +148 -0
  41. data/test/conv_bitstring/test.expected.81 +148 -0
  42. data/test/conv_bitstring/test.expected.82 +148 -0
  43. data/test/conv_bitstring/test.expected.83 +148 -0
  44. data/test/conv_bitstring/test.expected.84 +148 -0
  45. data/test/conv_bitstring/test.out +148 -0
  46. data/test/conv_bitstring/test_mklang.sql +8 -0
  47. data/test/conv_bitstring/test_queries.sql +63 -0
  48. data/test/conv_bitstring/test_queries.sql.in +63 -0
  49. data/test/conv_geometry/b.rb +45 -0
  50. data/test/conv_geometry/runtest +26 -0
  51. data/test/conv_geometry/test.expected.73 +265 -0
  52. data/test/conv_geometry/test.expected.74 +265 -0
  53. data/test/conv_geometry/test.expected.80 +265 -0
  54. data/test/conv_geometry/test.expected.81 +265 -0
  55. data/test/conv_geometry/test.expected.82 +265 -0
  56. data/test/conv_geometry/test.expected.83 +265 -0
  57. data/test/conv_geometry/test.expected.84 +265 -0
  58. data/test/conv_geometry/test.out +265 -0
  59. data/test/conv_geometry/test_mklang.sql +8 -0
  60. data/test/conv_geometry/test_queries.sql +194 -0
  61. data/test/conv_geometry/test_queries.sql.in +194 -0
  62. data/test/conv_network/b.rb +45 -0
  63. data/test/conv_network/runtest +26 -0
  64. data/test/conv_network/test.expected.73 +213 -0
  65. data/test/conv_network/test.expected.74 +237 -0
  66. data/test/conv_network/test.expected.80 +237 -0
  67. data/test/conv_network/test.expected.81 +237 -0
  68. data/test/conv_network/test.expected.82 +237 -0
  69. data/test/conv_network/test.expected.83 +237 -0
  70. data/test/conv_network/test.expected.84 +237 -0
  71. data/test/conv_network/test.out +237 -0
  72. data/test/conv_network/test_mklang.sql +8 -0
  73. data/test/conv_network/test_queries.sql +60 -0
  74. data/test/conv_network/test_queries.sql.in +60 -0
  75. data/test/plp/b.rb +34 -0
  76. data/test/plp/runtest +29 -0
  77. data/test/plp/test.expected.73 +472 -0
  78. data/test/plp/test.expected.74 +472 -0
  79. data/test/plp/test.expected.75 +472 -0
  80. data/test/plp/test.expected.80 +472 -0
  81. data/test/plp/test.expected.81 +472 -0
  82. data/test/plp/test.expected.82 +472 -0
  83. data/test/plp/test.expected.83 +472 -0
  84. data/test/plp/test.expected.84 +472 -0
  85. data/test/plp/test.out +472 -0
  86. data/test/plp/test_mklang.sql +8 -0
  87. data/test/plp/test_queries.sql +273 -0
  88. data/test/plp/test_setup.sql +931 -0
  89. data/test/plp/test_setup.sql.in +931 -0
  90. data/test/plt/b.rb +34 -0
  91. data/test/plt/runtest +29 -0
  92. data/test/plt/test.expected.73 +178 -0
  93. data/test/plt/test.expected.74 +178 -0
  94. data/test/plt/test.expected.75 +178 -0
  95. data/test/plt/test.expected.80 +178 -0
  96. data/test/plt/test.expected.81 +178 -0
  97. data/test/plt/test.expected.82 +178 -0
  98. data/test/plt/test.expected.83 +164 -0
  99. data/test/plt/test.expected.84 +168 -0
  100. data/test/plt/test.out +168 -0
  101. data/test/plt/test_mklang.sql +8 -0
  102. data/test/plt/test_queries.sql +72 -0
  103. data/test/plt/test_setup.sql +252 -0
  104. data/test/plt/test_setup.sql.in +252 -0
  105. data/test/range/b.rb +45 -0
  106. data/test/range/runtest +26 -0
  107. data/test/range/test.expected.73 +396 -0
  108. data/test/range/test.expected.73.in +396 -0
  109. data/test/range/test.expected.74 +396 -0
  110. data/test/range/test.expected.74.in +396 -0
  111. data/test/range/test.expected.75 +396 -0
  112. data/test/range/test.expected.75.in +396 -0
  113. data/test/range/test.expected.80 +396 -0
  114. data/test/range/test.expected.81 +397 -0
  115. data/test/range/test.expected.82 +397 -0
  116. data/test/range/test.expected.83 +397 -0
  117. data/test/range/test.expected.84 +399 -0
  118. data/test/range/test.out +399 -0
  119. data/test/range/test_mklang.sql +8 -0
  120. data/test/range/test_queries.sql +249 -0
  121. data/test/range/test_queries.sql.in +249 -0
  122. metadata +207 -0
@@ -0,0 +1,265 @@
1
+ set client_min_messages = 'WARNING';
2
+ create table pl_box (
3
+ data box, barea float, boverlaps bool, boverleft bool, boverright bool,
4
+ bleft bool, bright bool
5
+ );
6
+ create or replace function box_val(box[]) returns setof pl_box as '
7
+ b1 = Box.new(2.5,2.5,1.0,1.0)
8
+ b2 = Box.new(2.0,2.0,2.5,2.5)
9
+ b3 = Box.new(3.0,3.0,5.0,5.0)
10
+ args[0].each do |b|
11
+ yield [b, b.area, b.overlap?(b1), b.overleft?(b2),
12
+ b.overright?(b2), b.left?(b3), b3.right?(b)]
13
+ end
14
+ ' language 'plruby';
15
+ select * from
16
+ box_val('{(2.0,2.0,0.0,0.0);(1.0,1.0,3.0,3.0);(2.5,2.5,2.5,3.5);(3.0,3.0,3.0,3.0)}'::box[]);
17
+ data | barea | boverlaps | boverleft | boverright | bleft | bright
18
+ ---------------------+-------+-----------+-----------+------------+-------+--------
19
+ (2,2),(0,0) | 4 | t | t | f | t | t
20
+ (3,3),(1,1) | 4 | t | f | f | f | f
21
+ (2.5,3.5),(2.5,2.5) | 0 | t | t | t | t | t
22
+ (3,3),(3,3) | 0 | f | f | t | f | f
23
+ (4 rows)
24
+
25
+ drop table pl_box cascade;
26
+ create table pl_box (
27
+ b box, bcmp1 int, bcmp2 int, bin bool, bcontain bool, bcenter point
28
+ );
29
+ create or replace function box_val(box[]) returns setof pl_box as '
30
+ b1 = Box.new(3.0,3.0,5.0,5.0)
31
+ b2 = Box.new(3.5,3.0,4.5,3.0)
32
+ b3 = Box.new(0,0,3,3)
33
+ args[0].each do |b|
34
+ yield [b, b <=> b1, b <=> b2, b.in?(b3), b.contain?(b3), b.center]
35
+ end
36
+ ' language 'plruby';
37
+ select * from
38
+ box_val('{(2.0,2.0,0.0,0.0);(1.0,1.0,3.0,3.0);(2.5,2.5,2.5,3.5);(3.0,3.0,3.0,3.0)}'::box[]);
39
+ b | bcmp1 | bcmp2 | bin | bcontain | bcenter
40
+ ---------------------+-------+-------+-----+----------+---------
41
+ (2,2),(0,0) | 0 | 1 | t | f | (1,1)
42
+ (3,3),(1,1) | 0 | 1 | t | f | (2,2)
43
+ (2.5,3.5),(2.5,2.5) | -1 | 0 | f | f | (2.5,3)
44
+ (3,3),(3,3) | -1 | 0 | t | f | (3,3)
45
+ (4 rows)
46
+
47
+ drop table pl_box cascade;
48
+ create table pl_box (
49
+ b0 box, b1 box, b2 box, b3 box
50
+ );
51
+ create or replace function box_val(box[]) returns setof pl_box as '
52
+ p0 = [Point.new(-10.0,0.0), Point.new(-3.0,4.0),
53
+ Point.new(5.1, 34.5), Point.new(-5.0,-12.0)]
54
+ args[0].each do |b|
55
+ p0.each do |p|
56
+ yield [b + p, b - p, b * p, b / p]
57
+ end
58
+ p0.each do |p|
59
+ yield [p + b, p - b, p * b, p / b]
60
+ end
61
+ end
62
+ ' language 'plruby';
63
+ select * from
64
+ box_val('{(2.0,2.0,0.0,0.0);(1.0,1.0,3.0,3.0);(2.5,2.5,2.5,3.5);(3.0,3.0,3.0,3.0)}'::box[]);
65
+ b0 | b1 | b2 | b3
66
+ -------------------------+---------------------------+-----------------------------+-----------------------------------------------------------------------------------
67
+ (-8,2),(-10,0) | (12,2),(10,0) | (-0,0),(-20,-20) | (0,-0),(-0.2,-0.2)
68
+ (-1,6),(-3,4) | (5,-2),(3,-4) | (-0,2),(-14,0) | (0.08,-0),(0,-0.56)
69
+ (7.1,36.5),(5.1,34.5) | (-3.1,-32.5),(-5.1,-34.5) | (0,79.2),(-58.8,0) | (0.0651176557643925,0),(0,-0.0483449262493217)
70
+ (-3,-10),(-5,-12) | (7,14),(5,12) | (14,-0),(0,-34) | (-0,0.0828402366863905),(-0.201183431952663,0)
71
+ (-8,2),(-10,0) | (12,2),(10,0) | (-0,0),(-20,-20) | (0,-0),(-0.2,-0.2)
72
+ (-1,6),(-3,4) | (5,-2),(3,-4) | (-0,2),(-14,0) | (0.08,-0),(0,-0.56)
73
+ (7.1,36.5),(5.1,34.5) | (-3.1,-32.5),(-5.1,-34.5) | (0,79.2),(-58.8,0) | (0.0651176557643925,0),(0,-0.0483449262493217)
74
+ (-3,-10),(-5,-12) | (7,14),(5,12) | (14,-0),(0,-34) | (-0,0.0828402366863905),(-0.201183431952663,0)
75
+ (-7,3),(-9,1) | (13,3),(11,1) | (-10,-10),(-30,-30) | (-0.1,-0.1),(-0.3,-0.3)
76
+ (0,7),(-2,5) | (6,-1),(4,-3) | (-7,3),(-21,1) | (0.12,-0.28),(0.04,-0.84)
77
+ (8.1,37.5),(6.1,35.5) | (-2.1,-31.5),(-4.1,-33.5) | (-29.4,118.8),(-88.2,39.6) | (0.0976764836465887,-0.0241724631246608),(0.0325588278821962,-0.0725173893739825)
78
+ (-2,-9),(-4,-11) | (8,15),(6,13) | (21,-17),(7,-51) | (-0.100591715976331,0.124260355029586),(-0.301775147928994,0.0414201183431953)
79
+ (-7,3),(-9,1) | (13,3),(11,1) | (-10,-10),(-30,-30) | (-0.1,-0.1),(-0.3,-0.3)
80
+ (0,7),(-2,5) | (6,-1),(4,-3) | (-7,3),(-21,1) | (0.12,-0.28),(0.04,-0.84)
81
+ (8.1,37.5),(6.1,35.5) | (-2.1,-31.5),(-4.1,-33.5) | (-29.4,118.8),(-88.2,39.6) | (0.0976764836465887,-0.0241724631246608),(0.0325588278821962,-0.0725173893739825)
82
+ (-2,-9),(-4,-11) | (8,15),(6,13) | (21,-17),(7,-51) | (-0.100591715976331,0.124260355029586),(-0.301775147928994,0.0414201183431953)
83
+ (-7.5,3.5),(-7.5,2.5) | (12.5,3.5),(12.5,2.5) | (-25,-25),(-25,-35) | (-0.25,-0.25),(-0.25,-0.35)
84
+ (-0.5,7.5),(-0.5,6.5) | (5.5,-0.5),(5.5,-1.5) | (-17.5,2.5),(-21.5,-0.5) | (0.26,-0.7),(0.1,-0.82)
85
+ (7.6,38),(7.6,37) | (-2.6,-31),(-2.6,-32) | (-73.5,104.1),(-108,99) | (0.109762715208919,-0.0562379754328844),(0.0813970697054906,-0.0604311578116521)
86
+ (-2.5,-8.5),(-2.5,-9.5) | (7.5,15.5),(7.5,14.5) | (29.5,-42.5),(17.5,-47.5) | (-0.251479289940828,0.103550295857988),(-0.322485207100592,0.0739644970414201)
87
+ (-7.5,3.5),(-7.5,2.5) | (12.5,3.5),(12.5,2.5) | (-25,-25),(-25,-35) | (-0.25,-0.25),(-0.25,-0.35)
88
+ (-0.5,7.5),(-0.5,6.5) | (5.5,-0.5),(5.5,-1.5) | (-17.5,2.5),(-21.5,-0.5) | (0.26,-0.7),(0.1,-0.82)
89
+ (7.6,38),(7.6,37) | (-2.6,-31),(-2.6,-32) | (-73.5,104.1),(-108,99) | (0.109762715208919,-0.0562379754328844),(0.0813970697054906,-0.0604311578116521)
90
+ (-2.5,-8.5),(-2.5,-9.5) | (7.5,15.5),(7.5,14.5) | (29.5,-42.5),(17.5,-47.5) | (-0.251479289940828,0.103550295857988),(-0.322485207100592,0.0739644970414201)
91
+ (-7,3),(-7,3) | (13,3),(13,3) | (-30,-30),(-30,-30) | (-0.3,-0.3),(-0.3,-0.3)
92
+ (0,7),(0,7) | (6,-1),(6,-1) | (-21,3),(-21,3) | (0.12,-0.84),(0.12,-0.84)
93
+ (8.1,37.5),(8.1,37.5) | (-2.1,-31.5),(-2.1,-31.5) | (-88.2,118.8),(-88.2,118.8) | (0.0976764836465887,-0.0725173893739825),(0.0976764836465887,-0.0725173893739825)
94
+ (-2,-9),(-2,-9) | (8,15),(8,15) | (21,-51),(21,-51) | (-0.301775147928994,0.124260355029586),(-0.301775147928994,0.124260355029586)
95
+ (-7,3),(-7,3) | (13,3),(13,3) | (-30,-30),(-30,-30) | (-0.3,-0.3),(-0.3,-0.3)
96
+ (0,7),(0,7) | (6,-1),(6,-1) | (-21,3),(-21,3) | (0.12,-0.84),(0.12,-0.84)
97
+ (8.1,37.5),(8.1,37.5) | (-2.1,-31.5),(-2.1,-31.5) | (-88.2,118.8),(-88.2,118.8) | (0.0976764836465887,-0.0725173893739825),(0.0976764836465887,-0.0725173893739825)
98
+ (-2,-9),(-2,-9) | (8,15),(8,15) | (21,-51),(21,-51) | (-0.301775147928994,0.124260355029586),(-0.301775147928994,0.124260355029586)
99
+ (32 rows)
100
+
101
+ drop table pl_box cascade;
102
+ create table pl_box (
103
+ p point, dp float, d0 float, c circle, w float, h float
104
+ );
105
+ create or replace function box_val(box[]) returns setof pl_box as '
106
+ p = Point.new(6,4)
107
+ args[0].each do |b|
108
+ p0 = b.center
109
+ yield [p0, Geometry::distance(p, b),Geometry::distance(p, p0),
110
+ b.to_circle, b.height, b.width]
111
+ end
112
+ ' language 'plruby';
113
+ select * from
114
+ box_val('{(2.0,2.0,0.0,0.0);(1.0,1.0,3.0,3.0);(2.5,2.5,2.5,3.5);(3.0,3.0,3.0,3.0)}'::box[]);
115
+ p | dp | d0 | c | w | h
116
+ ---------+------------------+------------------+-------------------------+---+---
117
+ (1,1) | 4.47213595499958 | 5.8309518948453 | <(1,1),1.4142135623731> | 2 | 2
118
+ (2,2) | 3.16227766016838 | 4.47213595499958 | <(2,2),1.4142135623731> | 2 | 2
119
+ (2.5,3) | 3.53553390593274 | 3.64005494464026 | <(2.5,3),0.5> | 1 | 0
120
+ (3,3) | 3.16227766016838 | 3.16227766016838 | <(3,3),0> | 0 | 0
121
+ (4 rows)
122
+
123
+ drop table pl_box cascade;
124
+ create table pl_box (
125
+ nb int, ll float, pc bool
126
+ );
127
+ create or replace function path_val(path[]) returns setof pl_box as '
128
+ args[0].each do |b|
129
+ yield [b.npoints, b.length, b.closed?]
130
+ end
131
+ ' language 'plruby';
132
+ select * from
133
+ path_val('{"[1,2,3,4]","(0,0),(3,0),(4,5),(1,6)","11,12,13,14,25,12"}'::path[]);
134
+ nb | ll | pc
135
+ ----+------------------+----
136
+ 2 | 2.82842712474619 | f
137
+ 4 | 17.3440597040594 | t
138
+ 3 | 28.9939521853426 | t
139
+ (3 rows)
140
+
141
+ drop table pl_box cascade;
142
+ create table pl_box (
143
+ p path, p0 path, p1 path
144
+ );
145
+ create or replace function path_val(path[]) returns setof pl_box as '
146
+ p0 = Point.new(6,7)
147
+ args[0].each do |b|
148
+ yield [b, b + p0, b - p0]
149
+ end
150
+ ' language 'plruby';
151
+ select * from
152
+ path_val('{"[1,2,3,4]","(0,0),(3,0),(4,5),(1,6)","11,12,13,14,25,12"}'::path[]);
153
+ p | p0 | p1
154
+ ---------------------------+------------------------------+-----------------------------------
155
+ [(1,2),(3,4)] | [(7,9),(9,11)] | [(-5,-5),(-3,-3)]
156
+ ((0,0),(3,0),(4,5),(1,6)) | ((6,7),(9,7),(10,12),(7,13)) | ((-6,-7),(-3,-7),(-2,-2),(-5,-1))
157
+ ((11,12),(13,14),(25,12)) | ((17,19),(19,21),(31,19)) | ((5,5),(7,7),(19,5))
158
+ (3 rows)
159
+
160
+ drop table pl_box cascade;
161
+ create table pl_box (
162
+ p path, p0 path, p1 path
163
+ );
164
+ create or replace function path_val(path[]) returns setof pl_box as '
165
+ p0 = Point.new(6,7)
166
+ args[0].each do |b|
167
+ yield [b, b * p0, b / p0]
168
+ end
169
+ ' language 'plruby';
170
+ select * from
171
+ path_val('{"[1,2,3,4]","(0,0),(3,0),(4,5),(1,6)","11,12,13,14,25,12"}'::path[]);
172
+ p | p0 | p1
173
+ ---------------------------+-----------------------------------+-----------------------------------------------------------------------------------------------------------------------------
174
+ [(1,2),(3,4)] | [(-8,19),(-10,45)] | [(0.235294117647059,0.0588235294117647),(0.541176470588235,0.0352941176470588)]
175
+ ((0,0),(3,0),(4,5),(1,6)) | ((0,0),(18,21),(-11,58),(-36,43)) | ((0,0),(0.211764705882353,-0.247058823529412),(0.694117647058824,0.0235294117647059),(0.564705882352941,0.341176470588235))
176
+ ((11,12),(13,14),(25,12)) | ((-18,149),(-20,175),(66,247)) | ((1.76470588235294,-0.0588235294117647),(2.07058823529412,-0.0823529411764706),(2.75294117647059,-1.21176470588235))
177
+ (3 rows)
178
+
179
+ drop table pl_box cascade;
180
+ create table pl_box (
181
+ center point, area float, radius float, diameter float
182
+ );
183
+ create or replace function circle_val(circle[]) returns setof pl_box as '
184
+ args[0].each do |b|
185
+ yield b.center, b.area, b.radius, b.diameter
186
+ end
187
+ ' language 'plruby';
188
+ select * from
189
+ circle_val('{"<(5,1),3>","<(1,2),100>","<(100,200),10>","<(100,1),115>","1,3,5"}'::circle[]);
190
+ center | area | radius | diameter
191
+ -----------+------------------+--------+----------
192
+ (5,1) | 28.2743338823081 | 3 | 6
193
+ (1,2) | 31415.9265358979 | 100 | 200
194
+ (100,200) | 314.159265358979 | 10 | 20
195
+ (100,1) | 41547.562843725 | 115 | 230
196
+ (1,3) | 78.5398163397448 | 5 | 10
197
+ (5 rows)
198
+
199
+ drop table pl_box cascade;
200
+ create table pl_box (
201
+ p circle, p0 circle, p1 circle
202
+ );
203
+ create or replace function circle_val(circle[]) returns setof pl_box as '
204
+ p0 = Point.new(6,7)
205
+ args[0].each do |b|
206
+ yield [b, b + p0, b - p0]
207
+ end
208
+ ' language 'plruby';
209
+ select * from
210
+ circle_val('{"<(5,1),3>","<(1,2),100>","<(100,200),10>","<(100,1),115>","1,3,5"}'::circle[]);
211
+ p | p0 | p1
212
+ ----------------+----------------+---------------
213
+ <(5,1),3> | <(11,8),3> | <(-1,-6),3>
214
+ <(1,2),100> | <(7,9),100> | <(-5,-5),100>
215
+ <(100,200),10> | <(106,207),10> | <(94,193),10>
216
+ <(100,1),115> | <(106,8),115> | <(94,-6),115>
217
+ <(1,3),5> | <(7,10),5> | <(-5,-4),5>
218
+ (5 rows)
219
+
220
+ drop table pl_box cascade;
221
+ create table pl_box (
222
+ p circle, p0 circle, p1 circle
223
+ );
224
+ create or replace function circle_val(circle[]) returns setof pl_box as '
225
+ p0 = Point.new(6,7)
226
+ args[0].each do |b|
227
+ yield [b, p0 * b, p0 / b ]
228
+ end
229
+ ' language 'plruby';
230
+ select * from
231
+ circle_val('{"<(5,1),3>","<(1,2),100>","<(100,200),10>","<(100,1),115>","1,3,5"}'::circle[]);
232
+ p | p0 | p1
233
+ ----------------+--------------------------------+------------------------------------------------------------
234
+ <(5,1),3> | <(23,41),27.6586333718787> | <(0.435294117647059,-0.341176470588235),0.325395686727984>
235
+ <(1,2),100> | <(-8,19),921.954445729289> | <(0.235294117647059,0.0588235294117647),10.8465228909328>
236
+ <(100,200),10> | <(-800,1900),92.1954445729289> | <(23.5294117647059,5.88235294117647),1.08465228909328>
237
+ <(100,1),115> | <(593,706),1060.24761258868> | <(7.14117647058824,-8.16470588235294),12.4735013245727>
238
+ <(1,3),5> | <(-15,25),46.0977222864644> | <(0.317647058823529,0.129411764705882),0.54232614454664>
239
+ (5 rows)
240
+
241
+ drop table pl_box cascade;
242
+ create table pl_box (
243
+ overlap bool, overleft bool, overright bool,
244
+ bleft bool, bright bool, below bool, above bool
245
+ );
246
+ create or replace function circle_val(circle, circle) returns setof pl_box as '
247
+ b0 = args[0]
248
+ b1 = args[1]
249
+ yield b0.overlap?(b1), b0.overleft?(b1), b0.overright?(b1),
250
+ b0.left?(b1), b0.right?(b1), b0.below?(b1), b0.above?(b1)
251
+ ' language 'plruby';
252
+ select * from
253
+ circle_val('<(5,1),3>'::circle, '<(1,2),100>'::circle);
254
+ overlap | overleft | overright | bleft | bright | below | above
255
+ ---------+----------+-----------+-------+--------+-------+-------
256
+ t | t | t | f | f | f | f
257
+ (1 row)
258
+
259
+ select * from
260
+ circle_val('<(100,200),10>'::circle, '<(100,1),115>'::circle);
261
+ overlap | overleft | overright | bleft | bright | below | above
262
+ ---------+----------+-----------+-------+--------+-------+-------
263
+ f | t | t | f | f | f | t
264
+ (1 row)
265
+
@@ -0,0 +1,8 @@
1
+
2
+ create function plruby_call_handler() returns language_handler
3
+ as '/home/dberger/Repositories/postgresql-plruby/src/plruby.so'
4
+ language 'C';
5
+
6
+ create trusted procedural language 'plruby'
7
+ handler plruby_call_handler
8
+ lancompiler 'PL/Ruby';
@@ -0,0 +1,194 @@
1
+ set client_min_messages = 'WARNING';
2
+
3
+ create table pl_box (
4
+ data box, barea float, boverlaps bool, boverleft bool, boverright bool,
5
+ bleft bool, bright bool
6
+ );
7
+
8
+ create or replace function box_val(box[]) returns setof pl_box as '
9
+ b1 = Box.new(2.5,2.5,1.0,1.0)
10
+ b2 = Box.new(2.0,2.0,2.5,2.5)
11
+ b3 = Box.new(3.0,3.0,5.0,5.0)
12
+ args[0].each do |b|
13
+ yield [b, b.area, b.overlap?(b1), b.overleft?(b2),
14
+ b.overright?(b2), b.left?(b3), b3.right?(b)]
15
+ end
16
+ ' language 'plruby';
17
+
18
+ select * from
19
+ box_val('{(2.0,2.0,0.0,0.0);(1.0,1.0,3.0,3.0);(2.5,2.5,2.5,3.5);(3.0,3.0,3.0,3.0)}'::box[]);
20
+
21
+ drop table pl_box cascade;
22
+
23
+ create table pl_box (
24
+ b box, bcmp1 int, bcmp2 int, bin bool, bcontain bool, bcenter point
25
+ );
26
+
27
+ create or replace function box_val(box[]) returns setof pl_box as '
28
+ b1 = Box.new(3.0,3.0,5.0,5.0)
29
+ b2 = Box.new(3.5,3.0,4.5,3.0)
30
+ b3 = Box.new(0,0,3,3)
31
+ args[0].each do |b|
32
+ yield [b, b <=> b1, b <=> b2, b.in?(b3), b.contain?(b3), b.center]
33
+ end
34
+ ' language 'plruby';
35
+
36
+ select * from
37
+ box_val('{(2.0,2.0,0.0,0.0);(1.0,1.0,3.0,3.0);(2.5,2.5,2.5,3.5);(3.0,3.0,3.0,3.0)}'::box[]);
38
+
39
+ drop table pl_box cascade;
40
+
41
+ create table pl_box (
42
+ b0 box, b1 box, b2 box, b3 box
43
+ );
44
+
45
+ create or replace function box_val(box[]) returns setof pl_box as '
46
+ p0 = [Point.new(-10.0,0.0), Point.new(-3.0,4.0),
47
+ Point.new(5.1, 34.5), Point.new(-5.0,-12.0)]
48
+ args[0].each do |b|
49
+ p0.each do |p|
50
+ yield [b + p, b - p, b * p, b / p]
51
+ end
52
+ p0.each do |p|
53
+ yield [p + b, p - b, p * b, p / b]
54
+ end
55
+ end
56
+ ' language 'plruby';
57
+
58
+ select * from
59
+ box_val('{(2.0,2.0,0.0,0.0);(1.0,1.0,3.0,3.0);(2.5,2.5,2.5,3.5);(3.0,3.0,3.0,3.0)}'::box[]);
60
+
61
+ drop table pl_box cascade;
62
+
63
+ create table pl_box (
64
+ p point, dp float, d0 float, c circle, w float, h float
65
+ );
66
+
67
+ create or replace function box_val(box[]) returns setof pl_box as '
68
+ p = Point.new(6,4)
69
+ args[0].each do |b|
70
+ p0 = b.center
71
+ yield [p0, Geometry::distance(p, b),Geometry::distance(p, p0),
72
+ b.to_circle, b.height, b.width]
73
+ end
74
+ ' language 'plruby';
75
+
76
+ select * from
77
+ box_val('{(2.0,2.0,0.0,0.0);(1.0,1.0,3.0,3.0);(2.5,2.5,2.5,3.5);(3.0,3.0,3.0,3.0)}'::box[]);
78
+
79
+ drop table pl_box cascade;
80
+
81
+ create table pl_box (
82
+ nb int, ll float, pc bool
83
+ );
84
+
85
+ create or replace function path_val(path[]) returns setof pl_box as '
86
+ args[0].each do |b|
87
+ yield [b.npoints, b.length, b.closed?]
88
+ end
89
+ ' language 'plruby';
90
+
91
+ select * from
92
+ path_val('{"[1,2,3,4]","(0,0),(3,0),(4,5),(1,6)","11,12,13,14,25,12"}'::path[]);
93
+
94
+ drop table pl_box cascade;
95
+
96
+ create table pl_box (
97
+ p path, p0 path, p1 path
98
+ );
99
+
100
+ create or replace function path_val(path[]) returns setof pl_box as '
101
+ p0 = Point.new(6,7)
102
+ args[0].each do |b|
103
+ yield [b, b + p0, b - p0]
104
+ end
105
+ ' language 'plruby';
106
+
107
+ select * from
108
+ path_val('{"[1,2,3,4]","(0,0),(3,0),(4,5),(1,6)","11,12,13,14,25,12"}'::path[]);
109
+
110
+ drop table pl_box cascade;
111
+
112
+ create table pl_box (
113
+ p path, p0 path, p1 path
114
+ );
115
+
116
+ create or replace function path_val(path[]) returns setof pl_box as '
117
+ p0 = Point.new(6,7)
118
+ args[0].each do |b|
119
+ yield [b, b * p0, b / p0]
120
+ end
121
+ ' language 'plruby';
122
+
123
+ select * from
124
+ path_val('{"[1,2,3,4]","(0,0),(3,0),(4,5),(1,6)","11,12,13,14,25,12"}'::path[]);
125
+
126
+ drop table pl_box cascade;
127
+
128
+ create table pl_box (
129
+ center point, area float, radius float, diameter float
130
+ );
131
+
132
+ create or replace function circle_val(circle[]) returns setof pl_box as '
133
+ args[0].each do |b|
134
+ yield b.center, b.area, b.radius, b.diameter
135
+ end
136
+ ' language 'plruby';
137
+
138
+ select * from
139
+ circle_val('{"<(5,1),3>","<(1,2),100>","<(100,200),10>","<(100,1),115>","1,3,5"}'::circle[]);
140
+
141
+
142
+ drop table pl_box cascade;
143
+
144
+ create table pl_box (
145
+ p circle, p0 circle, p1 circle
146
+ );
147
+
148
+ create or replace function circle_val(circle[]) returns setof pl_box as '
149
+ p0 = Point.new(6,7)
150
+ args[0].each do |b|
151
+ yield [b, b + p0, b - p0]
152
+ end
153
+ ' language 'plruby';
154
+
155
+ select * from
156
+ circle_val('{"<(5,1),3>","<(1,2),100>","<(100,200),10>","<(100,1),115>","1,3,5"}'::circle[]);
157
+
158
+ drop table pl_box cascade;
159
+
160
+ create table pl_box (
161
+ p circle, p0 circle, p1 circle
162
+ );
163
+
164
+ create or replace function circle_val(circle[]) returns setof pl_box as '
165
+ p0 = Point.new(6,7)
166
+ args[0].each do |b|
167
+ yield [b, p0 * b, p0 / b ]
168
+ end
169
+ ' language 'plruby';
170
+
171
+ select * from
172
+ circle_val('{"<(5,1),3>","<(1,2),100>","<(100,200),10>","<(100,1),115>","1,3,5"}'::circle[]);
173
+
174
+ drop table pl_box cascade;
175
+
176
+ create table pl_box (
177
+ overlap bool, overleft bool, overright bool,
178
+ bleft bool, bright bool, below bool, above bool
179
+ );
180
+
181
+ create or replace function circle_val(circle, circle) returns setof pl_box as '
182
+ b0 = args[0]
183
+ b1 = args[1]
184
+ yield b0.overlap?(b1), b0.overleft?(b1), b0.overright?(b1),
185
+ b0.left?(b1), b0.right?(b1), b0.below?(b1), b0.above?(b1)
186
+ ' language 'plruby';
187
+
188
+
189
+ select * from
190
+ circle_val('<(5,1),3>'::circle, '<(1,2),100>'::circle);
191
+
192
+ select * from
193
+ circle_val('<(100,200),10>'::circle, '<(100,1),115>'::circle);
194
+