voruby 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/LICENSE +339 -0
- data/REQUIREMENTS +4 -0
- data/Rakefile.rb +296 -0
- data/lib/voruby/adql/adql.rb +2735 -0
- data/lib/voruby/adql/ext.rb +15 -0
- data/lib/voruby/adql/loader.rb +5 -0
- data/lib/voruby/adql/operations.rb +54 -0
- data/lib/voruby/adql/parser.rb +160 -0
- data/lib/voruby/adql/transforms.rb +573 -0
- data/lib/voruby/ext.rb +17 -0
- data/lib/voruby/loader.rb +4 -0
- data/lib/voruby/misc/propertyfile.rb +36 -0
- data/lib/voruby/plastic/applications.rb +174 -0
- data/lib/voruby/plastic/constants.rb +30 -0
- data/lib/voruby/plastic/loader.rb +10 -0
- data/lib/voruby/plastic/plastic.rb +1 -0
- data/lib/voruby/resources/conesearch/conesearch.rb +9 -0
- data/lib/voruby/resources/conesearch/conesearch_v0_2.rb +55 -0
- data/lib/voruby/resources/conesearch/conesearch_v0_3.rb +50 -0
- data/lib/voruby/resources/conesearch/conesearch_v1_0.rb +72 -0
- data/lib/voruby/resources/conesearch/loader.rb +4 -0
- data/lib/voruby/resources/loader.rb +50 -0
- data/lib/voruby/resources/nodes.rb +190 -0
- data/lib/voruby/resources/openskynode/loader.rb +4 -0
- data/lib/voruby/resources/openskynode/openskynode.rb +9 -0
- data/lib/voruby/resources/openskynode/openskynode_v0_1.rb +54 -0
- data/lib/voruby/resources/sia/loader.rb +5 -0
- data/lib/voruby/resources/sia/sia.rb +9 -0
- data/lib/voruby/resources/sia/sia_v0_6.rb +90 -0
- data/lib/voruby/resources/sia/sia_v0_7.rb +89 -0
- data/lib/voruby/resources/sia/sia_v1_0.rb +122 -0
- data/lib/voruby/resources/stsci.rb +59 -0
- data/lib/voruby/resources/vodataservice/coverage_v0_2.rb +195 -0
- data/lib/voruby/resources/vodataservice/coverage_v0_3.rb +158 -0
- data/lib/voruby/resources/vodataservice/loader.rb +5 -0
- data/lib/voruby/resources/vodataservice/vodataservice.rb +9 -0
- data/lib/voruby/resources/vodataservice/vodataservice_v0_4.rb +189 -0
- data/lib/voruby/resources/vodataservice/vodataservice_v0_5.rb +163 -0
- data/lib/voruby/resources/vodataservice/vodataservice_v1_0.rb +221 -0
- data/lib/voruby/resources/voregistry/loader.rb +4 -0
- data/lib/voruby/resources/voregistry/voregistry.rb +9 -0
- data/lib/voruby/resources/voregistry/voregistry_v0_2.rb +40 -0
- data/lib/voruby/resources/voregistry/voregistry_v0_3.rb +30 -0
- data/lib/voruby/resources/voregistry/voregistry_v1_0.rb +86 -0
- data/lib/voruby/resources/voresource/loader.rb +17 -0
- data/lib/voruby/resources/voresource/voresource.rb +9 -0
- data/lib/voruby/resources/voresource/voresource_v0_10.rb +322 -0
- data/lib/voruby/resources/voresource/voresource_v0_9.rb +405 -0
- data/lib/voruby/resources/voresource/voresource_v1_0.rb +230 -0
- data/lib/voruby/services/ext.rb +11 -0
- data/lib/voruby/services/gestalt/footprint.rb +95 -0
- data/lib/voruby/services/gestalt/wcs_fixer.rb +105 -0
- data/lib/voruby/services/gestalt/wesix.rb +155 -0
- data/lib/voruby/services/loader.rb +7 -0
- data/lib/voruby/services/registry/registry.rb +53 -0
- data/lib/voruby/services/resolver/resolver.rb +35 -0
- data/lib/voruby/sesame/loader.rb +6 -0
- data/lib/voruby/sesame/sesame_v1_0.rb +64 -0
- data/lib/voruby/simple/loader.rb +6 -0
- data/lib/voruby/simple/parameters.rb +196 -0
- data/lib/voruby/simple/sap.rb +446 -0
- data/lib/voruby/spacetime/loader.rb +3 -0
- data/lib/voruby/spacetime/spacetime.rb +607 -0
- data/lib/voruby/stc/coords_v1_20.rb +900 -0
- data/lib/voruby/stc/loader.rb +55 -0
- data/lib/voruby/stc/region_v1_20.rb +274 -0
- data/lib/voruby/stc/stc_v1_20.rb +1196 -0
- data/lib/voruby/util.rb +27 -0
- data/lib/voruby/voevent/loader.rb +7 -0
- data/lib/voruby/voevent/voevent_v1_0.rb +213 -0
- data/lib/voruby/voevent/voevent_v1_1.rb +196 -0
- data/lib/voruby/votables/chandra.rb +410 -0
- data/lib/voruby/votables/cnoc.rb +393 -0
- data/lib/voruby/votables/data.rb +179 -0
- data/lib/voruby/votables/galex.rb +390 -0
- data/lib/voruby/votables/hst.rb +391 -0
- data/lib/voruby/votables/int.rb +391 -0
- data/lib/voruby/votables/libxml_parser.rb +411 -0
- data/lib/voruby/votables/libxml_votable.rb +67 -0
- data/lib/voruby/votables/loader.rb +10 -0
- data/lib/voruby/votables/meta.rb +763 -0
- data/lib/voruby/votables/misc.rb +51 -0
- data/lib/voruby/votables/nsa.rb +393 -0
- data/lib/voruby/votables/nsar3.rb +410 -0
- data/lib/voruby/votables/rexml_parser.rb +408 -0
- data/lib/voruby/votables/rexml_votable.rb +67 -0
- data/lib/voruby/votables/sdss.rb +393 -0
- data/lib/voruby/votables/transforms.rb +388 -0
- data/lib/voruby/votables/tree.rb +45 -0
- data/lib/voruby/votables/types.rb +391 -0
- data/lib/voruby/votables/votable.rb +630 -0
- data/lib/voruby/votables/xmm.rb +394 -0
- data/test/adql/test1.adql +49 -0
- data/test/adql/test2.adql +51 -0
- data/test/adql/test3.adql +81 -0
- data/test/adql/test4.adql +53 -0
- data/test/adql/test5.adql +55 -0
- data/test/adql/test6.adql +18 -0
- data/test/adql/test7.adql +48 -0
- data/test/adql/unittest.rb +1672 -0
- data/test/plastic/test.rb +44 -0
- data/test/plastic/test.vot +5385 -0
- data/test/plastic/unittest.rb +66 -0
- data/test/resources/conesearch/conesearch_v0_3.xml +31 -0
- data/test/resources/conesearch/conesearch_v1_0.xml +86 -0
- data/test/resources/conesearch/unittest_v0_3.rb +22 -0
- data/test/resources/conesearch/unittest_v1_0.rb +24 -0
- data/test/resources/openskynode/open_sky_node_v0_1.xml +32 -0
- data/test/resources/openskynode/unittest_v0_1.rb +31 -0
- data/test/resources/sia/simple_image_access_v0_7.xml +36 -0
- data/test/resources/sia/simple_image_access_v1_0.xml +122 -0
- data/test/resources/sia/unittest_v0_7.rb +24 -0
- data/test/resources/sia/unittest_v1_0.rb +29 -0
- data/test/resources/stsci.xml +336 -0
- data/test/resources/unittest_stsci.rb +25 -0
- data/test/resources/vodataservice/catalog_service_resource_v1_0.xml +128 -0
- data/test/resources/vodataservice/data_collection_resource_v0_5.xml +54 -0
- data/test/resources/vodataservice/data_collection_resource_v1_0.xml +117 -0
- data/test/resources/vodataservice/data_service_resource_v1_0.xml +115 -0
- data/test/resources/vodataservice/sky_service_resource_v0_10.xml +45 -0
- data/test/resources/vodataservice/table_service_resource_v1_0.xml +122 -0
- data/test/resources/vodataservice/tabular_sky_service_resource_v0_10.xml +60 -0
- data/test/resources/vodataservice/unittest_v0_5.rb +126 -0
- data/test/resources/vodataservice/unittest_v1_0.rb +151 -0
- data/test/resources/voregistry/authority_resource_v0_3.xml +20 -0
- data/test/resources/voregistry/authority_resource_v1_0.xml +82 -0
- data/test/resources/voregistry/registry_service_v0_3.xml +20 -0
- data/test/resources/voregistry/registry_service_v1_0.xml +107 -0
- data/test/resources/voregistry/unittest_v0_3.rb +31 -0
- data/test/resources/voregistry/unittest_v1_0.rb +34 -0
- data/test/resources/voresource/organisation_resource_v1_0.xml +90 -0
- data/test/resources/voresource/resource_organisation_v0_10.xml +22 -0
- data/test/resources/voresource/resource_service_v0_10.xml +19 -0
- data/test/resources/voresource/resource_v0_10.xml +19 -0
- data/test/resources/voresource/resource_v1_0.xml +79 -0
- data/test/resources/voresource/service_resource_v1_0.xml +91 -0
- data/test/resources/voresource/unittest_v0_10.rb +61 -0
- data/test/resources/voresource/unittest_v0_9.rb +4 -0
- data/test/resources/voresource/unittest_v1_0.rb +190 -0
- data/test/services/gestalt/unittest.rb +74 -0
- data/test/services/registry/unittest.rb +34 -0
- data/test/services/resolver/unittest.rb +38 -0
- data/test/simple/unittest.rb +46 -0
- data/test/spacetime/unittest.rb +39 -0
- data/test/stc/catalog_entry_location_v1_20.xml +112 -0
- data/test/stc/obs_data_location_v1_20.xml +108 -0
- data/test/stc/search_location_v1_20.xml +54 -0
- data/test/stc/stc_resource_profile_v1_20.xml +60 -0
- data/test/stc/unittest_v1_20.rb +620 -0
- data/test/voevent/unittest_v1_0.rb +79 -0
- data/test/voevent/unittest_v1_1.rb +70 -0
- data/test/voevent/voevent_v1_0.xml +96 -0
- data/test/voevent/voevent_v1_1.xml +76 -0
- data/test/votables/test.vot +366 -0
- data/test/votables/unittest.rb +54 -0
- metadata +256 -0
@@ -0,0 +1,1672 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'voruby/adql/parser'
|
3
|
+
|
4
|
+
include VORuby::ADQL
|
5
|
+
|
6
|
+
class ScalarExpressionTest < Test::Unit::TestCase
|
7
|
+
def setup
|
8
|
+
@exp = ScalarExpression.new('A string')
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_to_adqls
|
12
|
+
assert_equal('A string', @exp.to_adqls)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class ClosedExprTest < Test::Unit::TestCase
|
17
|
+
def setup
|
18
|
+
@exp = ClosedExpr.new(Atom.new(12.5))
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_to_adqls
|
22
|
+
assert_equal('(12.5)', @exp.to_adqls)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class BinaryOperatorTest < Test::Unit::TestCase
|
27
|
+
def test_construct
|
28
|
+
assert_raise(RuntimeError) {
|
29
|
+
op = BinaryOperator.new('^')
|
30
|
+
}
|
31
|
+
|
32
|
+
assert_nothing_raised {
|
33
|
+
op = BinaryOperator.new('+')
|
34
|
+
}
|
35
|
+
|
36
|
+
assert_nothing_raised {
|
37
|
+
op = BinaryOperator.new('//', ['//', '+', '-'])
|
38
|
+
}
|
39
|
+
|
40
|
+
assert_raise(RuntimeError){
|
41
|
+
op = BinaryOperator.new('\\', ['//', '+', '-'])
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_to_adqls
|
46
|
+
op = BinaryOperator.new('*')
|
47
|
+
assert_equal('*', op.to_adqls)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class BinaryExprTest < Test::Unit::TestCase
|
52
|
+
def test_construct
|
53
|
+
assert_nothing_raised {
|
54
|
+
expr = BinaryExpr.new('a', '+', 'b')
|
55
|
+
}
|
56
|
+
|
57
|
+
assert_raise(RuntimeError){
|
58
|
+
expr = BinaryExpr.new('a', '++', 'b')
|
59
|
+
}
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_to_adqls
|
63
|
+
expr = BinaryExpr.new('a', '+', 'b')
|
64
|
+
assert_equal('a + b', expr.to_adqls)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
class UnaryOperatorTest < Test::Unit::TestCase
|
69
|
+
def test_construct
|
70
|
+
assert_raise(RuntimeError) {
|
71
|
+
op = UnaryOperator.new('++')
|
72
|
+
}
|
73
|
+
|
74
|
+
assert_nothing_raised {
|
75
|
+
op = UnaryOperator.new('+')
|
76
|
+
}
|
77
|
+
|
78
|
+
assert_nothing_raised {
|
79
|
+
op = BinaryOperator.new('++', ['++', '--'])
|
80
|
+
}
|
81
|
+
|
82
|
+
assert_raise(RuntimeError){
|
83
|
+
op = BinaryOperator.new('==', ['++', '--'])
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_to_adqls
|
88
|
+
op = BinaryOperator.new('+')
|
89
|
+
assert_equal('+', op.to_adqls)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
class UnaryExprTest < Test::Unit::TestCase
|
94
|
+
def test_construct
|
95
|
+
assert_nothing_raised {
|
96
|
+
expr = UnaryExpr.new('-', 'a.ra')
|
97
|
+
}
|
98
|
+
|
99
|
+
assert_raise(RuntimeError){
|
100
|
+
expr = UnaryExpr.new('++', 'a.ra')
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_to_adqls
|
105
|
+
assert_equal('-a.ra', UnaryExpr.new('-', 'a.ra').to_adqls)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
class ColumnReferenceTest < Test::Unit::TestCase
|
110
|
+
def setup
|
111
|
+
@ref = ColumnReference.new('o', 'objid')
|
112
|
+
end
|
113
|
+
|
114
|
+
def test_to_adqls
|
115
|
+
assert_equal('o.objid', @ref.to_adqls)
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
class AtomTest < Test::Unit::TestCase
|
120
|
+
def setup
|
121
|
+
@real_literal = 1.0
|
122
|
+
@int_literal = 2
|
123
|
+
@string_literal = 'a'
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_construct
|
127
|
+
assert_nothing_raised {
|
128
|
+
atom = Atom.new(@real_literal, 'cm')
|
129
|
+
atom = Atom.new(@int_literal)
|
130
|
+
atom = Atom.new(@string_literal)
|
131
|
+
}
|
132
|
+
end
|
133
|
+
|
134
|
+
def test_to_adqls
|
135
|
+
assert_equal('5cm', Atom.new(5, 'cm').to_adqls)
|
136
|
+
assert_equal('100.0', Atom.new(100.0).to_adqls)
|
137
|
+
assert_equal('\'a\'', Atom.new('a').to_adqls)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
class LiteralTypeTest < Test::Unit::TestCase
|
142
|
+
def setup
|
143
|
+
real_xml = '<Literal xsi:type="realType" Value="10.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'
|
144
|
+
int_xml = '<Literal xsi:type="integerType" Value="10" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'
|
145
|
+
string_xml = '<Literal xsi:type="stringType" Value="ten" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'
|
146
|
+
@real_doc = REXML::Document.new(real_xml)
|
147
|
+
@int_doc = REXML::Document.new(int_xml)
|
148
|
+
@string_doc = REXML::Document.new(string_xml)
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_from_xml
|
152
|
+
assert_nothing_raised {
|
153
|
+
literal = LiteralType.from_xml(@real_doc.root)
|
154
|
+
literal = LiteralType.from_xml(@int_doc.root)
|
155
|
+
literal = LiteralType.from_xml(@string_doc.root)
|
156
|
+
}
|
157
|
+
end
|
158
|
+
|
159
|
+
def test_to_adql
|
160
|
+
assert_equal('10.0', LiteralType.from_xml(@real_doc.root).to_adqls)
|
161
|
+
assert_equal('10', LiteralType.from_xml(@int_doc.root).to_adqls)
|
162
|
+
assert_equal('ten', LiteralType.from_xml(@string_doc.root).to_adqls)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
class RealTypeTest < Test::Unit::TestCase
|
167
|
+
def setup
|
168
|
+
@float = RealType.new(3.14159)
|
169
|
+
end
|
170
|
+
|
171
|
+
def test_construct
|
172
|
+
assert_raise(VORuby::VOTables::VOTable::Misc::TypeException){
|
173
|
+
float = RealType.new('5')
|
174
|
+
}
|
175
|
+
end
|
176
|
+
|
177
|
+
def test_equal
|
178
|
+
assert_equal(3.14159, @float.value)
|
179
|
+
end
|
180
|
+
|
181
|
+
def test_to_adqls
|
182
|
+
assert_equal('3.14159', @float.to_adqls)
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
class IntegerTypeTest < Test::Unit::TestCase
|
187
|
+
def setup
|
188
|
+
@int = IntegerType.new(7)
|
189
|
+
end
|
190
|
+
|
191
|
+
def test_construct
|
192
|
+
assert_raise(VORuby::VOTables::VOTable::Misc::TypeException){
|
193
|
+
int = IntegerType.new(5.0)
|
194
|
+
}
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_equal
|
198
|
+
assert_equal(7, @int.value)
|
199
|
+
end
|
200
|
+
|
201
|
+
def test_to_adqls
|
202
|
+
assert_equal('7', @int.to_adqls)
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
class StringTypeTest < Test::Unit::TestCase
|
207
|
+
def setup
|
208
|
+
@string = StringType.new('test string')
|
209
|
+
end
|
210
|
+
|
211
|
+
def test_construct
|
212
|
+
assert_raise(VORuby::VOTables::VOTable::Misc::TypeException){
|
213
|
+
string = StringType.new(3.1)
|
214
|
+
}
|
215
|
+
end
|
216
|
+
|
217
|
+
def test_equal
|
218
|
+
assert_equal('test string', @string.value)
|
219
|
+
end
|
220
|
+
|
221
|
+
def test_to_adqls
|
222
|
+
assert_equal('test string', @string.to_adqls)
|
223
|
+
end
|
224
|
+
end
|
225
|
+
|
226
|
+
class SelectionOptionTest < Test::Unit::TestCase
|
227
|
+
def test_construct
|
228
|
+
assert_nothing_raised {
|
229
|
+
sel_op = SelectionOption.new('ALL')
|
230
|
+
}
|
231
|
+
|
232
|
+
assert_raise(RuntimeError){
|
233
|
+
sel_op = SelectionOption.new('NEW')
|
234
|
+
}
|
235
|
+
end
|
236
|
+
|
237
|
+
def test_to_adqls
|
238
|
+
assert_equal('DISTINCT', SelectionOption.new('DISTINCT').to_adqls)
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
242
|
+
class AllOrDistinctTest < Test::Unit::TestCase
|
243
|
+
def test_construct
|
244
|
+
assert_nothing_raised {
|
245
|
+
all_dis = AllOrDistinct.new('ALL')
|
246
|
+
all_dis = AllOrDistinct.new('NEW', ['ALL', 'DISTINCT', 'NEW'])
|
247
|
+
}
|
248
|
+
|
249
|
+
assert_raise(RuntimeError){
|
250
|
+
all_dis = AllOrDistinct.new('NEW')
|
251
|
+
}
|
252
|
+
end
|
253
|
+
|
254
|
+
def test_to_adqls
|
255
|
+
assert_equal('DISTINCT', AllOrDistinct.new('DISTINCT').to_adqls)
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
class TrigonometricFunctionNameTest < Test::Unit::TestCase
|
260
|
+
def test_construct
|
261
|
+
assert_nothing_raised {
|
262
|
+
trig = TrigonometricFunctionName.new('COT')
|
263
|
+
trig = TrigonometricFunctionName.new('ISIN', ['SIN', 'ASIN', 'ISIN'])
|
264
|
+
}
|
265
|
+
|
266
|
+
assert_raise(RuntimeError){
|
267
|
+
trig = TrigonometricFunctionName.new('ISIN')
|
268
|
+
}
|
269
|
+
end
|
270
|
+
|
271
|
+
def test_to_adqls
|
272
|
+
assert_equal('COT', TrigonometricFunctionName.new('COT').to_adqls)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
|
276
|
+
class TrigonometricFunctionTest < Test::Unit::TestCase
|
277
|
+
def setup
|
278
|
+
@arg = ColumnReference.new('o', 'objid')
|
279
|
+
end
|
280
|
+
|
281
|
+
def test_construct
|
282
|
+
assert_nothing_raised {
|
283
|
+
trig_func = TrigonometricFunction.new('ASIN', @arg)
|
284
|
+
}
|
285
|
+
|
286
|
+
assert_raise(RuntimeError){
|
287
|
+
trig_func = TrigonometricFunction.new('NEW', @arg)
|
288
|
+
}
|
289
|
+
end
|
290
|
+
|
291
|
+
def test_to_adqls
|
292
|
+
assert_equal('ASIN(o.objid)', TrigonometricFunction.new('ASIN', @arg).to_adqls)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
|
296
|
+
class MathFunctionNameTest < Test::Unit::TestCase
|
297
|
+
def test_construct
|
298
|
+
assert_nothing_raised {
|
299
|
+
math = MathFunctionName.new('ABS')
|
300
|
+
math = MathFunctionName.new('GRAD', ['ABS', 'CEILING', 'GRAD'])
|
301
|
+
}
|
302
|
+
|
303
|
+
assert_raise(RuntimeError){
|
304
|
+
math = MathFunctionName.new('GRAD')
|
305
|
+
}
|
306
|
+
end
|
307
|
+
|
308
|
+
def test_to_adqls
|
309
|
+
assert_equal('ABS', MathFunctionName.new('ABS').to_adqls)
|
310
|
+
end
|
311
|
+
end
|
312
|
+
|
313
|
+
#class MathFunctionTest < Test::Unit::TestCase
|
314
|
+
#def test_construct
|
315
|
+
# assert_nothing_raised {
|
316
|
+
# math_func = MathFunction.new('ABS')
|
317
|
+
# }
|
318
|
+
|
319
|
+
# assert_raise (RuntimeError){
|
320
|
+
# math_func = TrigonometricFunction.new('NEW')
|
321
|
+
# }
|
322
|
+
#end
|
323
|
+
|
324
|
+
#def test_to_adqls
|
325
|
+
# assert_equal('ABS', MathFunction.new('ABS').to_adqls)
|
326
|
+
#end
|
327
|
+
#end
|
328
|
+
|
329
|
+
class AggregateFunctionNameTest < Test::Unit::TestCase
|
330
|
+
def test_construct
|
331
|
+
assert_nothing_raised {
|
332
|
+
agg = AggregateFunctionName.new('MAX')
|
333
|
+
agg = AggregateFunctionName.new('DISP', ['AVG', 'DISP', 'MIN'])
|
334
|
+
}
|
335
|
+
|
336
|
+
assert_raise(RuntimeError){
|
337
|
+
agg = AggregateFunctionName.new('DISP')
|
338
|
+
}
|
339
|
+
end
|
340
|
+
|
341
|
+
def test_to_adqls
|
342
|
+
assert_equal('COUNT', AggregateFunctionName.new('COUNT').to_adqls)
|
343
|
+
end
|
344
|
+
end
|
345
|
+
|
346
|
+
# class AggregateFunctionTest < Test::Unit::TestCase
|
347
|
+
# def test_construct
|
348
|
+
# assert_nothing_raised {
|
349
|
+
# agg_func = AggregateFunction.new('MAX')
|
350
|
+
# }
|
351
|
+
|
352
|
+
# assert_raise (RuntimeError){
|
353
|
+
# agg_func = AggregateFunction.new('NEW')
|
354
|
+
# }
|
355
|
+
# end
|
356
|
+
|
357
|
+
# def test_to_adqls
|
358
|
+
# assert_equal('SUM', AggregateFunction.new('SUM').to_adqls)
|
359
|
+
# end
|
360
|
+
# end
|
361
|
+
|
362
|
+
class AliasSelectionItemTest < Test::Unit::TestCase
|
363
|
+
def setup
|
364
|
+
@alias_sel1 = AliasSelectionItem.new('o.objid', 'ObjId')
|
365
|
+
@alias_sel2 = AliasSelectionItem.new('o.objid')
|
366
|
+
end
|
367
|
+
|
368
|
+
def test_to_adqls
|
369
|
+
assert_equal('o.objid AS ObjId', @alias_sel1.to_adqls)
|
370
|
+
assert_equal('o.objid', @alias_sel2.to_adqls)
|
371
|
+
end
|
372
|
+
end
|
373
|
+
|
374
|
+
class ComparisonTest < Test::Unit::TestCase
|
375
|
+
def test_construct
|
376
|
+
assert_nothing_raised {
|
377
|
+
comp = Comparison.new('<>')
|
378
|
+
comp = Comparison.new('()', ['<>', '=', '()'])
|
379
|
+
}
|
380
|
+
|
381
|
+
assert_raise(RuntimeError){
|
382
|
+
comp = Comparison.new('!')
|
383
|
+
}
|
384
|
+
end
|
385
|
+
|
386
|
+
def test_to_adqls
|
387
|
+
assert_equal('<>', Comparison.new('<>').to_adqls)
|
388
|
+
end
|
389
|
+
end
|
390
|
+
|
391
|
+
class ArchiveTableTest < Test::Unit::TestCase
|
392
|
+
def setup
|
393
|
+
@archive1 = ArchiveTable.new('SDSS', 'PhotoPrimary', 'o')
|
394
|
+
@archive2 = ArchiveTable.new('SDSS', 'PhotoPrimary')
|
395
|
+
end
|
396
|
+
|
397
|
+
def test_to_adqls
|
398
|
+
assert_equal('SDSS:PhotoPrimary o', @archive1.to_adqls)
|
399
|
+
assert_equal('SDSS:PhotoPrimary', @archive2.to_adqls)
|
400
|
+
end
|
401
|
+
end
|
402
|
+
|
403
|
+
class IncludeTableTest < Test::Unit::TestCase
|
404
|
+
def setup
|
405
|
+
@table = IncludeTable.new('o')
|
406
|
+
end
|
407
|
+
|
408
|
+
def test_to_adqls
|
409
|
+
assert_equal('o', @table.to_adqls)
|
410
|
+
end
|
411
|
+
end
|
412
|
+
|
413
|
+
class DropTableTest < Test::Unit::TestCase
|
414
|
+
def setup
|
415
|
+
@table = DropTable.new('o')
|
416
|
+
end
|
417
|
+
|
418
|
+
def test_to_adqls
|
419
|
+
assert_equal('!o', @table.to_adqls)
|
420
|
+
end
|
421
|
+
end
|
422
|
+
|
423
|
+
class IntersectionSearchTest < Test::Unit::TestCase
|
424
|
+
def setup
|
425
|
+
@tables = [IncludeTable.new('o'),
|
426
|
+
IncludeTable.new('t'),
|
427
|
+
DropTable.new('z')]
|
428
|
+
@cond1 = XMatch.new(@tables, '>=', 0.5)
|
429
|
+
@cond2 = XMatch.new(@tables, '<=', 1.1)
|
430
|
+
end
|
431
|
+
|
432
|
+
def test_construct
|
433
|
+
assert_nothing_raised {
|
434
|
+
search = IntersectionSearch.new(@cond1, @cond2)
|
435
|
+
}
|
436
|
+
end
|
437
|
+
|
438
|
+
def test_to_adqls
|
439
|
+
search = IntersectionSearch.new(@cond1, @cond2)
|
440
|
+
assert_equal("XMATCH(o, t, !z) >= 0.5 AND XMATCH(o, t, !z) <= 1.1",
|
441
|
+
search.to_adqls)
|
442
|
+
end
|
443
|
+
end
|
444
|
+
|
445
|
+
class UnionSearchTest < Test::Unit::TestCase
|
446
|
+
def setup
|
447
|
+
@tables = [IncludeTable.new('o'),
|
448
|
+
IncludeTable.new('t'),
|
449
|
+
DropTable.new('z')]
|
450
|
+
@cond1 = XMatch.new(@tables, '>=', 0.5)
|
451
|
+
@cond2 = XMatch.new(@tables, '<=', 1.1)
|
452
|
+
end
|
453
|
+
|
454
|
+
def test_construct
|
455
|
+
assert_nothing_raised {
|
456
|
+
search = UnionSearch.new(@cond1, @cond2)
|
457
|
+
}
|
458
|
+
end
|
459
|
+
|
460
|
+
def test_to_adqls
|
461
|
+
search = UnionSearch.new(@cond1, @cond2)
|
462
|
+
assert_equal("XMATCH(o, t, !z) >= 0.5 OR XMATCH(o, t, !z) <= 1.1",
|
463
|
+
search.to_adqls)
|
464
|
+
end
|
465
|
+
end
|
466
|
+
|
467
|
+
class XMatchTest < Test::Unit::TestCase
|
468
|
+
def setup
|
469
|
+
@tables = [IncludeTable.new('o'),
|
470
|
+
IncludeTable.new('t'),
|
471
|
+
DropTable.new('z')]
|
472
|
+
end
|
473
|
+
|
474
|
+
def test_construct
|
475
|
+
assert_nothing_raised {
|
476
|
+
xmatch = XMatch.new(@tables, '<=', 3.5)
|
477
|
+
xmatch = XMatch.new(@tables,
|
478
|
+
Comparison.new('<='),
|
479
|
+
RealType.new(3.5))
|
480
|
+
}
|
481
|
+
end
|
482
|
+
|
483
|
+
def test_to_adqls
|
484
|
+
xmatch = XMatch.new(@tables, '<=', 3.5)
|
485
|
+
assert_equal("XMATCH(o, t, !z) <= 3.5", xmatch.to_adqls)
|
486
|
+
end
|
487
|
+
end
|
488
|
+
|
489
|
+
class LikePredTest < Test::Unit::TestCase
|
490
|
+
def test_construct
|
491
|
+
assert_nothing_raised {
|
492
|
+
like = LikePred.new('name', '%my_name%')
|
493
|
+
}
|
494
|
+
end
|
495
|
+
|
496
|
+
def test_to_adqls
|
497
|
+
assert_equal('name LIKE \'%my_name%\'',
|
498
|
+
LikePred.new('name', '%my_name%').to_adqls)
|
499
|
+
end
|
500
|
+
end
|
501
|
+
|
502
|
+
class NotLikePredTest < Test::Unit::TestCase
|
503
|
+
def test_construct
|
504
|
+
assert_nothing_raised {
|
505
|
+
like = NotLikePred.new('name', '%my_name%')
|
506
|
+
}
|
507
|
+
end
|
508
|
+
|
509
|
+
def test_to_adqls
|
510
|
+
assert_equal('name NOT LIKE \'%my_name%\'',
|
511
|
+
NotLikePred.new('name', '%my_name%').to_adqls)
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
515
|
+
#class ExclusiveSearchTest < Test::Unit::TestCase; end
|
516
|
+
|
517
|
+
#class SubQuerySetTest < Test::Unit::TestCase; end
|
518
|
+
|
519
|
+
class ClosedSearchTest < Test::Unit::TestCase
|
520
|
+
def setup
|
521
|
+
@tables = [IncludeTable.new('o'),
|
522
|
+
IncludeTable.new('t'),
|
523
|
+
DropTable.new('z')]
|
524
|
+
@search = XMatch.new(@tables, '<=', 3.5)
|
525
|
+
end
|
526
|
+
|
527
|
+
def test_construct
|
528
|
+
assert_nothing_raised {
|
529
|
+
cs = ClosedSearch.new(@search)
|
530
|
+
}
|
531
|
+
end
|
532
|
+
|
533
|
+
def test_to_adqls
|
534
|
+
assert_equal('(XMATCH(o, t, !z) <= 3.5)',
|
535
|
+
ClosedSearch.new(@search).to_adqls)
|
536
|
+
end
|
537
|
+
end
|
538
|
+
|
539
|
+
class ComparisonPredTest < Test::Unit::TestCase
|
540
|
+
def setup
|
541
|
+
@cond1 = ColumnReference.new('PhotoPrimary', 'objid')
|
542
|
+
@cond2 = BinaryExpr.new('a', '+', 'b')
|
543
|
+
end
|
544
|
+
|
545
|
+
def test_construct
|
546
|
+
assert_nothing_raised {
|
547
|
+
cp = ComparisonPred.new(@cond1, '<>', @cond2)
|
548
|
+
}
|
549
|
+
end
|
550
|
+
|
551
|
+
def test_to_adqls
|
552
|
+
assert_equal('PhotoPrimary.objid <> a + b',
|
553
|
+
ComparisonPred.new(@cond1, '<>', @cond2).to_adqls)
|
554
|
+
end
|
555
|
+
end
|
556
|
+
|
557
|
+
class NotBetweenPredTest < Test::Unit::TestCase
|
558
|
+
def setup
|
559
|
+
@arg1 = ColumnReference.new('PhotoPrimary', 'objid')
|
560
|
+
@arg2 = UnaryExpr.new('-', 2)
|
561
|
+
@arg3 = UnaryExpr.new('+', 3)
|
562
|
+
end
|
563
|
+
|
564
|
+
def test_construct
|
565
|
+
assert_nothing_raised {
|
566
|
+
bp = NotBetweenPred.new(@arg1, @arg2, @arg3)
|
567
|
+
}
|
568
|
+
end
|
569
|
+
|
570
|
+
def test_to_adqls
|
571
|
+
assert_equal('PhotoPrimary.objid NOT BETWEEN -2 AND +3',
|
572
|
+
NotBetweenPred.new(@arg1, @arg2, @arg3).to_adqls)
|
573
|
+
end
|
574
|
+
end
|
575
|
+
|
576
|
+
class RegionSearchTest < Test::Unit::TestCase
|
577
|
+
def test_construct
|
578
|
+
assert_nothing_raised {
|
579
|
+
rs = RegionSearch.new(Circle.new(182.5, -0.89, 8), 'overlaps')
|
580
|
+
}
|
581
|
+
end
|
582
|
+
|
583
|
+
def test_to_adqls
|
584
|
+
assert_equal('Region(\'CIRCLE J2000 182.5 -0.89 8.0\')',
|
585
|
+
RegionSearch.new(Circle.new(182.5, -0.89, 8), 'overlaps').to_adqls)
|
586
|
+
end
|
587
|
+
end
|
588
|
+
|
589
|
+
class HavingTest < Test::Unit::TestCase
|
590
|
+
def setup
|
591
|
+
@cond = RegionSearch.new(Circle.new(182.5, -0.89, 8.0), 'overlaps')
|
592
|
+
end
|
593
|
+
|
594
|
+
def test_construct
|
595
|
+
assert_nothing_raised {
|
596
|
+
h = Having.new(@cond)
|
597
|
+
}
|
598
|
+
end
|
599
|
+
|
600
|
+
def test_to_adqls
|
601
|
+
assert_equal('HAVING Region(\'CIRCLE J2000 182.5 -0.89 8.0\')',
|
602
|
+
Having.new(@cond).to_adqls)
|
603
|
+
end
|
604
|
+
|
605
|
+
def test_from_xml
|
606
|
+
xml = '<Having xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
|
607
|
+
'<Condition xsi:type="likePredType">' +
|
608
|
+
'<Arg xsi:type="columnReferenceType" Table="opt" Name="org" />' +
|
609
|
+
'<Pattern>' +
|
610
|
+
'<Literal xsi:type="stringType" Value="%esa%" />' +
|
611
|
+
'</Pattern>' +
|
612
|
+
'</Condition>' +
|
613
|
+
'</Having>'
|
614
|
+
doc = REXML::Document.new(xml)
|
615
|
+
|
616
|
+
assert_equal("HAVING opt.org LIKE '%esa%'",
|
617
|
+
Having.from_xml(doc.root).to_adqls)
|
618
|
+
end
|
619
|
+
end
|
620
|
+
|
621
|
+
class GroupByTest < Test::Unit::TestCase
|
622
|
+
def setup
|
623
|
+
@columns = [ColumnReference.new('o', 'objid'),
|
624
|
+
ColumnReference.new('o', 'type'),
|
625
|
+
ColumnReference.new('t', 'objid')]
|
626
|
+
end
|
627
|
+
|
628
|
+
def test_construct
|
629
|
+
assert_nothing_raised {
|
630
|
+
gb = GroupBy.new(@columns)
|
631
|
+
}
|
632
|
+
end
|
633
|
+
|
634
|
+
def test_to_adqls
|
635
|
+
assert_equal('GROUP BY o.objid, o.type, t.objid',
|
636
|
+
GroupBy.new(@columns).to_adqls)
|
637
|
+
end
|
638
|
+
|
639
|
+
def test_from_xml
|
640
|
+
xml = '<GroupBy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
|
641
|
+
'<Column Table="o" Name="recid"/>' +
|
642
|
+
'<Column Table="o" Name="ra"/>' +
|
643
|
+
'<Column Table="o" Name="dec"/>' +
|
644
|
+
'</GroupBy>'
|
645
|
+
doc = REXML::Document.new(xml)
|
646
|
+
|
647
|
+
assert_equal('GROUP BY o.recid, o.ra, o.dec',
|
648
|
+
GroupBy.from_xml(doc.root).to_adqls)
|
649
|
+
end
|
650
|
+
end
|
651
|
+
|
652
|
+
class WhereTest < Test::Unit::TestCase
|
653
|
+
def setup
|
654
|
+
@tables = [IncludeTable.new('o'), IncludeTable.new('t')]
|
655
|
+
@xmatch = XMatch.new(@tables, '<', 3.5)
|
656
|
+
@region = RegionSearch.new(Circle.new(182.5, -0.89, 8.5), 'overlaps')
|
657
|
+
@comp = ComparisonPred.new(
|
658
|
+
ColumnReference.new('o', 'type'),
|
659
|
+
'=',
|
660
|
+
ScalarExpression.new(3))
|
661
|
+
|
662
|
+
@cond1 = IntersectionSearch.new(@xmatch, @region)
|
663
|
+
@condition = UnionSearch.new(@cond1, @comp)
|
664
|
+
end
|
665
|
+
|
666
|
+
def test_construct
|
667
|
+
assert_nothing_raised {
|
668
|
+
w = Where.new(@condition)
|
669
|
+
}
|
670
|
+
end
|
671
|
+
|
672
|
+
def test_to_adql
|
673
|
+
assert_equal('WHERE XMATCH(o, t) < 3.5 AND Region(\'CIRCLE J2000 182.5 -0.89 8.5\') OR o.type = 3',
|
674
|
+
Where.new(@condition).to_adqls)
|
675
|
+
end
|
676
|
+
|
677
|
+
def test_from_xml
|
678
|
+
xml = '<Where xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
|
679
|
+
'<Condition xsi:type="likePredType">' +
|
680
|
+
'<Arg xsi:type="columnReferenceType" Table="opt" Name="org" />' +
|
681
|
+
'<Pattern>' +
|
682
|
+
'<Literal xsi:type="stringType" Value="%esa%" />' +
|
683
|
+
'</Pattern>' +
|
684
|
+
'</Condition>' +
|
685
|
+
'</Where>'
|
686
|
+
doc = REXML::Document.new(xml)
|
687
|
+
|
688
|
+
assert_equal("WHERE opt.org LIKE '%esa%'",
|
689
|
+
Where.from_xml(doc.root).to_adqls)
|
690
|
+
end
|
691
|
+
end
|
692
|
+
|
693
|
+
class FromTest < Test::Unit::TestCase
|
694
|
+
def setup
|
695
|
+
@tables = [ArchiveTable.new('SDSS', 'PhotoPrimary', 'o'),
|
696
|
+
ArchiveTable.new('2MASS', 'PhotoPrimary', 't')]
|
697
|
+
end
|
698
|
+
|
699
|
+
def test_construct
|
700
|
+
assert_nothing_raised {
|
701
|
+
from = From.new(@tables)
|
702
|
+
}
|
703
|
+
end
|
704
|
+
|
705
|
+
def test_to_adql
|
706
|
+
assert_equal("FROM SDSS:PhotoPrimary o, 2MASS:PhotoPrimary t",
|
707
|
+
From.new(@tables).to_adqls)
|
708
|
+
end
|
709
|
+
|
710
|
+
def test_from_xml
|
711
|
+
xml = '<From xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
|
712
|
+
'<Table xsi:type="archiveTableType" Archive="SDSS" Name="PhotoPrimary" Alias="o"/>' +
|
713
|
+
'<Table xsi:type="archiveTableType" Archive="TWOMASS" Name="PhotoPrimary" Alias="a"/>' +
|
714
|
+
'</From>'
|
715
|
+
doc = REXML::Document.new(xml)
|
716
|
+
|
717
|
+
assert_equal('FROM SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary a',
|
718
|
+
From.from_xml(doc.root).to_adqls)
|
719
|
+
end
|
720
|
+
end
|
721
|
+
|
722
|
+
class SelectionListTest < Test::Unit::TestCase
|
723
|
+
def setup
|
724
|
+
@items = [ColumnReference.new('o', 'objid'),
|
725
|
+
ColumnReference.new('o', 'ra'),
|
726
|
+
ColumnReference.new('o', 'dec')]
|
727
|
+
end
|
728
|
+
|
729
|
+
def test_construct
|
730
|
+
assert_nothing_raised {
|
731
|
+
list = SelectionList.new(@items)
|
732
|
+
}
|
733
|
+
end
|
734
|
+
|
735
|
+
def test_to_adql
|
736
|
+
assert_equal("o.objid, o.ra, o.dec",
|
737
|
+
SelectionList.new(@items).to_adqls)
|
738
|
+
end
|
739
|
+
|
740
|
+
def test_from_xml
|
741
|
+
xml = '<SelectionList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
|
742
|
+
'<Item xsi:type="columnReferenceType" Table="o" Name="recid" />' +
|
743
|
+
'<Item xsi:type="columnReferenceType" Table="o" Name="ra" />' +
|
744
|
+
'<Item xsi:type="columnReferenceType" Table="o" Name="dec" />' +
|
745
|
+
'</SelectionList>'
|
746
|
+
doc = REXML::Document.new(xml)
|
747
|
+
|
748
|
+
assert_equal('o.recid, o.ra, o.dec',
|
749
|
+
SelectionList.from_xml(doc.root).to_adqls)
|
750
|
+
end
|
751
|
+
end
|
752
|
+
|
753
|
+
class SelectionLimitTest < Test::Unit::TestCase
|
754
|
+
def test_construct
|
755
|
+
assert_nothing_raised {
|
756
|
+
limit = SelectionLimit.new(10)
|
757
|
+
}
|
758
|
+
|
759
|
+
assert_raise(RuntimeError){
|
760
|
+
limit = SelectionLimit.new(-1)
|
761
|
+
limit = SelectionLimit.new(10.2)
|
762
|
+
}
|
763
|
+
end
|
764
|
+
|
765
|
+
def test_to_adqls
|
766
|
+
assert_equal("TOP 10", SelectionLimit.new(10).to_adqls)
|
767
|
+
end
|
768
|
+
|
769
|
+
def test_from_xml
|
770
|
+
xml = '<SelectionLimit Top="10"/>'
|
771
|
+
doc = REXML::Document.new(xml)
|
772
|
+
|
773
|
+
assert_equal('TOP 10', SelectionLimit.from_xml(doc.root).to_adqls)
|
774
|
+
end
|
775
|
+
end
|
776
|
+
|
777
|
+
class IntoTest < Test::Unit::TestCase
|
778
|
+
def test_construct
|
779
|
+
assert_nothing_raised {
|
780
|
+
into = Into.new('my_table')
|
781
|
+
}
|
782
|
+
end
|
783
|
+
|
784
|
+
def test_to_adqls
|
785
|
+
assert_equal('INTO my_table', Into.new('my_table').to_adqls)
|
786
|
+
end
|
787
|
+
|
788
|
+
def test_from_xml
|
789
|
+
xml = '<InTo><TableName>my_table</TableName></InTo>'
|
790
|
+
doc = REXML::Document.new(xml)
|
791
|
+
|
792
|
+
assert_equal('INTO my_table',
|
793
|
+
Into.from_xml(doc.root).to_adqls)
|
794
|
+
end
|
795
|
+
end
|
796
|
+
|
797
|
+
class OrderDirectionTest < Test::Unit::TestCase
|
798
|
+
def test_construct
|
799
|
+
assert_nothing_raised {
|
800
|
+
dir = OrderDirection.new('ASC')
|
801
|
+
dir = OrderDirection.new('NEW', ['ASC', 'DESC', 'NEW'])
|
802
|
+
}
|
803
|
+
|
804
|
+
assert_raise(RuntimeError){
|
805
|
+
dir = OrderDirection.new('NEW')
|
806
|
+
}
|
807
|
+
end
|
808
|
+
|
809
|
+
def test_to_adqls
|
810
|
+
assert_equal('ASC', OrderDirection.new('ASC').to_adqls)
|
811
|
+
end
|
812
|
+
end
|
813
|
+
|
814
|
+
class OrderOptionTest < Test::Unit::TestCase
|
815
|
+
def test_construct
|
816
|
+
assert_nothing_raised {
|
817
|
+
order = OrderOption.new('ASC')
|
818
|
+
}
|
819
|
+
end
|
820
|
+
|
821
|
+
def test_to_adqls
|
822
|
+
assert_equal('ASC', OrderOption.new('ASC').to_adqls)
|
823
|
+
end
|
824
|
+
end
|
825
|
+
|
826
|
+
class OrderTest < Test::Unit::TestCase
|
827
|
+
def setup
|
828
|
+
@expression = ColumnReference.new('o', 'objid')
|
829
|
+
end
|
830
|
+
|
831
|
+
def test_construct
|
832
|
+
assert_nothing_raised {
|
833
|
+
order = Order.new(@expression)
|
834
|
+
}
|
835
|
+
end
|
836
|
+
|
837
|
+
def test_to_adqls
|
838
|
+
assert_equal('o.objid DESC', Order.new(@expression, 'DESC').to_adqls)
|
839
|
+
end
|
840
|
+
end
|
841
|
+
|
842
|
+
class OrderExpressionTest < Test::Unit::TestCase
|
843
|
+
def setup
|
844
|
+
@orders = [Order.new(ColumnReference.new('o', 'objid')),
|
845
|
+
Order.new(ColumnReference.new('o', 'ra'), 'DESC'),
|
846
|
+
Order.new(ColumnReference.new('o', 'dec'), 'ASC')]
|
847
|
+
end
|
848
|
+
|
849
|
+
def test_construct
|
850
|
+
assert_nothing_raised {
|
851
|
+
ord_expr = OrderExpression.new(@orders)
|
852
|
+
}
|
853
|
+
end
|
854
|
+
|
855
|
+
def test_to_adqls
|
856
|
+
assert_equal('ORDER BY o.objid, o.ra DESC, o.dec ASC',
|
857
|
+
OrderExpression.new(@orders).to_adqls)
|
858
|
+
end
|
859
|
+
end
|
860
|
+
|
861
|
+
class InclusiveSearchTest < Test::Unit::TestCase
|
862
|
+
def setup
|
863
|
+
@expression = ColumnReference.new('o', 'objid')
|
864
|
+
@set = ConstantListSet.new(['IBM', 'Microsoft', 'Apple'])
|
865
|
+
end
|
866
|
+
|
867
|
+
def test_construct
|
868
|
+
assert_nothing_raised {
|
869
|
+
isearch = InclusiveSearch.new(@expression, @set)
|
870
|
+
}
|
871
|
+
end
|
872
|
+
|
873
|
+
def test_to_adqls
|
874
|
+
assert_equal("o.objid IN (\"IBM\", \"Microsoft\", \"Apple\")",
|
875
|
+
InclusiveSearch.new(@expression, @set).to_adqls)
|
876
|
+
end
|
877
|
+
end
|
878
|
+
|
879
|
+
class SelectTest < Test::Unit::TestCase
|
880
|
+
def setup
|
881
|
+
@allow = SelectionOption.new('DISTINCT')
|
882
|
+
|
883
|
+
@restrict = SelectionLimit.new(10)
|
884
|
+
|
885
|
+
@columns = [ColumnReference.new('o', 'objid'),
|
886
|
+
ColumnReference.new('o', 'ra'),
|
887
|
+
ColumnReference.new('o', 'dec'),
|
888
|
+
ColumnReference.new('o', 'type'),
|
889
|
+
ColumnReference.new('t', 'objid'),
|
890
|
+
ColumnReference.new('t', 'ra'),
|
891
|
+
ColumnReference.new('t', 'dec'),
|
892
|
+
ColumnReference.new('t', 'j_m'),
|
893
|
+
ColumnReference.new('o', 'i')]
|
894
|
+
@sel_list = SelectionList.new(@columns)
|
895
|
+
|
896
|
+
@into = Into.new('myTable')
|
897
|
+
|
898
|
+
@from_list = [ArchiveTable.new('SDSS', 'PhotoPrimary', 'o'),
|
899
|
+
ArchiveTable.new('TWOMASS', 'PhotoPrimary', 't')]
|
900
|
+
@from = From.new(@from_list)
|
901
|
+
|
902
|
+
@xmatch_tables = [IncludeTable.new('o'),
|
903
|
+
IncludeTable.new('t')]
|
904
|
+
@xmatch = XMatch.new(@xmatch_tables, '<', 3.5)
|
905
|
+
@region = RegionSearch.new(Circle.new(182.5, -0.89, 8), 'overlaps')
|
906
|
+
@xmatchregion = IntersectionSearch.new(@xmatch, @region)
|
907
|
+
|
908
|
+
@otype = ComparisonPred.new(
|
909
|
+
ColumnReference.new('o', 'type'),
|
910
|
+
'=',
|
911
|
+
Atom.new(3))
|
912
|
+
@xmatchregion_otype = IntersectionSearch.new(@xmatchregion, @otype)
|
913
|
+
|
914
|
+
@oi = ComparisonPred.new(
|
915
|
+
ColumnReference.new('o', 'i'),
|
916
|
+
'<',
|
917
|
+
Atom.new(21))
|
918
|
+
@xmatchregion_otype_oi =
|
919
|
+
IntersectionSearch.new(@xmatchregion_otype, @oi)
|
920
|
+
|
921
|
+
@tjm = ComparisonPred.new(
|
922
|
+
ColumnReference.new('t', 'j_m'),
|
923
|
+
'<',
|
924
|
+
Atom.new(18))
|
925
|
+
@xmatchregion_otype_oi_tjm =
|
926
|
+
IntersectionSearch.new(@xmatchregion_otype_oi, @tjm)
|
927
|
+
|
928
|
+
@oitjmdiff = ComparisonPred.new(
|
929
|
+
ClosedExpr.new(
|
930
|
+
BinaryExpr.new(
|
931
|
+
ColumnReference.new('o', 'i'),
|
932
|
+
'-',
|
933
|
+
ColumnReference.new('t', 'j_m')
|
934
|
+
)
|
935
|
+
),
|
936
|
+
'>',
|
937
|
+
Atom.new(2))
|
938
|
+
|
939
|
+
@conditions = IntersectionSearch.new(
|
940
|
+
@xmatchregion_otype_oi_tjm,
|
941
|
+
@oitjmdiff)
|
942
|
+
@where = Where.new(@conditions)
|
943
|
+
|
944
|
+
@group_by = GroupBy.new(
|
945
|
+
[ColumnReference.new('o', 'ra'),
|
946
|
+
ColumnReference.new('o', 'dec')])
|
947
|
+
|
948
|
+
@having = Having.new(
|
949
|
+
ComparisonPred.new(
|
950
|
+
ColumnReference.new('o', 'objid'),
|
951
|
+
'=',
|
952
|
+
Atom.new('1234')
|
953
|
+
)
|
954
|
+
)
|
955
|
+
|
956
|
+
@order_by = OrderExpression.new(
|
957
|
+
[Order.new(ColumnReference.new('o', 'objid')),
|
958
|
+
Order.new(ColumnReference.new('o', 'ra'), 'DESC')]
|
959
|
+
)
|
960
|
+
end
|
961
|
+
|
962
|
+
def test_construct
|
963
|
+
assert_nothing_raised {
|
964
|
+
select = Select.new(@sel_list)
|
965
|
+
select = Select.new(@sel_list, @allow)
|
966
|
+
select = Select.new(@sel_list, @allow, @restrict)
|
967
|
+
select = Select.new(@sel_list, @allow, @restrict, @into)
|
968
|
+
select = Select.new(@sel_list, @allow, @restrict, @into, @from)
|
969
|
+
select = Select.new(@sel_list, nil, nil, nil,
|
970
|
+
@from, @where)
|
971
|
+
select = Select.new(@sel_list, nil, nil, nil,
|
972
|
+
@from, @where, @group_by)
|
973
|
+
select = Select.new(@sel_list, nil, nil, nil,
|
974
|
+
@from, @where, @group_by, @having, @order_by)
|
975
|
+
}
|
976
|
+
end
|
977
|
+
|
978
|
+
def test_to_adqls
|
979
|
+
adqls = 'SELECT o.objid, o.ra, o.dec, o.type, t.objid, t.ra, t.dec, t.j_m, o.i'
|
980
|
+
assert_equal(adqls, Select.new(@sel_list).to_adqls)
|
981
|
+
|
982
|
+
adqls =
|
983
|
+
'SELECT DISTINCT ' +
|
984
|
+
'o.objid, o.ra, o.dec, o.type, t.objid, t.ra, t.dec, t.j_m, o.i'
|
985
|
+
assert_equal(adqls, Select.new(@sel_list, @allow).to_adqls)
|
986
|
+
|
987
|
+
adqls = 'SELECT DISTINCT TOP 10 o.objid, o.ra, o.dec, o.type, t.objid, t.ra, t.dec, t.j_m, o.i'
|
988
|
+
assert_equal(adqls, Select.new(@sel_list, @allow, @restrict).to_adqls)
|
989
|
+
|
990
|
+
adqls =
|
991
|
+
'SELECT DISTINCT TOP 10 ' +
|
992
|
+
'o.objid, o.ra, o.dec, o.type, t.objid, t.ra, t.dec, t.j_m, o.i ' +
|
993
|
+
'INTO myTable'
|
994
|
+
assert_equal(adqls, Select.new(@sel_list, @allow, @restrict, @into).to_adqls)
|
995
|
+
|
996
|
+
adqls =
|
997
|
+
'SELECT DISTINCT TOP 10 ' +
|
998
|
+
'o.objid, o.ra, o.dec, o.type, t.objid, t.ra, t.dec, t.j_m, o.i ' +
|
999
|
+
'INTO myTable ' +
|
1000
|
+
'FROM SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t'
|
1001
|
+
assert_equal(adqls, Select.new(@sel_list, @allow, @restrict, @into, @from).to_adqls)
|
1002
|
+
|
1003
|
+
adqls =
|
1004
|
+
'SELECT ' +
|
1005
|
+
'o.objid, o.ra, o.dec, o.type, t.objid, t.ra, t.dec, t.j_m, o.i ' +
|
1006
|
+
'FROM SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t ' +
|
1007
|
+
'WHERE ' +
|
1008
|
+
'XMATCH(o, t) < 3.5 AND ' +
|
1009
|
+
'Region(\'CIRCLE J2000 182.5 -0.89 8.0\') AND ' +
|
1010
|
+
'o.type = 3 AND ' +
|
1011
|
+
'o.i < 21 AND ' +
|
1012
|
+
't.j_m < 18 AND ' +
|
1013
|
+
'(o.i - t.j_m) > 2 ' +
|
1014
|
+
'GROUP BY o.ra, o.dec ' +
|
1015
|
+
'HAVING o.objid = \'1234\' ' +
|
1016
|
+
'ORDER BY o.objid, o.ra DESC'
|
1017
|
+
assert_equal(adqls,
|
1018
|
+
Select.new(@sel_list, nil, nil, nil, @from,
|
1019
|
+
@where, @group_by, @having, @order_by).to_adqls)
|
1020
|
+
end
|
1021
|
+
end
|
1022
|
+
|
1023
|
+
class UserDefinedFunctionTest < Test::Unit::TestCase
|
1024
|
+
def setup
|
1025
|
+
@params = [ColumnReference.new('o', 'ra'), ColumnReference.new('o', 'dec')]
|
1026
|
+
end
|
1027
|
+
|
1028
|
+
def test_construct
|
1029
|
+
assert_nothing_raised {
|
1030
|
+
udf = UserDefinedFunction.new('my_func', @params)
|
1031
|
+
}
|
1032
|
+
end
|
1033
|
+
|
1034
|
+
def test_to_adqls
|
1035
|
+
assert_equal('my_func(o.ra, o.dec)',
|
1036
|
+
UserDefinedFunction.new('my_func', @params).to_adqls)
|
1037
|
+
end
|
1038
|
+
end
|
1039
|
+
|
1040
|
+
class JointTableQualifierTest < Test::Unit::TestCase
|
1041
|
+
def test_construct
|
1042
|
+
assert_nothing_raised {
|
1043
|
+
qual = JointTableQualifier.new('INNER')
|
1044
|
+
qual = JointTableQualifier.new('FAKE', ['INNER', 'FAKE', 'CROSS'])
|
1045
|
+
}
|
1046
|
+
|
1047
|
+
assert_raise(RuntimeError){
|
1048
|
+
qual = JointTableQualifier.new('FAKE')
|
1049
|
+
}
|
1050
|
+
end
|
1051
|
+
|
1052
|
+
def test_to_adqls
|
1053
|
+
assert_equal('INNER', JointTableQualifier.new('INNER').to_adqls)
|
1054
|
+
end
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
class JoinTableTest < Test::Unit::TestCase
|
1058
|
+
def setup
|
1059
|
+
@tables = ArrayOfFromTable.new(
|
1060
|
+
[ArchiveTable.new('SDSS', 'PhotoPrimary', 'o'),
|
1061
|
+
ArchiveTable.new('TWOMASS', 'PhotoPrimary', 't')]
|
1062
|
+
)
|
1063
|
+
@comp = ComparisonPred.new(
|
1064
|
+
ColumnReference.new('o', 'objid'),
|
1065
|
+
'=',
|
1066
|
+
ColumnReference.new('t', 'objid')
|
1067
|
+
)
|
1068
|
+
end
|
1069
|
+
|
1070
|
+
def test_construct
|
1071
|
+
assert_nothing_raised {
|
1072
|
+
jt = JoinTable.new('INNER', @tables, @comp)
|
1073
|
+
}
|
1074
|
+
end
|
1075
|
+
|
1076
|
+
def test_to_adqls
|
1077
|
+
assert_equal('INNER SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t ON o.objid = t.objid',
|
1078
|
+
JoinTable.new('INNER', @tables, @comp).to_adqls)
|
1079
|
+
end
|
1080
|
+
end
|
1081
|
+
|
1082
|
+
class ArrayOfFromTableTest < Test::Unit::TestCase
|
1083
|
+
def setup
|
1084
|
+
@froms =
|
1085
|
+
[ArchiveTable.new('SDSS', 'PhotoPrimary', 'o'),
|
1086
|
+
ArchiveTable.new('TWOMASS', 'PhotoPrimary', 't')]
|
1087
|
+
end
|
1088
|
+
|
1089
|
+
def test_construct
|
1090
|
+
assert_nothing_raised {
|
1091
|
+
aoft = ArrayOfFromTable.new(@froms)
|
1092
|
+
}
|
1093
|
+
end
|
1094
|
+
|
1095
|
+
def test_to_adqls
|
1096
|
+
assert_equal('SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t',
|
1097
|
+
ArrayOfFromTable.new(@froms).to_adqls)
|
1098
|
+
end
|
1099
|
+
end
|
1100
|
+
|
1101
|
+
class ArgTest < Test::Unit::TestCase
|
1102
|
+
def setup
|
1103
|
+
xml1 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="columnReferenceType" Table="o" Name="objid" xpathName="description" />'
|
1104
|
+
xml2 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="atomType">' +
|
1105
|
+
'<Literal xsi:type="stringType" Value="CDS" />' +
|
1106
|
+
'</Arg>'
|
1107
|
+
xml3 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Oper="-" xsi:type="binaryExprType">' +
|
1108
|
+
'<Arg Table="opt" Name="R" xsi:type="columnReferenceType"/>' +
|
1109
|
+
'<Arg Table="opt" Name="B" xsi:type="columnReferenceType"/>' +
|
1110
|
+
'</Arg>'
|
1111
|
+
xml4 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Oper="-" xsi:type="unaryExprType">' +
|
1112
|
+
'<Arg Table="opt" Name="R" xsi:type="columnReferenceType"/>' +
|
1113
|
+
'</Arg>'
|
1114
|
+
xml5 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="closedExprType">' +
|
1115
|
+
'<Arg Table="opt" Name="R" xsi:type="columnReferenceType"/>' +
|
1116
|
+
'</Arg>'
|
1117
|
+
xml6 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="trigonometricFunctionType" Name="SIN">' +
|
1118
|
+
'<Allow Option="DISTINCT"/>' +
|
1119
|
+
'<Arg Table="opt" Name="R" xsi:type="columnReferenceType"/>' +
|
1120
|
+
'</Arg>'
|
1121
|
+
xml7 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="mathFunctionType" Name="ABS">' +
|
1122
|
+
'<Allow Option="ALL"/>' +
|
1123
|
+
'<Arg Table="opt" Name="R" xsi:type="columnReferenceType"/>' +
|
1124
|
+
'</Arg>'
|
1125
|
+
xml8 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="aggregateFunctionType" Name="AVG">' +
|
1126
|
+
'<Arg Table="opt" Name="R" xsi:type="columnReferenceType"/>' +
|
1127
|
+
'</Arg>'
|
1128
|
+
xml9 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="userDefinedFunctionType">' +
|
1129
|
+
'<Name>MyFunc</Name>' +
|
1130
|
+
'<Params Table="opt" Name="R" xsi:type="columnReferenceType"/>' +
|
1131
|
+
'</Arg>'
|
1132
|
+
xml10 = '<Arg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="aliasSelectionItemType" As="myCol">' +
|
1133
|
+
'<Expression Table="opt" Name="R" xsi:type="columnReferenceType"/>' +
|
1134
|
+
'</Arg>'
|
1135
|
+
@doc1 = REXML::Document.new(xml1)
|
1136
|
+
@doc2 = REXML::Document.new(xml2)
|
1137
|
+
@doc3 = REXML::Document.new(xml3)
|
1138
|
+
@doc4 = REXML::Document.new(xml4)
|
1139
|
+
@doc5 = REXML::Document.new(xml5)
|
1140
|
+
@doc6 = REXML::Document.new(xml6)
|
1141
|
+
@doc7 = REXML::Document.new(xml7)
|
1142
|
+
@doc8 = REXML::Document.new(xml8)
|
1143
|
+
@doc9 = REXML::Document.new(xml9)
|
1144
|
+
@doc10 = REXML::Document.new(xml10)
|
1145
|
+
end
|
1146
|
+
|
1147
|
+
def test_from_xml
|
1148
|
+
assert_nothing_raised {
|
1149
|
+
arg = Arg.from_xml(@doc1.root)
|
1150
|
+
arg = Arg.from_xml(@doc2.root)
|
1151
|
+
arg = Arg.from_xml(@doc3.root)
|
1152
|
+
arg = Arg.from_xml(@doc4.root)
|
1153
|
+
arg = Arg.from_xml(@doc5.root)
|
1154
|
+
arg = Arg.from_xml(@doc6.root)
|
1155
|
+
arg = Arg.from_xml(@doc7.root)
|
1156
|
+
arg = Arg.from_xml(@doc8.root)
|
1157
|
+
arg = Arg.from_xml(@doc9.root)
|
1158
|
+
arg = Arg.from_xml(@doc10.root)
|
1159
|
+
}
|
1160
|
+
end
|
1161
|
+
|
1162
|
+
def test_to_adql
|
1163
|
+
assert_equal('o.objid', Arg.from_xml(@doc1.root).to_adqls)
|
1164
|
+
assert_equal("'CDS'", Arg.from_xml(@doc2.root).to_adqls)
|
1165
|
+
assert_equal('opt.R - opt.B', Arg.from_xml(@doc3.root).to_adqls)
|
1166
|
+
assert_equal('-opt.R', Arg.from_xml(@doc4.root).to_adqls)
|
1167
|
+
assert_equal('(opt.R)', Arg.from_xml(@doc5.root).to_adqls)
|
1168
|
+
assert_equal('SIN(DISTINCT opt.R)', Arg.from_xml(@doc6.root).to_adqls)
|
1169
|
+
assert_equal('ABS(ALL opt.R)', Arg.from_xml(@doc7.root).to_adqls)
|
1170
|
+
assert_equal('AVG(opt.R)', Arg.from_xml(@doc8.root).to_adqls)
|
1171
|
+
assert_equal('MyFunc(opt.R)', Arg.from_xml(@doc9.root).to_adqls)
|
1172
|
+
assert_equal('opt.R AS myCol', Arg.from_xml(@doc10.root).to_adqls)
|
1173
|
+
end
|
1174
|
+
end
|
1175
|
+
|
1176
|
+
class LiteralTest < Test::Unit::TestCase
|
1177
|
+
def setup
|
1178
|
+
@doc1 = REXML::Document.new('<Literal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Value="10.0" xsi:type="realType"/>')
|
1179
|
+
@doc2 = REXML::Document.new('<Literal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Value="10" xsi:type="integerType"/>')
|
1180
|
+
@doc3 = REXML::Document.new('<Literal xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Value="ten" xsi:type="stringType"/>')
|
1181
|
+
end
|
1182
|
+
|
1183
|
+
def test_from_xml
|
1184
|
+
assert_nothing_raised {
|
1185
|
+
lit = LiteralType.from_xml(@doc1.root)
|
1186
|
+
lit = LiteralType.from_xml(@doc2.root)
|
1187
|
+
lit = LiteralType.from_xml(@doc3.root)
|
1188
|
+
}
|
1189
|
+
end
|
1190
|
+
|
1191
|
+
def test_to_adql
|
1192
|
+
assert_equal("10.0", LiteralType.from_xml(@doc1.root).to_adqls)
|
1193
|
+
assert_equal("10", LiteralType.from_xml(@doc2.root).to_adqls)
|
1194
|
+
assert_equal('ten', LiteralType.from_xml(@doc3.root).to_adqls)
|
1195
|
+
end
|
1196
|
+
end
|
1197
|
+
|
1198
|
+
class UnitTest < Test::Unit::TestCase
|
1199
|
+
def setup
|
1200
|
+
@doc = REXML::Document.new('<Unit>cm</Unit>')
|
1201
|
+
end
|
1202
|
+
|
1203
|
+
def text_from_xml
|
1204
|
+
assert_nothing_raised {
|
1205
|
+
unit = Unit.from_xml(@doc.root)
|
1206
|
+
}
|
1207
|
+
end
|
1208
|
+
|
1209
|
+
def test_to_adqls
|
1210
|
+
assert_equal('cm', Unit.from_xml(@doc.root).to_adqls)
|
1211
|
+
end
|
1212
|
+
end
|
1213
|
+
|
1214
|
+
class AllowTest < Test::Unit::TestCase
|
1215
|
+
def setup
|
1216
|
+
@doc = REXML::Document.new('<Allow xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="selectionOptionType" Option="DISTINCT"/>')
|
1217
|
+
end
|
1218
|
+
|
1219
|
+
def test_from_xml
|
1220
|
+
assert_nothing_raised {
|
1221
|
+
allow = Allow.from_xml(@doc.root)
|
1222
|
+
}
|
1223
|
+
end
|
1224
|
+
|
1225
|
+
def test_to_adqls
|
1226
|
+
assert_equal('DISTINCT', Allow.from_xml(@doc.root).to_adqls)
|
1227
|
+
end
|
1228
|
+
end
|
1229
|
+
|
1230
|
+
class ExpressionTest < Test::Unit::TestCase
|
1231
|
+
def setup
|
1232
|
+
@doc = REXML::Document.new('<Expression xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Table="opt" Name="R" xsi:type="columnReferenceType"/>')
|
1233
|
+
end
|
1234
|
+
|
1235
|
+
def test_from_xml
|
1236
|
+
assert_nothing_raised {
|
1237
|
+
expr = Expression.from_xml(@doc.root)
|
1238
|
+
}
|
1239
|
+
end
|
1240
|
+
|
1241
|
+
def test_to_adqls
|
1242
|
+
assert_equal('opt.R', Expression.from_xml(@doc.root).to_adqls)
|
1243
|
+
end
|
1244
|
+
end
|
1245
|
+
|
1246
|
+
class ConditionTest < Test::Unit::TestCase
|
1247
|
+
def setup
|
1248
|
+
@xml1 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="likePredType">' +
|
1249
|
+
'<Arg xsi:type="columnReferenceType" Table="opt" Name="org" />' +
|
1250
|
+
'<Pattern>' +
|
1251
|
+
'<Literal xsi:type="stringType" Value="%esa%" />' +
|
1252
|
+
'</Pattern>' +
|
1253
|
+
'</Condition>'
|
1254
|
+
@doc1 = REXML::Document.new(@xml1)
|
1255
|
+
|
1256
|
+
@xml2 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="notLikePredType">' +
|
1257
|
+
'<Arg xsi:type="columnReferenceType" Table="opt" Name="org" />' +
|
1258
|
+
'<Pattern>' +
|
1259
|
+
'<Literal xsi:type="stringType" Value="%esa%" />' +
|
1260
|
+
'</Pattern>' +
|
1261
|
+
'</Condition>'
|
1262
|
+
@doc2 = REXML::Document.new(@xml2)
|
1263
|
+
|
1264
|
+
@xml3 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="closedSearchType">' +
|
1265
|
+
@xml1 +
|
1266
|
+
'</Condition>'
|
1267
|
+
@doc3 = REXML::Document.new(@xml3)
|
1268
|
+
|
1269
|
+
@xml4 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="comparisonPredType" Comparison="<>">' +
|
1270
|
+
'<Arg xsi:type="columnReferenceType" Table="opt" Name="publisher" />' +
|
1271
|
+
'<Arg xsi:type="atomType">' +
|
1272
|
+
'<Literal xsi:type="stringType" Value="CDS" />' +
|
1273
|
+
'</Arg>' +
|
1274
|
+
'</Condition>'
|
1275
|
+
@doc4 = REXML::Document.new(@xml4)
|
1276
|
+
|
1277
|
+
@xml5 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="betweenPredType">' +
|
1278
|
+
'<Arg xsi:type="columnReferenceType" Table="opt" Name="R" />' +
|
1279
|
+
'<Arg xsi:type="atomType">' +
|
1280
|
+
'<Literal xsi:type="realType" Value="1.2" />' +
|
1281
|
+
'</Arg>' +
|
1282
|
+
'<Arg xsi:type="atomType">' +
|
1283
|
+
'<Literal xsi:type="realType" Value="1.6" />' +
|
1284
|
+
'</Arg>' +
|
1285
|
+
'</Condition>'
|
1286
|
+
@doc5 = REXML::Document.new(@xml5)
|
1287
|
+
|
1288
|
+
@xml6 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="notBetweenPredType">' +
|
1289
|
+
'<Arg xsi:type="columnReferenceType" Table="opt" Name="R" />' +
|
1290
|
+
'<Arg xsi:type="atomType">' +
|
1291
|
+
'<Literal xsi:type="realType" Value="1.2" />' +
|
1292
|
+
'</Arg>' +
|
1293
|
+
'<Arg xsi:type="atomType">' +
|
1294
|
+
'<Literal xsi:type="realType" Value="1.6" />' +
|
1295
|
+
'</Arg>' +
|
1296
|
+
'</Condition>'
|
1297
|
+
@doc6 = REXML::Document.new(@xml6)
|
1298
|
+
|
1299
|
+
@xml7 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="intersectionSearchType">' +
|
1300
|
+
@xml4 +
|
1301
|
+
@xml5 +
|
1302
|
+
'</Condition>'
|
1303
|
+
@doc7 = REXML::Document.new(@xml7)
|
1304
|
+
|
1305
|
+
@xml8 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="unionSearchType">' +
|
1306
|
+
@xml4 +
|
1307
|
+
@xml5 +
|
1308
|
+
'</Condition>'
|
1309
|
+
@doc8 = REXML::Document.new(@xml8)
|
1310
|
+
|
1311
|
+
@xml9 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xMatchType">' +
|
1312
|
+
'<Table xsi:type="includeTableType" Name="opt"/>' +
|
1313
|
+
'<Table xsi:type="includeTableType" Name="apt"/>' +
|
1314
|
+
'<Table xsi:type="dropTableType" Name="drop_me"/>' +
|
1315
|
+
'<Nature xsi:type="comparisonType" Comparison="<"/>' +
|
1316
|
+
'<Sigma xsi:type="realType" Value="0.5"/>' +
|
1317
|
+
'</Condition>'
|
1318
|
+
@doc9 = REXML::Document.new(@xml9)
|
1319
|
+
|
1320
|
+
@xml10 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="regionSearchType">' +
|
1321
|
+
'<Region xmlns:q1="http://www.ivoa.net/xml/STC/STCregion/v1.10" xsi:type="q1:circleType" unit="deg">' +
|
1322
|
+
'<q1:Center>181.3 -0.76</q1:Center>' +
|
1323
|
+
'<q1:Radius>6.5</q1:Radius>' +
|
1324
|
+
'</Region>' +
|
1325
|
+
'</Condition>'
|
1326
|
+
@doc10 = REXML::Document.new(@xml10)
|
1327
|
+
|
1328
|
+
@xml11 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="inverseSearchType">' +
|
1329
|
+
@xml4 +
|
1330
|
+
'</Condition>'
|
1331
|
+
@doc11 = REXML::Document.new(@xml11)
|
1332
|
+
|
1333
|
+
@xml12 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="inclusiveSearchType">' +
|
1334
|
+
'<Expression xsi:type="columnReferenceType" Table="opt" Name="R" />' +
|
1335
|
+
'<Set xsi:type="subQuerySetType">' +
|
1336
|
+
'<Select>' +
|
1337
|
+
'<SelectionList>' +
|
1338
|
+
'<Item xsi:type="columnReferenceType" Table="opt" Name="R" />' +
|
1339
|
+
'<Item xsi:type="columnReferenceType" Table="opt" Name="V" />' +
|
1340
|
+
'<Item xsi:type="columnReferenceType" Table="opt" Name="ra" />' +
|
1341
|
+
'<Item xsi:type="columnReferenceType" Table="opt" Name="dec" />' +
|
1342
|
+
'</SelectionList>' +
|
1343
|
+
'</Select>' +
|
1344
|
+
'</Set>' +
|
1345
|
+
'</Condition>'
|
1346
|
+
@doc12 = REXML::Document.new(@xml12)
|
1347
|
+
|
1348
|
+
@xml13 = '<Condition xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="exclusiveSearchType">' +
|
1349
|
+
'<Expression xsi:type="columnReferenceType" Table="opt" Name="R" />' +
|
1350
|
+
'<Set xsi:type="subQuerySetType">' +
|
1351
|
+
'<Select>' +
|
1352
|
+
'<SelectionList>' +
|
1353
|
+
'<Item xsi:type="columnReferenceType" Table="opt" Name="R" />' +
|
1354
|
+
'<Item xsi:type="columnReferenceType" Table="opt" Name="V" />' +
|
1355
|
+
'<Item xsi:type="columnReferenceType" Table="opt" Name="ra" />' +
|
1356
|
+
'<Item xsi:type="columnReferenceType" Table="opt" Name="dec" />' +
|
1357
|
+
'</SelectionList>' +
|
1358
|
+
'</Select>' +
|
1359
|
+
'</Set>' +
|
1360
|
+
'</Condition>'
|
1361
|
+
@doc13 = REXML::Document.new(@xml13)
|
1362
|
+
end
|
1363
|
+
|
1364
|
+
def test_from_xml
|
1365
|
+
assert_nothing_raised {
|
1366
|
+
cond = Condition.from_xml(@doc1.root)
|
1367
|
+
cond = Condition.from_xml(@doc2.root)
|
1368
|
+
cond = Condition.from_xml(@doc3.root)
|
1369
|
+
cond = Condition.from_xml(@doc4.root)
|
1370
|
+
cond = Condition.from_xml(@doc5.root)
|
1371
|
+
cond = Condition.from_xml(@doc6.root)
|
1372
|
+
cond = Condition.from_xml(@doc7.root)
|
1373
|
+
cond = Condition.from_xml(@doc8.root)
|
1374
|
+
cond = Condition.from_xml(@doc9.root)
|
1375
|
+
cond = Condition.from_xml(@doc10.root)
|
1376
|
+
cond = Condition.from_xml(@doc11.root)
|
1377
|
+
cond = Condition.from_xml(@doc12.root)
|
1378
|
+
cond = Condition.from_xml(@doc13.root)
|
1379
|
+
}
|
1380
|
+
end
|
1381
|
+
|
1382
|
+
def test_to_adqls
|
1383
|
+
assert_equal("opt.org LIKE '%esa%'",
|
1384
|
+
Condition.from_xml(@doc1.root).to_adqls)
|
1385
|
+
assert_equal("opt.org NOT LIKE '%esa%'",
|
1386
|
+
Condition.from_xml(@doc2.root).to_adqls)
|
1387
|
+
assert_equal("(opt.org LIKE '%esa%')",
|
1388
|
+
Condition.from_xml(@doc3.root).to_adqls)
|
1389
|
+
assert_equal("opt.publisher <> 'CDS'",
|
1390
|
+
Condition.from_xml(@doc4.root).to_adqls)
|
1391
|
+
assert_equal("opt.R BETWEEN 1.2 AND 1.6",
|
1392
|
+
Condition.from_xml(@doc5.root).to_adqls)
|
1393
|
+
assert_equal("opt.R NOT BETWEEN 1.2 AND 1.6",
|
1394
|
+
Condition.from_xml(@doc6.root).to_adqls)
|
1395
|
+
assert_equal("opt.publisher <> 'CDS' AND opt.R BETWEEN 1.2 AND 1.6",
|
1396
|
+
Condition.from_xml(@doc7.root).to_adqls)
|
1397
|
+
assert_equal("opt.publisher <> 'CDS' OR opt.R BETWEEN 1.2 AND 1.6",
|
1398
|
+
Condition.from_xml(@doc8.root).to_adqls)
|
1399
|
+
assert_equal('XMATCH(opt, apt, !drop_me) < 0.5',
|
1400
|
+
Condition.from_xml(@doc9.root).to_adqls)
|
1401
|
+
assert_equal("Region('CIRCLE J2000 181.3 -0.76 6.5')",
|
1402
|
+
Condition.from_xml(@doc10.root).to_adqls)
|
1403
|
+
assert_equal("NOT opt.publisher <> 'CDS'",
|
1404
|
+
Condition.from_xml(@doc11.root).to_adqls)
|
1405
|
+
assert_equal('opt.R IN (SELECT opt.R, opt.V, opt.ra, opt.dec)',
|
1406
|
+
Condition.from_xml(@doc12.root).to_adqls)
|
1407
|
+
assert_equal('opt.R NOT IN (SELECT opt.R, opt.V, opt.ra, opt.dec)',
|
1408
|
+
Condition.from_xml(@doc13.root).to_adqls)
|
1409
|
+
end
|
1410
|
+
end
|
1411
|
+
|
1412
|
+
class TableTest < Test::Unit::TestCase
|
1413
|
+
def setup
|
1414
|
+
@xml1 = '<Table Name="my_table" xsi:type="includeTableType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'
|
1415
|
+
@doc1 = REXML::Document.new(@xml1)
|
1416
|
+
|
1417
|
+
@xml2 = '<Table Name="my_table" xsi:type="dropTableType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'
|
1418
|
+
@doc2 = REXML::Document.new(@xml2)
|
1419
|
+
|
1420
|
+
@xml3 = '<Table Archive="SDSS" Name="PhotoPrimary" Alias="o" xsi:type="archiveTableType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>'
|
1421
|
+
@doc3 = REXML::Document.new(@xml3)
|
1422
|
+
|
1423
|
+
@xml4 = '<Table xsi:type="joinTableType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
|
1424
|
+
'<Qualifier xsi:type="jointTableQualifierType">INNER</Qualifier>' +
|
1425
|
+
'<Tables xsi:type="arrayOfFromTableType">' +
|
1426
|
+
'<Table Archive="SDSS" Name="PhotoPrimary" Alias="o" xsi:type="archiveTableType"/>' +
|
1427
|
+
'<Table Archive="TWOMASS" Name="PhotoPrimary" Alias="t" xsi:type="archiveTableType"/>' +
|
1428
|
+
'</Tables>' +
|
1429
|
+
'<Condition xsi:type="comparisonPredType" Comparison="=">' +
|
1430
|
+
'<Arg xsi:type="columnReferenceType" Table="o" Name="publisher" />' +
|
1431
|
+
'<Arg xsi:type="atomType">' +
|
1432
|
+
'<Literal xsi:type="stringType" Value="CDS" />' +
|
1433
|
+
'</Arg>' +
|
1434
|
+
'</Condition>' +
|
1435
|
+
'</Table>'
|
1436
|
+
@doc4 = REXML::Document.new(@xml4)
|
1437
|
+
|
1438
|
+
@table1 = Table.new('PhotoPrimary', 'o')
|
1439
|
+
@table2 = Table.new('PhotoPrimary')
|
1440
|
+
end
|
1441
|
+
|
1442
|
+
def test_from_xml
|
1443
|
+
assert_nothing_raised {
|
1444
|
+
tbl = Table.from_xml(@doc1.root)
|
1445
|
+
tbl = Table.from_xml(@doc2.root)
|
1446
|
+
tbl = Table.from_xml(@doc3.root)
|
1447
|
+
tbl = Table.from_xml(@doc4.root)
|
1448
|
+
}
|
1449
|
+
end
|
1450
|
+
|
1451
|
+
def test_to_adqls
|
1452
|
+
assert_equal('my_table', Table.from_xml(@doc1.root).to_adqls)
|
1453
|
+
assert_equal('!my_table', Table.from_xml(@doc2.root).to_adqls)
|
1454
|
+
assert_equal('SDSS:PhotoPrimary o', Table.from_xml(@doc3.root).to_adqls)
|
1455
|
+
assert_equal("INNER SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t ON o.publisher = 'CDS'",
|
1456
|
+
Table.from_xml(@doc4.root).to_adqls)
|
1457
|
+
assert_equal('PhotoPrimary o', @table1.to_adqls)
|
1458
|
+
assert_equal('PhotoPrimary', @table2.to_adqls)
|
1459
|
+
end
|
1460
|
+
end
|
1461
|
+
|
1462
|
+
class ConstantListSetTest < Test::Unit::TestCase
|
1463
|
+
def setup
|
1464
|
+
@xml = '<Set xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="constantListSetType">' +
|
1465
|
+
'<Item xsi:type="realType" Value="10.1" />' +
|
1466
|
+
'<Item xsi:type="stringType" Value="hello" />' +
|
1467
|
+
'<Item xsi:type="integerType" Value="5" />' +
|
1468
|
+
'</Set>'
|
1469
|
+
@doc = REXML::Document.new(@xml)
|
1470
|
+
end
|
1471
|
+
|
1472
|
+
def test_from_xml
|
1473
|
+
assert_nothing_raised {
|
1474
|
+
set = ConstantListSet.from_xml(@doc.root)
|
1475
|
+
}
|
1476
|
+
end
|
1477
|
+
|
1478
|
+
def test_to_adqls
|
1479
|
+
assert_equal('10.1, "hello", 5',
|
1480
|
+
ConstantListSet.from_xml(@doc.root).to_adqls)
|
1481
|
+
end
|
1482
|
+
end
|
1483
|
+
|
1484
|
+
class ColumnTest < Test::Unit::TestCase
|
1485
|
+
def setup
|
1486
|
+
@xml = '<Column xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="columnReferenceType" Table="o" Name="publisher" />'
|
1487
|
+
@doc = REXML::Document.new(@xml)
|
1488
|
+
end
|
1489
|
+
|
1490
|
+
def test_from_xml
|
1491
|
+
assert_nothing_raised {
|
1492
|
+
col = Column.from_xml(@doc.root)
|
1493
|
+
}
|
1494
|
+
end
|
1495
|
+
|
1496
|
+
def test_to_adqls
|
1497
|
+
assert_equal('o.publisher', Column.from_xml(@doc.root).to_adqls)
|
1498
|
+
|
1499
|
+
xml = '<Column Table="o" Name="ra"/>'
|
1500
|
+
doc = REXML::Document.new(xml)
|
1501
|
+
assert_equal('o.ra', Column.from_xml(doc.root).to_adqls)
|
1502
|
+
end
|
1503
|
+
end
|
1504
|
+
|
1505
|
+
class ItemTest < Test::Unit::TestCase
|
1506
|
+
def setup
|
1507
|
+
@xml1 = '<Item xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="orderType">' +
|
1508
|
+
'<Expression xsi:type="columnReferenceType" Table="o" Name="ra" />' +
|
1509
|
+
'<Order Direction="ASC"/>' +
|
1510
|
+
'</Item>'
|
1511
|
+
@doc1 = REXML::Document.new(@xml1)
|
1512
|
+
end
|
1513
|
+
|
1514
|
+
def test_from_xml
|
1515
|
+
assert_nothing_raised {
|
1516
|
+
item = Item.from_xml(@doc1.root)
|
1517
|
+
}
|
1518
|
+
end
|
1519
|
+
|
1520
|
+
def test_from_adqls
|
1521
|
+
assert_equal('o.ra ASC', Item.from_xml(@doc1.root).to_adqls)
|
1522
|
+
end
|
1523
|
+
end
|
1524
|
+
|
1525
|
+
class OrderByTest < Test::Unit::TestCase
|
1526
|
+
def setup
|
1527
|
+
xml = '<OrderBy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
|
1528
|
+
'<Item xsi:type="orderType">' +
|
1529
|
+
'<Expression xsi:type="columnReferenceType" Table="o" Name="ra" />' +
|
1530
|
+
'<Order Direction="ASC"/>' +
|
1531
|
+
'</Item>' +
|
1532
|
+
'<Item xsi:type="orderType">' +
|
1533
|
+
'<Expression xsi:type="columnReferenceType" Table="o" Name="dec" />' +
|
1534
|
+
'<Order Direction="DESC"/>' +
|
1535
|
+
'</Item>' +
|
1536
|
+
'</OrderBy>'
|
1537
|
+
@doc = REXML::Document.new(xml)
|
1538
|
+
end
|
1539
|
+
|
1540
|
+
def test_from_xml
|
1541
|
+
assert_equal('ORDER BY o.ra ASC, o.dec DESC',
|
1542
|
+
OrderBy.from_xml(@doc.root).to_adqls)
|
1543
|
+
end
|
1544
|
+
end
|
1545
|
+
|
1546
|
+
class ParamsTest < Test::Unit::TestCase
|
1547
|
+
def setup
|
1548
|
+
xml = '<Params xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Oper="-" xsi:type="binaryExprType">' +
|
1549
|
+
'<Arg Table="o" Name="R" xsi:type="columnReferenceType"/>' +
|
1550
|
+
'<Arg Table="o" Name="B" xsi:type="columnReferenceType"/>' +
|
1551
|
+
'</Params>'
|
1552
|
+
@doc = REXML::Document.new(xml)
|
1553
|
+
end
|
1554
|
+
|
1555
|
+
def test_from_xml
|
1556
|
+
assert_equal('o.R - o.B',
|
1557
|
+
Params.from_xml(@doc.root).to_adqls)
|
1558
|
+
end
|
1559
|
+
end
|
1560
|
+
|
1561
|
+
class QualifierTest < Test::Unit::TestCase
|
1562
|
+
def setup
|
1563
|
+
xml = '<Qualifier>INNER</Qualifier>'
|
1564
|
+
@doc = REXML::Document.new(xml)
|
1565
|
+
end
|
1566
|
+
|
1567
|
+
def test_from_xml
|
1568
|
+
assert_equal('INNER', Qualifier.from_xml(@doc.root).to_adqls)
|
1569
|
+
end
|
1570
|
+
end
|
1571
|
+
|
1572
|
+
class TablesTest < Test::Unit::TestCase
|
1573
|
+
def setup
|
1574
|
+
xml = '<Tables xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +
|
1575
|
+
'<Table Archive="SDSS" Name="PhotoPrimary" Alias="o" xsi:type="archiveTableType"/>' +
|
1576
|
+
'<Table Archive="TWOMASS" Name="PhotoPrimary" Alias="t" xsi:type="archiveTableType"/>' +
|
1577
|
+
'</Tables>'
|
1578
|
+
@doc = REXML::Document.new(xml)
|
1579
|
+
end
|
1580
|
+
|
1581
|
+
def test_from_xml
|
1582
|
+
assert_equal('SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t',
|
1583
|
+
Tables.from_xml(@doc.root).to_adqls)
|
1584
|
+
end
|
1585
|
+
end
|
1586
|
+
|
1587
|
+
class RealWorldTests < Test::Unit::TestCase
|
1588
|
+
def setup
|
1589
|
+
@test1_doc = REXML::Document.new(File.new('test/adql/test1.adql'))
|
1590
|
+
@test2_doc = REXML::Document.new(File.new('test/adql/test2.adql'))
|
1591
|
+
@test3_doc = REXML::Document.new(File.new('test/adql/test3.adql'))
|
1592
|
+
@test4_doc = REXML::Document.new(File.new('test/adql/test4.adql'))
|
1593
|
+
@test5_doc = REXML::Document.new(File.new('test/adql/test5.adql'))
|
1594
|
+
@test6_doc = REXML::Document.new(File.new('test/adql/test6.adql'))
|
1595
|
+
@test7_doc = REXML::Document.new(File.new('test/adql/test7.adql'))
|
1596
|
+
end
|
1597
|
+
|
1598
|
+
def test_test1
|
1599
|
+
assert_equal('SELECT o.objid, o.ra, o.dec, o.type, t.objid, t.ra, t.dec, t.j_m, o.i ' +
|
1600
|
+
'FROM SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t, ' +
|
1601
|
+
'INNER SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t ON o.objid = t.objid ' +
|
1602
|
+
"WHERE Region('CIRCLE J2000 182.5 -0.89 8.0')",
|
1603
|
+
Select.from_xml(@test1_doc.root).to_adqls)
|
1604
|
+
end
|
1605
|
+
|
1606
|
+
def test_test2
|
1607
|
+
assert_equal('SELECT o.objid, o.ra, o.dec, o.r, o.type, t.objid, t.ra, t.dec ' +
|
1608
|
+
'FROM SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t ' +
|
1609
|
+
'WHERE ' +
|
1610
|
+
'XMATCH(o, t) < 3.5 AND ' +
|
1611
|
+
"Region('CIRCLE J2000 181.3 -0.76 6.5') AND " +
|
1612
|
+
'o.type = 3',
|
1613
|
+
Select.from_xml(@test2_doc.root).to_adqls)
|
1614
|
+
end
|
1615
|
+
|
1616
|
+
def test_test3
|
1617
|
+
assert_equal('SELECT o.objid, o.ra, o.dec, o.type, t.objid, t.ra, t.dec, t.j_m, o.i ' +
|
1618
|
+
'FROM SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t ' +
|
1619
|
+
'WHERE ' +
|
1620
|
+
'XMATCH(o, t) < 3.5 AND ' +
|
1621
|
+
"Region('CIRCLE J2000 182.5 -0.89 8.0') AND " +
|
1622
|
+
'o.type = 3 AND ' +
|
1623
|
+
'o.i < 21 AND ' +
|
1624
|
+
't.j_m < 18 AND ' +
|
1625
|
+
'(o.i - t.j_m) > 2',
|
1626
|
+
Select.from_xml(@test3_doc.root).to_adqls)
|
1627
|
+
end
|
1628
|
+
|
1629
|
+
def test_test4
|
1630
|
+
assert_equal('SELECT o.objid, o.ra, o.dec, t.ra, t.dec, t.objid, o.type ' +
|
1631
|
+
'FROM SDSS:PhotoPrimary o, TWOMASS:PhotoPrimary t, USNOB:PhotoPrimary p ' +
|
1632
|
+
'WHERE ' +
|
1633
|
+
'XMATCH(o, t, !p) < 3.5 AND ' +
|
1634
|
+
"Region('CIRCLE J2000 182.5 -0.89 8.0') AND " +
|
1635
|
+
'o.type = 3',
|
1636
|
+
Select.from_xml(@test4_doc.root).to_adqls)
|
1637
|
+
end
|
1638
|
+
|
1639
|
+
def test_test5
|
1640
|
+
assert_equal('SELECT o.objid, o.ra, o.dec, o.type, t.objid, t.j_m, o.z ' +
|
1641
|
+
'FROM SDSSDR2:PhotoPrimary o, TWOMASS:PhotoPrimary t ' +
|
1642
|
+
'WHERE ' +
|
1643
|
+
'XMATCH(o, t) < 2.5 AND ' +
|
1644
|
+
"Region('CIRCLE J2000 16.031 -0.891 30.0') AND " +
|
1645
|
+
'(o.z - t.j_m) > 2',
|
1646
|
+
Select.from_xml(@test5_doc.root).to_adqls)
|
1647
|
+
end
|
1648
|
+
|
1649
|
+
def test_test6
|
1650
|
+
assert_equal('SELECT TOP 10 s.* FROM sdss:photoobjall s',
|
1651
|
+
Select.from_xml(@test6_doc.root).to_adqls)
|
1652
|
+
end
|
1653
|
+
|
1654
|
+
def test_test7
|
1655
|
+
assert_equal('SELECT b.objid, b.ra, b.dec, b.u, s.z AS sdssRS ' +
|
1656
|
+
'FROM sdss:photoprimary b, sdss:specobjall s ' +
|
1657
|
+
'WHERE ' +
|
1658
|
+
's.specobjid = b.specobjid AND ' +
|
1659
|
+
's.z > 1.8 AND ' +
|
1660
|
+
"Region('CIRCLE J2000 181.3 -0.76 30.0')",
|
1661
|
+
Select.from_xml(@test7_doc.root).to_adqls)
|
1662
|
+
end
|
1663
|
+
end
|
1664
|
+
|
1665
|
+
class ParserTest < Test::Unit::TestCase
|
1666
|
+
def test_construct
|
1667
|
+
assert_nothing_raised {
|
1668
|
+
select = Parser.new(File.new('test/adql/test3.adql')).parse
|
1669
|
+
select_s = Parser.convert_to_adqls(File.new('test/adql/test3.adql'))
|
1670
|
+
}
|
1671
|
+
end
|
1672
|
+
end
|