voruby 1.1.1 → 2.0.0
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/Rakefile.rb +107 -224
- data/lib/misc.rb +1 -0
- data/lib/misc/misc.rb +60 -0
- data/lib/misc/propertyfile.rb +31 -0
- data/lib/symphony.rb +1 -0
- data/lib/symphony/symphony.rb +247 -0
- data/lib/voruby.rb +186 -0
- data/lib/voruby/active_votable/active_votable.rb +468 -347
- data/lib/voruby/adql/1.0/adql.rb +2418 -0
- data/lib/voruby/adql/support.rb +2 -0
- data/lib/voruby/misc.rb +351 -0
- data/lib/voruby/misc/connection_monitor.rb +97 -0
- data/lib/voruby/misc/libxml_ext.rb +121 -0
- data/lib/voruby/misc/rexml_ext.rb +223 -0
- data/lib/voruby/resolver/resolver.rb +12 -0
- data/lib/voruby/resolver/sesame.rb +299 -0
- data/lib/voruby/sky_query/sky_query.rb +192 -0
- data/lib/voruby/stc/1.10/coords.rb +2272 -0
- data/lib/voruby/stc/1.10/region.rb +892 -0
- data/lib/voruby/stc/1.10/stc.rb +3271 -0
- data/lib/voruby/stc/1.30/stc.rb +8666 -0
- data/lib/voruby/stc/support.rb +2 -0
- data/lib/voruby/ucd/ucd.rb +173 -0
- data/lib/voruby/voevent/1.1/voevent.rb +1124 -0
- data/lib/voruby/voevent/support.rb +5 -0
- data/lib/voruby/votable/1.0/votable.rb +1807 -0
- data/lib/voruby/votable/1.1/votable.rb +2100 -0
- data/lib/voruby/votable/votable.rb +305 -0
- data/lib/voruby/wesix/wesix.rb +491 -0
- data/lib/voruby/xlink/1.2/xlink.rb +21 -0
- data/test/voruby/active_votable/complex.vot +60 -0
- data/test/voruby/active_votable/error.vot +6 -0
- data/test/voruby/active_votable/large.vot +130040 -0
- data/test/voruby/active_votable/simple1.vot +38 -0
- data/test/voruby/active_votable/simple2.vot +38 -0
- data/test/voruby/active_votable/test.rb +193 -0
- data/test/voruby/adql/1.0/adql-alias.sql +1 -0
- data/test/voruby/adql/1.0/adql-alias.xml +26 -0
- data/test/voruby/adql/1.0/adql-avg.sql +1 -0
- data/test/voruby/adql/1.0/adql-avg.xml +31 -0
- data/test/voruby/adql/1.0/adql-circle.sql +1 -0
- data/test/voruby/adql/1.0/adql-circle.xml +46 -0
- data/test/voruby/adql/1.0/adql-expr.sql +1 -0
- data/test/voruby/adql/1.0/adql-expr.xml +34 -0
- data/test/voruby/adql/1.0/adql-function.sql +1 -0
- data/test/voruby/adql/1.0/adql-function.xml +41 -0
- data/test/voruby/adql/1.0/adql-group.sql +1 -0
- data/test/voruby/adql/1.0/adql-group.xml +51 -0
- data/test/voruby/adql/1.0/adql-having.sql +1 -0
- data/test/voruby/adql/1.0/adql-having.xml +25 -0
- data/test/voruby/adql/1.0/adql-like.sql +1 -0
- data/test/voruby/adql/1.0/adql-like.xml +17 -0
- data/test/voruby/adql/1.0/adql-order.sql +1 -0
- data/test/voruby/adql/1.0/adql-order.xml +37 -0
- data/test/voruby/adql/1.0/adql-simple.sql +1 -0
- data/test/voruby/adql/1.0/adql-simple.xml +12 -0
- data/test/voruby/adql/1.0/adql-top.sql +1 -0
- data/test/voruby/adql/1.0/adql-top.xml +33 -0
- data/test/voruby/adql/1.0/test.rb +2220 -0
- data/test/voruby/misc/test.rb +32 -0
- data/test/voruby/resolver/sesame/test.rb +56 -0
- data/test/voruby/sky_query/test.rb +107 -0
- data/test/voruby/stc/1.10/coords_test.rb +3704 -0
- data/test/voruby/stc/1.10/region_test.rb +993 -0
- data/test/voruby/stc/1.10/stc-catalog-entry-location.xml +112 -0
- data/test/voruby/stc/1.10/stc-obs-data-location.xml +126 -0
- data/test/voruby/stc/1.10/stc-region-circle.xml +5 -0
- data/test/voruby/stc/1.10/stc-region-convex.xml +11 -0
- data/test/voruby/stc/1.10/stc-region-convexhull.xml +5 -0
- data/test/voruby/stc/1.10/stc-region-ellipse.xml +7 -0
- data/test/voruby/stc/1.10/stc-region-intersection.xml +25 -0
- data/test/voruby/stc/1.10/stc-region-negation.xml +7 -0
- data/test/voruby/stc/1.10/stc-region-polygon.xml +13 -0
- data/test/voruby/stc/1.10/stc-region-sector.xml +6 -0
- data/test/voruby/stc/1.10/stc-region-union.xml +25 -0
- data/test/voruby/stc/1.10/stc-resource-profile.xml +60 -0
- data/test/voruby/stc/1.10/stc-search-location.xml +54 -0
- data/test/voruby/stc/1.10/stc_test.rb +4626 -0
- data/test/voruby/stc/1.30/stc-catalog-entry-location.xml +210 -0
- data/test/voruby/stc/1.30/stc-obs-data-location-arecibo.xml +353 -0
- data/test/voruby/stc/1.30/stc-obs-data-location-fits.xml +250 -0
- data/test/voruby/stc/1.30/stc-obs-data-location-xlink.xml +63 -0
- data/test/voruby/stc/1.30/stc-obs-data-location.xml +216 -0
- data/test/voruby/stc/1.30/stc-resource-profile-unusual-ref-pos.xml +39 -0
- data/test/voruby/stc/1.30/stc-resource-profile.xml +129 -0
- data/test/voruby/stc/1.30/stc-search-location-arecibo.xml +86 -0
- data/test/voruby/stc/1.30/stc-search-location.xml +101 -0
- data/test/voruby/stc/1.30/test.rb +6274 -0
- data/test/voruby/ucd/test.rb +48 -0
- data/test/voruby/voevent/1.1/test.rb +812 -0
- data/test/{voevent/voevent_v1_1.xml → voruby/voevent/1.1/voevent.xml} +2 -2
- data/test/voruby/voregistry/0.3/test.rb +137 -0
- data/test/voruby/votable/1.0/test.rb +714 -0
- data/test/voruby/votable/1.0/votable.basic.xml +660 -0
- data/test/voruby/votable/1.0/votable.html +86 -0
- data/test/voruby/votable/1.0/votable.ns.xml +56 -0
- data/test/voruby/votable/1.1/test.rb +785 -0
- data/test/voruby/votable/1.1/votable.basic.xml +38 -0
- data/test/voruby/votable/1.1/votable.html +86 -0
- data/test/voruby/votable/1.1/votable.ns.xml +56 -0
- data/test/voruby/votable/test.rb +15 -0
- data/test/voruby/wesix/test.rb +268 -0
- data/test/voruby/wesix/testr.fits +28 -0
- metadata +234 -247
- data/REQUIREMENTS +0 -6
- data/lib/voruby/active_votable/loader.rb +0 -5
- data/lib/voruby/adql/adql.rb +0 -2787
- data/lib/voruby/adql/ext.rb +0 -14
- data/lib/voruby/adql/loader.rb +0 -6
- data/lib/voruby/adql/operations.rb +0 -54
- data/lib/voruby/adql/parser.rb +0 -160
- data/lib/voruby/adql/transforms.rb +0 -573
- data/lib/voruby/ext.rb +0 -17
- data/lib/voruby/loader.rb +0 -4
- data/lib/voruby/misc/propertyfile.rb +0 -36
- data/lib/voruby/plastic/applications.rb +0 -174
- data/lib/voruby/plastic/constants.rb +0 -30
- data/lib/voruby/plastic/loader.rb +0 -10
- data/lib/voruby/plastic/plastic.rb +0 -1
- data/lib/voruby/resources/conesearch/conesearch.rb +0 -9
- data/lib/voruby/resources/conesearch/conesearch_v0_2.rb +0 -55
- data/lib/voruby/resources/conesearch/conesearch_v0_3.rb +0 -50
- data/lib/voruby/resources/conesearch/conesearch_v1_0.rb +0 -72
- data/lib/voruby/resources/conesearch/loader.rb +0 -4
- data/lib/voruby/resources/loader.rb +0 -50
- data/lib/voruby/resources/nodes.rb +0 -190
- data/lib/voruby/resources/openskynode/loader.rb +0 -4
- data/lib/voruby/resources/openskynode/openskynode.rb +0 -9
- data/lib/voruby/resources/openskynode/openskynode_v0_1.rb +0 -54
- data/lib/voruby/resources/sia/loader.rb +0 -5
- data/lib/voruby/resources/sia/sia.rb +0 -9
- data/lib/voruby/resources/sia/sia_v0_6.rb +0 -90
- data/lib/voruby/resources/sia/sia_v0_7.rb +0 -89
- data/lib/voruby/resources/sia/sia_v1_0.rb +0 -122
- data/lib/voruby/resources/stsci.rb +0 -59
- data/lib/voruby/resources/vodataservice/coverage_v0_2.rb +0 -195
- data/lib/voruby/resources/vodataservice/coverage_v0_3.rb +0 -158
- data/lib/voruby/resources/vodataservice/loader.rb +0 -5
- data/lib/voruby/resources/vodataservice/vodataservice.rb +0 -9
- data/lib/voruby/resources/vodataservice/vodataservice_v0_4.rb +0 -189
- data/lib/voruby/resources/vodataservice/vodataservice_v0_5.rb +0 -163
- data/lib/voruby/resources/vodataservice/vodataservice_v1_0.rb +0 -221
- data/lib/voruby/resources/voregistry/loader.rb +0 -4
- data/lib/voruby/resources/voregistry/voregistry.rb +0 -9
- data/lib/voruby/resources/voregistry/voregistry_v0_2.rb +0 -40
- data/lib/voruby/resources/voregistry/voregistry_v0_3.rb +0 -30
- data/lib/voruby/resources/voregistry/voregistry_v1_0.rb +0 -86
- data/lib/voruby/resources/voresource/loader.rb +0 -17
- data/lib/voruby/resources/voresource/voresource.rb +0 -9
- data/lib/voruby/resources/voresource/voresource_v0_10.rb +0 -327
- data/lib/voruby/resources/voresource/voresource_v0_9.rb +0 -405
- data/lib/voruby/resources/voresource/voresource_v1_0.rb +0 -230
- data/lib/voruby/services/ext.rb +0 -11
- data/lib/voruby/services/gestalt/footprint.rb +0 -95
- data/lib/voruby/services/gestalt/wcs_fixer.rb +0 -105
- data/lib/voruby/services/gestalt/wesix.rb +0 -155
- data/lib/voruby/services/loader.rb +0 -7
- data/lib/voruby/services/registry/registry.rb +0 -53
- data/lib/voruby/services/resolver/resolver.rb +0 -35
- data/lib/voruby/services/schema/schema.rb +0 -644
- data/lib/voruby/sesame/loader.rb +0 -6
- data/lib/voruby/sesame/sesame_v1_0.rb +0 -64
- data/lib/voruby/simple/loader.rb +0 -6
- data/lib/voruby/simple/parameters.rb +0 -196
- data/lib/voruby/simple/sap.rb +0 -446
- data/lib/voruby/spacetime/loader.rb +0 -3
- data/lib/voruby/spacetime/spacetime.rb +0 -607
- data/lib/voruby/stc/coords_v1_20.rb +0 -900
- data/lib/voruby/stc/loader.rb +0 -55
- data/lib/voruby/stc/region_v1_20.rb +0 -274
- data/lib/voruby/stc/stc_v1_20.rb +0 -1196
- data/lib/voruby/util.rb +0 -27
- data/lib/voruby/voevent/loader.rb +0 -7
- data/lib/voruby/voevent/voevent_v1_0.rb +0 -213
- data/lib/voruby/voevent/voevent_v1_1.rb +0 -196
- data/lib/voruby/votables/chandra.rb +0 -373
- data/lib/voruby/votables/data.rb +0 -179
- data/lib/voruby/votables/galex.rb +0 -377
- data/lib/voruby/votables/int.rb +0 -354
- data/lib/voruby/votables/libxml_parser.rb +0 -411
- data/lib/voruby/votables/libxml_votable.rb +0 -67
- data/lib/voruby/votables/loader.rb +0 -10
- data/lib/voruby/votables/meta.rb +0 -763
- data/lib/voruby/votables/misc.rb +0 -51
- data/lib/voruby/votables/nsa.rb +0 -410
- data/lib/voruby/votables/rexml_parser.rb +0 -408
- data/lib/voruby/votables/rexml_votable.rb +0 -67
- data/lib/voruby/votables/sdss.rb +0 -356
- data/lib/voruby/votables/transforms.rb +0 -388
- data/lib/voruby/votables/tree.rb +0 -45
- data/lib/voruby/votables/types.rb +0 -391
- data/lib/voruby/votables/votable.rb +0 -687
- data/test/active_votable/database.yml +0 -6
- data/test/active_votable/test.vot +0 -168492
- data/test/active_votable/unittest.rb +0 -41
- data/test/adql/test1.adql +0 -49
- data/test/adql/test2.adql +0 -51
- data/test/adql/test3.adql +0 -81
- data/test/adql/test4.adql +0 -53
- data/test/adql/test5.adql +0 -55
- data/test/adql/test6.adql +0 -18
- data/test/adql/test7.adql +0 -48
- data/test/adql/unittest.rb +0 -1672
- data/test/plastic/test.rb +0 -44
- data/test/plastic/test.vot +0 -5385
- data/test/plastic/unittest.rb +0 -66
- data/test/resources/conesearch/conesearch_v0_3.xml +0 -31
- data/test/resources/conesearch/conesearch_v1_0.xml +0 -86
- data/test/resources/conesearch/unittest_v0_3.rb +0 -22
- data/test/resources/conesearch/unittest_v1_0.rb +0 -24
- data/test/resources/openskynode/open_sky_node_v0_1.xml +0 -32
- data/test/resources/openskynode/unittest_v0_1.rb +0 -31
- data/test/resources/sia/simple_image_access_v0_7.xml +0 -36
- data/test/resources/sia/simple_image_access_v1_0.xml +0 -122
- data/test/resources/sia/unittest_v0_7.rb +0 -24
- data/test/resources/sia/unittest_v1_0.rb +0 -29
- data/test/resources/stsci.xml +0 -336
- data/test/resources/unittest_stsci.rb +0 -25
- data/test/resources/vodataservice/catalog_service_resource_v1_0.xml +0 -128
- data/test/resources/vodataservice/data_collection_resource_v0_5.xml +0 -54
- data/test/resources/vodataservice/data_collection_resource_v1_0.xml +0 -117
- data/test/resources/vodataservice/data_service_resource_v1_0.xml +0 -115
- data/test/resources/vodataservice/sky_service_resource_v0_10.xml +0 -45
- data/test/resources/vodataservice/table_service_resource_v1_0.xml +0 -122
- data/test/resources/vodataservice/tabular_sky_service_resource_v0_10.xml +0 -60
- data/test/resources/vodataservice/unittest_v0_5.rb +0 -126
- data/test/resources/vodataservice/unittest_v1_0.rb +0 -151
- data/test/resources/voregistry/authority_resource_v0_3.xml +0 -20
- data/test/resources/voregistry/authority_resource_v1_0.xml +0 -82
- data/test/resources/voregistry/registry_service_v0_3.xml +0 -20
- data/test/resources/voregistry/registry_service_v1_0.xml +0 -107
- data/test/resources/voregistry/unittest_v0_3.rb +0 -31
- data/test/resources/voregistry/unittest_v1_0.rb +0 -34
- data/test/resources/voresource/organisation_resource_v1_0.xml +0 -90
- data/test/resources/voresource/resource_organisation_v0_10.xml +0 -22
- data/test/resources/voresource/resource_service_v0_10.xml +0 -19
- data/test/resources/voresource/resource_v0_10.xml +0 -19
- data/test/resources/voresource/resource_v1_0.xml +0 -79
- data/test/resources/voresource/service_resource_v1_0.xml +0 -91
- data/test/resources/voresource/unittest_v0_10.rb +0 -61
- data/test/resources/voresource/unittest_v0_9.rb +0 -4
- data/test/resources/voresource/unittest_v1_0.rb +0 -190
- data/test/services/gestalt/unittest.rb +0 -74
- data/test/services/registry/unittest.rb +0 -34
- data/test/services/resolver/unittest.rb +0 -38
- data/test/simple/unittest.rb +0 -46
- data/test/spacetime/unittest.rb +0 -39
- data/test/stc/catalog_entry_location_v1_20.xml +0 -112
- data/test/stc/obs_data_location_v1_20.xml +0 -108
- data/test/stc/search_location_v1_20.xml +0 -54
- data/test/stc/stc_resource_profile_v1_20.xml +0 -60
- data/test/stc/unittest_v1_20.rb +0 -620
- data/test/voevent/unittest_v1_0.rb +0 -79
- data/test/voevent/unittest_v1_1.rb +0 -70
- data/test/voevent/voevent_v1_0.xml +0 -96
- data/test/votables/test.vot +0 -366
- data/test/votables/unittest.rb +0 -54
data/lib/voruby/adql/ext.rb
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
class REXML::Element
|
2
|
-
def find_attribute(attr_name, ns=nil)
|
3
|
-
if !ns
|
4
|
-
return self.attributes[attr_name]
|
5
|
-
else
|
6
|
-
ns_prefix = self.namespaces.index(ns)
|
7
|
-
if ns_prefix
|
8
|
-
return self.attributes["#{ns_prefix}:#{attr_name}"]
|
9
|
-
else
|
10
|
-
return nil
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
data/lib/voruby/adql/loader.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
# This class gives a set of operations
|
2
|
-
module VORuby
|
3
|
-
module ADQL
|
4
|
-
|
5
|
-
class Operations
|
6
|
-
|
7
|
-
# This method returns an array of column names. For now, it reads
|
8
|
-
# a file from somewhere path. In the future we'll have a service
|
9
|
-
# that will return a xml file with similar information.
|
10
|
-
#[_path_]
|
11
|
-
# It's temporal param
|
12
|
-
def self.get_columns(path)
|
13
|
-
columns_array = [{'name'=>'All'}]
|
14
|
-
|
15
|
-
document = REXML::Document.new(File.new(path))#This is temporal way
|
16
|
-
raise "Document haven't elements" if document.root == nil
|
17
|
-
|
18
|
-
document.root.elements.each('String') do |element|
|
19
|
-
columns_array.push({'name'=>element.text})
|
20
|
-
end
|
21
|
-
|
22
|
-
return columns_array
|
23
|
-
end
|
24
|
-
|
25
|
-
# This method returns an array of column info. For now, it reads
|
26
|
-
# a file from somewhere path. In the future we'll have a service
|
27
|
-
# that will return a xml file with similar information.
|
28
|
-
#[_path_]
|
29
|
-
# It's temporal param
|
30
|
-
def self.get_meta_columns(path)
|
31
|
-
columns_array = []
|
32
|
-
|
33
|
-
document = REXML::Document.new(File.new(path))#This is temporal way
|
34
|
-
raise "Document haven't elements" if document.root == nil
|
35
|
-
|
36
|
-
document.root.elements.each('MetaColumn') do |meta_element|
|
37
|
-
node_name = REXML::XPath.first(meta_element, 'Name')
|
38
|
-
node_unit = REXML::XPath.first(meta_element, 'Unit')
|
39
|
-
node_des = REXML::XPath.first(meta_element, 'Description')
|
40
|
-
node_ucd = REXML::XPath.first(meta_element, 'UCD')
|
41
|
-
|
42
|
-
columns_array.push({'name'=> node_name.text,
|
43
|
-
'unit'=> node_unit.text,
|
44
|
-
'description'=> node_des.text,
|
45
|
-
'ucd'=>node_ucd.text})
|
46
|
-
end
|
47
|
-
|
48
|
-
return columns_array
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
end
|
data/lib/voruby/adql/parser.rb
DELETED
@@ -1,160 +0,0 @@
|
|
1
|
-
require 'voruby/adql/transforms'
|
2
|
-
require 'rexml/document'
|
3
|
-
|
4
|
-
module VORuby
|
5
|
-
|
6
|
-
module ADQL
|
7
|
-
class Item
|
8
|
-
def self.from_xml(node)
|
9
|
-
#type_s = node.attributes['xsi:type']
|
10
|
-
type_s = node.find_attribute('type', 'http://www.w3.org/2001/XMLSchema-instance')
|
11
|
-
item = ObjectBuilder.get_class_for(type_s).from_xml(node)
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
class Qualifier
|
16
|
-
def self.from_xml(node)
|
17
|
-
return JointTableQualifier.from_xml(node)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
class Arg
|
22
|
-
def self.from_xml(node)
|
23
|
-
#type_s = node.attributes['xsi:type']
|
24
|
-
type_s = node.find_attribute('type', 'http://www.w3.org/2001/XMLSchema-instance')
|
25
|
-
arg = ObjectBuilder.get_class_for(type_s).from_xml(node)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class Allow
|
30
|
-
def self.from_xml(node)
|
31
|
-
return SelectionOption.from_xml(node)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
class Restrict
|
36
|
-
def self.from_xml(node)
|
37
|
-
return SelectionLimit.from_xml(node)
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
class Unit
|
42
|
-
attr_accessor :unit
|
43
|
-
|
44
|
-
def initialize(unit)
|
45
|
-
self.unit = unit
|
46
|
-
end
|
47
|
-
|
48
|
-
def self.from_xml(node)
|
49
|
-
return Unit.new(node.text)
|
50
|
-
end
|
51
|
-
|
52
|
-
def to_s
|
53
|
-
"{unit=#{self.unit}}"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
class Expression
|
58
|
-
def self.from_xml(node)
|
59
|
-
return ScalarExpression.from_xml(node)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
class Condition
|
64
|
-
def self.from_xml(node)
|
65
|
-
return Search.from_xml(node)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
class Pattern
|
70
|
-
def self.from_xml(node)
|
71
|
-
literal_node = REXML::XPath.first(node, 'Literal')
|
72
|
-
return LiteralType.from_xml(literal_node)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
class Set
|
77
|
-
def self.from_xml(node)
|
78
|
-
return InclusionSet.from_xml(node)
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class Tables
|
83
|
-
def self.from_xml(node)
|
84
|
-
return ArrayOfFromTable.from_xml(node)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
class Nature
|
89
|
-
def self.from_xml(node)
|
90
|
-
return Comparison.from_xml(node)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
class Sigma
|
95
|
-
def self.from_xml(node)
|
96
|
-
return NumberType.from_xml(node)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
class Column
|
101
|
-
def self.from_xml(node)
|
102
|
-
return ColumnReference.from_xml(node)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
class TableName
|
107
|
-
def self.from_xml(node)
|
108
|
-
return node.text
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
class StartComment
|
113
|
-
def self.from_xml(node)
|
114
|
-
return node.text
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
class EndComment
|
119
|
-
def self.from_xml(node)
|
120
|
-
return node.text
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
class OrderBy
|
125
|
-
def self.from_xml(node)
|
126
|
-
return OrderExpression.from_xml(node)
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
class Name
|
131
|
-
def self.from_xml(node)
|
132
|
-
return node.text
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
class Params
|
137
|
-
def self.from_xml(node)
|
138
|
-
return ScalarExpression.from_xml(node)
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
class Parser
|
143
|
-
attr_reader :select_doc
|
144
|
-
|
145
|
-
def initialize(src)
|
146
|
-
@select_doc = REXML::Document.new(src)
|
147
|
-
end
|
148
|
-
|
149
|
-
def parse
|
150
|
-
return Select.from_xml(self.select_doc.root)
|
151
|
-
end
|
152
|
-
|
153
|
-
def self.convert_to_adqls(src)
|
154
|
-
return Parser.new(src).parse.to_adqls
|
155
|
-
end
|
156
|
-
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
end
|
@@ -1,573 +0,0 @@
|
|
1
|
-
require 'voruby/adql/adql'
|
2
|
-
require 'rexml/element'
|
3
|
-
|
4
|
-
module VORuby
|
5
|
-
|
6
|
-
module ADQL
|
7
|
-
class ScalarExpression
|
8
|
-
def to_adqls
|
9
|
-
self.value
|
10
|
-
end
|
11
|
-
end
|
12
|
-
|
13
|
-
class ClosedExpr
|
14
|
-
def to_adqls
|
15
|
-
"(#{self.value.to_adqls})"
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
class BinaryOperator
|
20
|
-
def to_adqls
|
21
|
-
self.operator
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
class BinaryExpr
|
26
|
-
def to_adqls
|
27
|
-
"#{self.arg1.to_adqls} #{self.oper.to_adqls} #{self.arg2.to_adqls}"
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
class UnaryOperator
|
32
|
-
def to_adqls
|
33
|
-
self.operator
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
class UnaryExpr
|
38
|
-
def to_adqls
|
39
|
-
"#{self.oper.to_adqls}#{self.arg.to_adqls}"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
class ColumnReference
|
44
|
-
def to_adqls
|
45
|
-
"#{self.table}.#{self.name}"
|
46
|
-
end
|
47
|
-
|
48
|
-
def to_adqlx(element_name)
|
49
|
-
"<#{element_name} Name=\"#{self.name}\" Table=\"#{self.table}\" " +
|
50
|
-
"xsi:type=\"columnReferenceType\"/>"
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
class Atom
|
55
|
-
def to_adqls
|
56
|
-
lit_value = self.literal
|
57
|
-
if lit_value.is_a?(StringType)
|
58
|
-
"'#{lit_value.to_adqls}#{self.unit || ''}'"
|
59
|
-
else
|
60
|
-
"#{lit_value.to_adqls}#{self.unit || ''}"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def to_adqlx(element_name)
|
65
|
-
literal_type = ''
|
66
|
-
if self.literal.is_a?(ADQL::RealType)
|
67
|
-
literal_type = 'realType'
|
68
|
-
elsif self.literal.is_a?(ADQL::IntegerType)
|
69
|
-
literal_type = 'integerType'
|
70
|
-
elsif self.literal.is_a?(ADQL::StringType)
|
71
|
-
literal_type = 'stringType'
|
72
|
-
end
|
73
|
-
|
74
|
-
atom = "<#{element_name} xsi:type=\"atomType\">\n"
|
75
|
-
atom << self.literal.to_adqlx(literal_type)
|
76
|
-
atom << "\n</#{element_name}>\n"
|
77
|
-
|
78
|
-
return atom
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
|
-
class LiteralType
|
83
|
-
def to_adqls
|
84
|
-
self.value.to_s
|
85
|
-
end
|
86
|
-
|
87
|
-
def to_adqlx(literal_type)
|
88
|
-
"<Literal xsi:type=\"#{literal_type}\" Value=\"#{self.value.to_s}\" />"
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
class SelectionOption
|
93
|
-
def to_adqls
|
94
|
-
self.option.option
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
class AllOrDistinct
|
99
|
-
def to_adqls
|
100
|
-
self.option
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
class TrigonometricFunctionName
|
105
|
-
def to_adqls
|
106
|
-
self.value
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
class TrigonometricFunction
|
111
|
-
def to_adqls
|
112
|
-
if self.allow
|
113
|
-
"#{self.name.to_adqls}(#{self.allow.to_adqls} #{self.arg.to_adqls})"
|
114
|
-
else
|
115
|
-
"#{self.name.to_adqls}(#{self.arg.to_adqls})"
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
class MathFunctionName
|
121
|
-
def to_adqls
|
122
|
-
self.value
|
123
|
-
end
|
124
|
-
end
|
125
|
-
|
126
|
-
class MathFunction
|
127
|
-
def to_adqls
|
128
|
-
if self.allow
|
129
|
-
"#{self.name.to_adqls}(#{self.allow.to_adqls} #{self.arg.to_adqls})"
|
130
|
-
else
|
131
|
-
"#{self.name.to_adqls}(#{self.arg.to_adqls})"
|
132
|
-
end
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
class AggregateFunctionName
|
137
|
-
def to_adqls
|
138
|
-
self.value
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
class AggregateFunction
|
143
|
-
def to_adqls
|
144
|
-
if self.allow
|
145
|
-
"#{self.name.to_adqls}(#{self.allow.to_adqls} #{self.arg.to_adqls})"
|
146
|
-
else
|
147
|
-
"#{self.name.to_adqls}(#{self.arg.to_adqls})"
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
|
152
|
-
class AliasSelectionItem
|
153
|
-
def to_adqls
|
154
|
-
if self.as
|
155
|
-
"#{self.expression.to_adqls} AS #{self.as}"
|
156
|
-
else
|
157
|
-
self.expression.to_adqls
|
158
|
-
end
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
class AllSelectionItem
|
163
|
-
def to_adqls
|
164
|
-
'*'
|
165
|
-
end
|
166
|
-
|
167
|
-
def to_adqlx(element_name)
|
168
|
-
"<#{element_name} xsi:type=\"allSelectionItemType\"/>"
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
class Comparison
|
173
|
-
def to_adqls
|
174
|
-
self.value
|
175
|
-
end
|
176
|
-
|
177
|
-
def to_adqlx
|
178
|
-
self.value
|
179
|
-
end
|
180
|
-
end
|
181
|
-
|
182
|
-
class ArchiveTable
|
183
|
-
def to_adqls
|
184
|
-
if self.alias_name
|
185
|
-
"#{self.archive}:#{self.name} #{self.alias_name}"
|
186
|
-
else
|
187
|
-
"#{self.archive}:#{self.name}"
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
def to_adqlx
|
192
|
-
if self.alias_name
|
193
|
-
"<Table Name=\"#{self.name}\" Archive=\"#{self.archive}\" " +
|
194
|
-
"Alias=\"#{self.alias_name}\" xsi:type=\"tableType\"/>"
|
195
|
-
else
|
196
|
-
"<Table Name=\"#{self.name}\" Archive=\"#{self.archive}\" " +
|
197
|
-
"xsi:type=\"tableType\"/>"
|
198
|
-
end
|
199
|
-
end
|
200
|
-
end
|
201
|
-
|
202
|
-
class Table
|
203
|
-
def to_adqls
|
204
|
-
if self.alias_name
|
205
|
-
"#{self.name} #{self.alias_name}"
|
206
|
-
else
|
207
|
-
self.name
|
208
|
-
end
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
class XMatchTableAlias
|
213
|
-
def to_adqls
|
214
|
-
self.name
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
class DropTable
|
219
|
-
def to_adqls
|
220
|
-
"!#{self.name}"
|
221
|
-
end
|
222
|
-
end
|
223
|
-
|
224
|
-
class IntersectionSearch
|
225
|
-
def to_adqls
|
226
|
-
"#{self.cond1.to_adqls} AND #{self.cond2.to_adqls}"
|
227
|
-
end
|
228
|
-
|
229
|
-
def to_adqlx
|
230
|
-
intersection_search = "<Condition xsi:type=\"intersectionSearchType\">\n"
|
231
|
-
intersection_search << self.cond1.to_adqlx
|
232
|
-
intersection_search << self.cond2.to_adqlx
|
233
|
-
intersection_search << "</Condition>\n"
|
234
|
-
return intersection_search
|
235
|
-
end
|
236
|
-
end
|
237
|
-
|
238
|
-
class UnionSearch
|
239
|
-
def to_adqls
|
240
|
-
"#{self.cond1.to_adqls} OR #{self.cond2.to_adqls}"
|
241
|
-
end
|
242
|
-
|
243
|
-
def to_adqlx
|
244
|
-
union_search = "<Condition xsi:type=\"unionSearchType\">\n"
|
245
|
-
union_search << self.cond1.to_adqlx
|
246
|
-
union_search << self.cond2.to_adqlx
|
247
|
-
union_search << "</Condition>\n"
|
248
|
-
return union_search
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
class XMatch
|
253
|
-
def to_adqls
|
254
|
-
tables = self.tables.collect{|x| x.to_adqls}.join(', ')
|
255
|
-
"XMATCH(#{tables}) #{nature.value} #{sigma.value}"
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
class LikePred
|
260
|
-
def to_adqls
|
261
|
-
"#{self.arg.to_adqls} LIKE #{self.pattern.to_adqls}"
|
262
|
-
end
|
263
|
-
|
264
|
-
def to_adqlx
|
265
|
-
like_pred = "<Condition xsi:type=\"likePredType\">\n"
|
266
|
-
like_pred << self.arg.to_adqlx('Arg') + "\n"
|
267
|
-
like_pred << self.pattern.to_adqlx('Pattern')
|
268
|
-
like_pred << "</Condition>\n"
|
269
|
-
|
270
|
-
return like_pred
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
class NotLikePred
|
275
|
-
def to_adqls
|
276
|
-
"#{self.arg.to_adqls} NOT LIKE #{self.pattern.to_adqls}"
|
277
|
-
end
|
278
|
-
end
|
279
|
-
|
280
|
-
class SubQuerySet
|
281
|
-
def to_adqls
|
282
|
-
self.selection.to_adqls
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
class ClosedSearch
|
287
|
-
def to_adqls
|
288
|
-
"(#{self.condition.to_adqls})"
|
289
|
-
end
|
290
|
-
end
|
291
|
-
|
292
|
-
class ComparisonPred
|
293
|
-
def to_adqls
|
294
|
-
"#{self.arg1.to_adqls} #{self.comparison.to_adqls} #{self.arg2.to_adqls}"
|
295
|
-
end
|
296
|
-
|
297
|
-
def to_adqlx
|
298
|
-
comparison_pred = "<Condition xsi:type=\"comparisonPredType\" Comparison=\"#{self.comparison.to_adqlx}\">\n"
|
299
|
-
comparison_pred << self.arg1.to_adqlx('Arg') + "\n"
|
300
|
-
comparison_pred << self.arg2.to_adqlx('Arg')
|
301
|
-
comparison_pred << "</Condition>\n"
|
302
|
-
return comparison_pred
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
|
-
class BetweenPred
|
307
|
-
def to_adqls
|
308
|
-
"#{self.arg1.to_adqls} BETWEEN #{self.arg2.to_adqls} AND #{self.arg3.to_adqls}"
|
309
|
-
end
|
310
|
-
|
311
|
-
def to_adqlx
|
312
|
-
between_pred = "<Condition xsi:type=\"betweenPredType\">\n"
|
313
|
-
between_pred << self.arg1.to_adqlx('Arg') + "\n"
|
314
|
-
between_pred << self.arg2.to_adqlx('Arg')
|
315
|
-
between_pred << self.arg3.to_adqlx('Arg')
|
316
|
-
between_pred << "</Condition>\n"
|
317
|
-
return between_pred
|
318
|
-
end
|
319
|
-
end
|
320
|
-
|
321
|
-
class NotBetweenPred
|
322
|
-
def to_adqls
|
323
|
-
"#{self.arg1.to_adqls} NOT BETWEEN #{self.arg2.to_adqls} AND #{self.arg3.to_adqls}"
|
324
|
-
end
|
325
|
-
end
|
326
|
-
|
327
|
-
class Circle
|
328
|
-
def to_adqls
|
329
|
-
"#{self.shape.to_adqls} #{self.system.to_adqls} #{self.ra.to_adqls} #{self.dec.to_adqls} #{self.radius.to_adqls}"
|
330
|
-
end
|
331
|
-
|
332
|
-
def to_adqlx
|
333
|
-
circle = "xsi:type=\"reg:circleType\" unit=\"deg\">\n"
|
334
|
-
circle << "<reg:Center>#{self.ra.value} #{self.dec.value}</reg:Center>\n"
|
335
|
-
circle << "<reg:Radius>#{self.radius.value}</reg:Radius>\n"
|
336
|
-
return circle
|
337
|
-
end
|
338
|
-
end
|
339
|
-
|
340
|
-
class Box
|
341
|
-
def to_adqls
|
342
|
-
"#{self.shape.to_adqls} #{self.system.to_adqls} " +
|
343
|
-
"#{self.ra.to_adqls} #{self.dec.to_adqls} " +
|
344
|
-
"#{self.dra.to_adqls} #{self.ddec.to_adqls}"
|
345
|
-
end
|
346
|
-
|
347
|
-
def to_adqlx
|
348
|
-
box = "xsi:type=\"reg:boxType\">\n"
|
349
|
-
box << "<reg:Center>#{self.ra.value} #{self.dec.value}</reg:Center>\n"
|
350
|
-
box << "<reg:Size>#{self.dra.value} #{self.ddec.value}</reg:Size>\n"
|
351
|
-
return box
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
class RegionSearch
|
356
|
-
def to_adqls
|
357
|
-
"Region('#{self.shape.to_adqls}')"
|
358
|
-
end
|
359
|
-
|
360
|
-
def to_adqlx
|
361
|
-
region = "<Condition xsi:type=\"regionSearchType\" intersection=\"#{self.intersection.value}\">\n"
|
362
|
-
region << "<Region "
|
363
|
-
|
364
|
-
region << self.shape.to_adqlx
|
365
|
-
|
366
|
-
region << "</Region>\n"
|
367
|
-
region << "</Condition>\n"
|
368
|
-
return region
|
369
|
-
end
|
370
|
-
end
|
371
|
-
|
372
|
-
class InverseSearch
|
373
|
-
def to_adqls
|
374
|
-
"NOT #{self.condition.to_adqls}"
|
375
|
-
end
|
376
|
-
end
|
377
|
-
|
378
|
-
class Having
|
379
|
-
def to_adqls
|
380
|
-
"HAVING #{self.condition.to_adqls}"
|
381
|
-
end
|
382
|
-
end
|
383
|
-
|
384
|
-
class GroupBy
|
385
|
-
def to_adqls
|
386
|
-
cols = self.columns.collect{|x| x.to_adqls}.join(', ')
|
387
|
-
"GROUP BY #{cols}"
|
388
|
-
end
|
389
|
-
end
|
390
|
-
|
391
|
-
class Where
|
392
|
-
def to_adqls
|
393
|
-
"WHERE #{self.condition.to_adqls}" if self.condition
|
394
|
-
end
|
395
|
-
|
396
|
-
def to_adqlx
|
397
|
-
if self.condition
|
398
|
-
where = "<Where>\n"
|
399
|
-
where << self.condition.to_adqlx
|
400
|
-
where << "\n</Where>\n"
|
401
|
-
return where
|
402
|
-
end
|
403
|
-
end
|
404
|
-
end
|
405
|
-
|
406
|
-
class From
|
407
|
-
def to_adqls
|
408
|
-
tables = self.tables.collect{|x| x.to_adqls}.join(', ')
|
409
|
-
"FROM #{tables}"
|
410
|
-
end
|
411
|
-
|
412
|
-
def to_adqlx
|
413
|
-
from = "<From>\n"
|
414
|
-
from << self.tables.collect{|x| x.to_adqlx}.join("\n")
|
415
|
-
from << "\n</From>\n"
|
416
|
-
|
417
|
-
return from
|
418
|
-
end
|
419
|
-
end
|
420
|
-
|
421
|
-
class SelectionList
|
422
|
-
def to_adqls
|
423
|
-
self.items.collect{|x| x.to_adqls}.join(', ')
|
424
|
-
end
|
425
|
-
|
426
|
-
def to_adqlx
|
427
|
-
selection_list = "<SelectionList>\n"
|
428
|
-
selection_list << self.items.collect{|x| x.to_adqlx('Item')}.join("\n")
|
429
|
-
selection_list << "\n</SelectionList>\n"
|
430
|
-
|
431
|
-
return selection_list
|
432
|
-
end
|
433
|
-
end
|
434
|
-
|
435
|
-
class SelectionLimit
|
436
|
-
def to_adqls
|
437
|
-
"TOP #{self.top}"
|
438
|
-
end
|
439
|
-
end
|
440
|
-
|
441
|
-
class Into
|
442
|
-
def to_adqls
|
443
|
-
"INTO #{self.table_name}"
|
444
|
-
end
|
445
|
-
end
|
446
|
-
|
447
|
-
class OrderDirection
|
448
|
-
def to_adqls
|
449
|
-
self.value
|
450
|
-
end
|
451
|
-
end
|
452
|
-
|
453
|
-
class OrderOption
|
454
|
-
def to_adqls
|
455
|
-
self.direction.to_adqls
|
456
|
-
end
|
457
|
-
end
|
458
|
-
|
459
|
-
class Order
|
460
|
-
def to_adqls
|
461
|
-
if self.order
|
462
|
-
"#{self.expression.to_adqls} #{self.order.to_adqls}"
|
463
|
-
else
|
464
|
-
"#{self.expression.to_adqls}"
|
465
|
-
end
|
466
|
-
end
|
467
|
-
end
|
468
|
-
|
469
|
-
class OrderExpression
|
470
|
-
def to_adqls
|
471
|
-
items = self.items.collect{|x| x.to_adqls}.join(', ')
|
472
|
-
"ORDER BY #{items}"
|
473
|
-
end
|
474
|
-
end
|
475
|
-
|
476
|
-
class ConstantListSet
|
477
|
-
def to_adqls
|
478
|
-
self.items.collect{ |x|
|
479
|
-
if x.is_a?(NumberType)
|
480
|
-
x.to_adqls
|
481
|
-
else
|
482
|
-
"\"#{x.to_adqls}\""
|
483
|
-
end
|
484
|
-
}.join(', ')
|
485
|
-
end
|
486
|
-
end
|
487
|
-
|
488
|
-
class InclusiveSearch
|
489
|
-
def to_adqls
|
490
|
-
"#{self.expression.to_adqls} IN (#{self.set.to_adqls})"
|
491
|
-
end
|
492
|
-
end
|
493
|
-
|
494
|
-
class ExclusiveSearch
|
495
|
-
def to_adqls
|
496
|
-
"#{self.expression.to_adqls} NOT IN (#{self.set.to_adqls})"
|
497
|
-
end
|
498
|
-
end
|
499
|
-
|
500
|
-
class Select
|
501
|
-
def to_adqls
|
502
|
-
select = 'SELECT'
|
503
|
-
select << " #{self.allow.to_adqls}" if self.allow
|
504
|
-
select << " #{self.restrict.to_adqls}" if self.restrict
|
505
|
-
select << " #{self.selection_list.to_adqls}"
|
506
|
-
select << " #{self.in_to.to_adqls}" if self.in_to
|
507
|
-
select << " #{self.from.to_adqls}" if self.from
|
508
|
-
select << " #{self.where.to_adqls}" if self.where
|
509
|
-
select << " #{self.group_by.to_adqls}" if self.group_by
|
510
|
-
select << " #{self.having.to_adqls}" if self.having
|
511
|
-
select << " #{self.order_by.to_adqls}" if self.order_by
|
512
|
-
|
513
|
-
return select
|
514
|
-
end
|
515
|
-
|
516
|
-
def to_adqlx
|
517
|
-
adqlx = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
518
|
-
"<Select xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
|
519
|
-
"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" " +
|
520
|
-
"xmlns=\"http://www.ivoa.net/xml/ADQL/v0.9\" " +
|
521
|
-
"xmlns:reg=\"http://www.ivoa.net/xml/STC/STCregion/v1.20\">\n"
|
522
|
-
|
523
|
-
# adqlx << " #{self.allow.to_adqlx}" if self.allow
|
524
|
-
# adqlx << " #{self.restrict.to_adqlx}" if self.restrict
|
525
|
-
adqlx << " #{self.selection_list.to_adqlx}"
|
526
|
-
# adqlx << " #{self.in_to.to_adqlx}" if self.in_to
|
527
|
-
adqlx << " #{self.from.to_adqlx}" if self.from
|
528
|
-
adqlx << " #{self.where.to_adqlx}" if self.where
|
529
|
-
# adqlx << " #{self.group_by.to_adqlx}" if self.group_by
|
530
|
-
# adqlx << " #{self.having.to_adqlx}" if self.having
|
531
|
-
# adqlx << " #{self.order_by.to_adqlx}" if self.order_by
|
532
|
-
adqlx << "</Select>"
|
533
|
-
|
534
|
-
return adqlx
|
535
|
-
end
|
536
|
-
end
|
537
|
-
|
538
|
-
class UserDefinedFunction
|
539
|
-
def to_adqls
|
540
|
-
params = ''
|
541
|
-
if self.params and self.params.size > 0
|
542
|
-
params = self.params.collect{|x| x.to_adqls}.join(', ')
|
543
|
-
end
|
544
|
-
"#{self.name}(#{params})"
|
545
|
-
end
|
546
|
-
end
|
547
|
-
|
548
|
-
class JointTableQualifier
|
549
|
-
def to_adqls
|
550
|
-
self.value
|
551
|
-
end
|
552
|
-
end
|
553
|
-
|
554
|
-
class JoinTable
|
555
|
-
def to_adqls
|
556
|
-
"#{self.qualifier.to_adqls} #{self.tables.to_adqls} ON #{self.condition.to_adqls}"
|
557
|
-
end
|
558
|
-
end
|
559
|
-
|
560
|
-
class ArrayOfFromTable
|
561
|
-
def to_adqls
|
562
|
-
self.from_tables.collect{|x| x.to_adqls}.join(', ')
|
563
|
-
end
|
564
|
-
end
|
565
|
-
|
566
|
-
class Unit
|
567
|
-
def to_adqls
|
568
|
-
self.unit
|
569
|
-
end
|
570
|
-
end
|
571
|
-
end
|
572
|
-
|
573
|
-
end
|