gda 1.1.1 → 1.1.2
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.
- checksums.yaml +4 -4
- data/{README.rdoc → README.md} +0 -0
- data/ext/gda/gda_provider.c +1 -1
- data/lib/gda/version.rb +5 -0
- data/lib/gda.rb +1 -3
- metadata +9 -96
- data/.autotest +0 -12
- data/Rakefile +0 -34
- data/test/helper.rb +0 -17
- data/test/sqllog.sqlite3 +0 -0
- data/test/test_dot_visitor.rb +0 -43
- data/test/test_gda.rb +0 -58
- data/test/test_max_depth.rb +0 -19
- data/test/test_node_attributes.rb +0 -159
- data/test/test_nodes.rb +0 -31
- data/test/test_statement.rb +0 -112
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 552887449432426def5ab031502569f211e5a189202b6f2b548cc0fbd354f9e2
|
4
|
+
data.tar.gz: a590d4fa722c42553e2d95f79a1f825c91cf26ea234f6d2a2a5f44d06a57b9c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d392a3794b75a506bb2fd541cb0406ea23135d436f346be56d9974457abd06f7045b3bf6623798045fdc69e4424f9a1cd83eb8a1f065fa3a2a74726ef577379b
|
7
|
+
data.tar.gz: 7d2e04c3b9a1d0b3ecb311b68545870c51b048509133ed592da314528703a2b7e1ed0e3127e6661199ce2c35712e4c80beacd5e0cc722b2e5e05acba115f8b74
|
data/{README.rdoc → README.md}
RENAMED
File without changes
|
data/ext/gda/gda_provider.c
CHANGED
@@ -7,7 +7,7 @@ static VALUE name(VALUE self)
|
|
7
7
|
GdaServerProvider * pr;
|
8
8
|
Data_Get_Struct(self, GdaServerProvider, pr);
|
9
9
|
|
10
|
-
return
|
10
|
+
return rb_str_new2(gda_server_provider_get_name(pr));
|
11
11
|
}
|
12
12
|
|
13
13
|
static VALUE find(VALUE klass, VALUE string)
|
data/lib/gda/version.rb
ADDED
data/lib/gda.rb
CHANGED
metadata
CHANGED
@@ -1,91 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: minitest
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '5.14'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '5.14'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake-compiler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 0.4.1
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 0.4.1
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: sqlite3
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: rdoc
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '4.0'
|
62
|
-
- - "<"
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: '7'
|
65
|
-
type: :development
|
66
|
-
prerelease: false
|
67
|
-
version_requirements: !ruby/object:Gem::Requirement
|
68
|
-
requirements:
|
69
|
-
- - ">="
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: '4.0'
|
72
|
-
- - "<"
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
version: '7'
|
75
|
-
- !ruby/object:Gem::Dependency
|
76
|
-
name: hoe
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
78
|
-
requirements:
|
79
|
-
- - "~>"
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
version: '3.23'
|
82
|
-
type: :development
|
83
|
-
prerelease: false
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
85
|
-
requirements:
|
86
|
-
- - "~>"
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
version: '3.23'
|
11
|
+
date: 2019-03-20 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
89
13
|
description: |-
|
90
14
|
An SQL parser. Wraps libgda in a loving embrace to give you a ruby level SQL
|
91
15
|
parser.
|
@@ -97,13 +21,10 @@ extensions:
|
|
97
21
|
extra_rdoc_files:
|
98
22
|
- CHANGELOG.rdoc
|
99
23
|
- Manifest.txt
|
100
|
-
- README.rdoc
|
101
24
|
files:
|
102
|
-
- ".autotest"
|
103
25
|
- CHANGELOG.rdoc
|
104
26
|
- Manifest.txt
|
105
|
-
- README.
|
106
|
-
- Rakefile
|
27
|
+
- README.md
|
107
28
|
- ext/gda/extconf.rb
|
108
29
|
- ext/gda/gda.c
|
109
30
|
- ext/gda/gda.h
|
@@ -114,23 +35,15 @@ files:
|
|
114
35
|
- ext/gda/gda_statement.c
|
115
36
|
- ext/gda/gda_statement.h
|
116
37
|
- lib/gda.rb
|
38
|
+
- lib/gda/version.rb
|
117
39
|
- lib/gda/visitors/dot.rb
|
118
40
|
- lib/gda/visitors/each.rb
|
119
41
|
- lib/gda/visitors/max_depth.rb
|
120
42
|
- lib/gda/visitors/visitor.rb
|
121
|
-
- test/helper.rb
|
122
|
-
- test/sqllog.sqlite3
|
123
|
-
- test/test_dot_visitor.rb
|
124
|
-
- test/test_gda.rb
|
125
|
-
- test/test_max_depth.rb
|
126
|
-
- test/test_node_attributes.rb
|
127
|
-
- test/test_nodes.rb
|
128
|
-
- test/test_statement.rb
|
129
43
|
homepage: http://github.com/tenderlove/gda
|
130
44
|
licenses:
|
131
45
|
- MIT
|
132
|
-
metadata:
|
133
|
-
homepage_uri: http://github.com/tenderlove/gda
|
46
|
+
metadata: {}
|
134
47
|
post_install_message:
|
135
48
|
rdoc_options:
|
136
49
|
- "--main"
|
@@ -141,14 +54,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
141
54
|
requirements:
|
142
55
|
- - ">="
|
143
56
|
- !ruby/object:Gem::Version
|
144
|
-
version:
|
57
|
+
version: 2.5.0
|
145
58
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
146
59
|
requirements:
|
147
60
|
- - ">="
|
148
61
|
- !ruby/object:Gem::Version
|
149
|
-
version:
|
62
|
+
version: 2.5.0
|
150
63
|
requirements: []
|
151
|
-
rubygems_version: 3.
|
64
|
+
rubygems_version: 3.4.0.dev
|
152
65
|
signing_key:
|
153
66
|
specification_version: 4
|
154
67
|
summary: An SQL parser
|
data/.autotest
DELETED
@@ -1,12 +0,0 @@
|
|
1
|
-
require "autotest/restart"
|
2
|
-
require 'rbconfig'
|
3
|
-
|
4
|
-
Autotest.add_hook :initialize do |at|
|
5
|
-
at.find_directories = ARGV unless ARGV.empty?
|
6
|
-
at.testlib = "minitest/autorun"
|
7
|
-
end
|
8
|
-
|
9
|
-
Autotest.add_hook :run_command do |at|
|
10
|
-
at.unit_diff = 'cat'
|
11
|
-
system "ruby -S rake compile"
|
12
|
-
end
|
data/Rakefile
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
# -*- ruby -*-
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'hoe'
|
5
|
-
|
6
|
-
Hoe.plugins.delete :rubyforge
|
7
|
-
Hoe.plugin :minitest
|
8
|
-
Hoe.plugin :gemspec # `gem install hoe-gemspec`
|
9
|
-
Hoe.plugin :git # `gem install hoe-git`
|
10
|
-
|
11
|
-
Hoe.spec 'gda' do
|
12
|
-
developer('Aaron Patterson', 'tenderlove@ruby-lang.org')
|
13
|
-
self.readme_file = 'README.rdoc'
|
14
|
-
self.history_file = 'CHANGELOG.rdoc'
|
15
|
-
self.extra_rdoc_files = FileList['*.rdoc']
|
16
|
-
|
17
|
-
extra_dev_deps << ['rake-compiler', '>= 0.4.1']
|
18
|
-
extra_dev_deps << ['sqlite3']
|
19
|
-
|
20
|
-
self.spec_extras = {
|
21
|
-
:extensions => ["ext/gda/extconf.rb"],
|
22
|
-
:required_ruby_version => '>= 1.9.3'
|
23
|
-
}
|
24
|
-
|
25
|
-
require "rake/extensiontask"
|
26
|
-
|
27
|
-
Rake::ExtensionTask.new "gda", spec do |ext|
|
28
|
-
ext.lib_dir = File.join(*['lib', ENV['FAT_DIR']].compact)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
task :test => :compile
|
33
|
-
|
34
|
-
# vim: syntax=ruby
|
data/test/helper.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'gda'
|
3
|
-
require 'sqlite3'
|
4
|
-
|
5
|
-
module GDA
|
6
|
-
class TestCase < Minitest::Test
|
7
|
-
@@rails_sql = nil
|
8
|
-
|
9
|
-
def self.rails_sql
|
10
|
-
return @@rails_sql if @@rails_sql
|
11
|
-
|
12
|
-
db_file = File.join File.dirname(__FILE__), 'sqllog.sqlite3'
|
13
|
-
db = SQLite3::Database.new db_file
|
14
|
-
@@rails_sql = db.execute('SELECT * FROM sqllog').map(&:first)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
data/test/sqllog.sqlite3
DELETED
Binary file
|
data/test/test_dot_visitor.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module GDA
|
4
|
-
class TestDotVisitor < TestCase
|
5
|
-
attr_reader :parser
|
6
|
-
|
7
|
-
class TestViz < Visitors::Dot
|
8
|
-
def initialize tc
|
9
|
-
super()
|
10
|
-
@tc = tc
|
11
|
-
end
|
12
|
-
|
13
|
-
Visitors::Visitor.private_instance_methods.grep(/^visit_(.*)/) do |method|
|
14
|
-
next if superclass.private_instance_methods(false).include?(method)
|
15
|
-
|
16
|
-
klass = $1.split('_').inject(Object) { |k,c| k.const_get c }
|
17
|
-
|
18
|
-
define_method(method) do |node|
|
19
|
-
flunk "#{klass} (#{method}) not tested yet"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
def method_missing m, *args
|
24
|
-
return super unless @tc.respond_to?(m)
|
25
|
-
|
26
|
-
@tc.send m, *args
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def setup
|
31
|
-
super
|
32
|
-
@parser = GDA::SQL::Parser.new
|
33
|
-
@viz = TestViz.new(self)
|
34
|
-
end
|
35
|
-
|
36
|
-
rails_sql.uniq.each do |sql|
|
37
|
-
define_method(:"test_#{sql}") do
|
38
|
-
stmt = parser.parse sql
|
39
|
-
@viz.accept stmt.ast
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
data/test/test_gda.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module GDA
|
4
|
-
class TestParser < TestCase
|
5
|
-
attr_reader :parser
|
6
|
-
|
7
|
-
def setup
|
8
|
-
super
|
9
|
-
@parser = GDA::SQL::Parser.new
|
10
|
-
end
|
11
|
-
|
12
|
-
def test_split
|
13
|
-
assert_equal ['test', '"table"'], GDA.sql_identifier_split("test.\"table\"")
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_parses
|
17
|
-
assert parser.parse('SELECT * FROM FOO')
|
18
|
-
end
|
19
|
-
|
20
|
-
def test_providers
|
21
|
-
assert_kind_of Array, GDA::SQL.providers
|
22
|
-
assert_operator GDA::SQL.providers.length, :>, 0
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_get_provider
|
26
|
-
assert GDA::SQL::Provider.find SQL.providers.first
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_provider_name
|
30
|
-
name = SQL.providers.first
|
31
|
-
provider = SQL::Provider.find name
|
32
|
-
assert_equal name, provider.name
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_pg_parser
|
36
|
-
provider = SQL::Provider.find "PostgreSQL"
|
37
|
-
skip "don't have PG provider" unless provider
|
38
|
-
assert provider.parser.parse 'INSERT INTO "accounts" ("credit_limit", "firm_id", "firm_name") VALUES ($1, $2, $3) RETURNING "id"'
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_mysql_parser
|
42
|
-
provider = SQL::Provider.find "MySQL"
|
43
|
-
skip "don't have MySQL provider" unless provider
|
44
|
-
assert provider.parser.parse 'SELECT topics.* FROM topics WHERE topics.id = 147 LIMIT 1'
|
45
|
-
|
46
|
-
end
|
47
|
-
|
48
|
-
def test_id_quote
|
49
|
-
provider = SQL::Provider.find "MySQL"
|
50
|
-
skip "don't have MySQL provider" unless provider
|
51
|
-
assert_equal '"1foo"', provider.quote("1foo")
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_error
|
55
|
-
assert_nil SQL::Provider.find "asdfasdfadsf"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|
data/test/test_max_depth.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module GDA
|
4
|
-
module Visitors
|
5
|
-
class TestMaxDepth < TestCase
|
6
|
-
attr_reader :parser
|
7
|
-
|
8
|
-
def setup
|
9
|
-
super
|
10
|
-
@parser = GDA::SQL::Parser.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_depth
|
14
|
-
stmt = parser.parse('SELECT * FROM FOO')
|
15
|
-
assert_equal 5, stmt.ast.max_depth
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
@@ -1,159 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module GDA
|
4
|
-
class TestNodeAttributes < TestCase
|
5
|
-
attr_reader :parser
|
6
|
-
|
7
|
-
class AttributeTest < Visitors::Visitor
|
8
|
-
def initialize tc
|
9
|
-
@tc = tc
|
10
|
-
end
|
11
|
-
|
12
|
-
private
|
13
|
-
|
14
|
-
def visit_Array node
|
15
|
-
node.each { |n| accept n }
|
16
|
-
end
|
17
|
-
|
18
|
-
def visit_GDA_Nodes_Select node
|
19
|
-
assert_respond_to node, :distinct?
|
20
|
-
super
|
21
|
-
end
|
22
|
-
|
23
|
-
def visit_GDA_Nodes_Unknown node
|
24
|
-
super
|
25
|
-
end
|
26
|
-
|
27
|
-
def visit_GDA_Nodes_Insert node
|
28
|
-
assert_string node, :on_conflict
|
29
|
-
super
|
30
|
-
end
|
31
|
-
|
32
|
-
def visit_GDA_Nodes_SelectField node
|
33
|
-
[:field_name, :table_name, :as].each do |m|
|
34
|
-
assert_string node, m
|
35
|
-
end
|
36
|
-
super
|
37
|
-
end
|
38
|
-
|
39
|
-
def visit_GDA_Nodes_Expr node
|
40
|
-
assert_string node, :value
|
41
|
-
assert_string node, :cast_as
|
42
|
-
super
|
43
|
-
end
|
44
|
-
|
45
|
-
def visit_GDA_Nodes_Function node
|
46
|
-
assert_string node, :function_name
|
47
|
-
super
|
48
|
-
end
|
49
|
-
|
50
|
-
def visit_GDA_Nodes_From node
|
51
|
-
super
|
52
|
-
end
|
53
|
-
|
54
|
-
def visit_GDA_Nodes_Table node
|
55
|
-
assert_string node, :table_name
|
56
|
-
super
|
57
|
-
end
|
58
|
-
|
59
|
-
def visit_GDA_Nodes_Update node
|
60
|
-
assert_string node, :on_conflict
|
61
|
-
super
|
62
|
-
end
|
63
|
-
|
64
|
-
def visit_GDA_Nodes_Operation node
|
65
|
-
assert_string node, :operator
|
66
|
-
super
|
67
|
-
end
|
68
|
-
|
69
|
-
def visit_GDA_Nodes_Delete node
|
70
|
-
super
|
71
|
-
end
|
72
|
-
|
73
|
-
def visit_GDA_Nodes_Order node
|
74
|
-
assert_boolean node, :asc
|
75
|
-
assert_string node, :collation_name
|
76
|
-
super
|
77
|
-
end
|
78
|
-
|
79
|
-
def visit_GDA_Nodes_RollbackSavepoint node
|
80
|
-
assert_string node, :__type__
|
81
|
-
assert_string node, :isolation_level
|
82
|
-
assert_string node, :trans_mode
|
83
|
-
assert_string node, :trans_name
|
84
|
-
super
|
85
|
-
end
|
86
|
-
|
87
|
-
alias :visit_GDA_Nodes_Begin :visit_GDA_Nodes_RollbackSavepoint
|
88
|
-
alias :visit_GDA_Nodes_Savepoint :visit_GDA_Nodes_RollbackSavepoint
|
89
|
-
alias :visit_GDA_Nodes_DeleteSavepoint :visit_GDA_Nodes_RollbackSavepoint
|
90
|
-
alias :visit_GDA_Nodes_Commit :visit_GDA_Nodes_RollbackSavepoint
|
91
|
-
alias :visit_GDA_Nodes_Rollback :visit_GDA_Nodes_RollbackSavepoint
|
92
|
-
|
93
|
-
def visit_GDA_Nodes_Field node
|
94
|
-
assert_string node, :field_name
|
95
|
-
super
|
96
|
-
end
|
97
|
-
|
98
|
-
def visit_GDA_Nodes_Join node
|
99
|
-
assert_string node, :join_type
|
100
|
-
assert_int node, :position
|
101
|
-
super
|
102
|
-
end
|
103
|
-
|
104
|
-
def visit_GDA_Nodes_Target node
|
105
|
-
assert_string node, :table_name
|
106
|
-
assert_string node, :as
|
107
|
-
super
|
108
|
-
end
|
109
|
-
|
110
|
-
def assert_boolean node, m
|
111
|
-
assert_respond_to node, m
|
112
|
-
if node.send(m)
|
113
|
-
assert_equal(true, node.send(m))
|
114
|
-
else
|
115
|
-
assert_equal(false, node.send(m))
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def assert_string node, m
|
120
|
-
assert_respond_to node, m
|
121
|
-
assert_kind_of(String, node.send(m)) if node.send(m)
|
122
|
-
end
|
123
|
-
|
124
|
-
def assert_int node, m
|
125
|
-
assert_respond_to node, m
|
126
|
-
assert_kind_of(Numeric, node.send(m)) if node.send(m)
|
127
|
-
end
|
128
|
-
|
129
|
-
Visitors::Visitor.private_instance_methods.grep(/^visit_(.*)/) do |method|
|
130
|
-
next if private_instance_methods(false).include?(method)
|
131
|
-
|
132
|
-
klass = $1.split('_').inject(Object) { |k,c| k.const_get c }
|
133
|
-
|
134
|
-
define_method(method) do |node|
|
135
|
-
flunk "#{klass} (#{method}) not tested yet"
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
def method_missing m, *args
|
140
|
-
return super unless @tc.respond_to?(m)
|
141
|
-
|
142
|
-
@tc.send m, *args
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
def setup
|
147
|
-
super
|
148
|
-
@parser = GDA::SQL::Parser.new
|
149
|
-
@attr_tester = AttributeTest.new(self)
|
150
|
-
end
|
151
|
-
|
152
|
-
rails_sql.uniq.each do |sql|
|
153
|
-
define_method(:"test_#{sql}") do
|
154
|
-
stmt = parser.parse sql
|
155
|
-
@attr_tester.accept stmt.ast
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
end
|
data/test/test_nodes.rb
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module GDA
|
4
|
-
class TestNodes < TestCase
|
5
|
-
attr_reader :parser
|
6
|
-
|
7
|
-
def setup
|
8
|
-
super
|
9
|
-
@parser = GDA::SQL::Parser.new
|
10
|
-
end
|
11
|
-
|
12
|
-
rails_sql.uniq.each do |sql|
|
13
|
-
define_method(:"test_#{sql}") do
|
14
|
-
stmt = parser.parse sql
|
15
|
-
stmt.ast.each do |node|
|
16
|
-
assert node
|
17
|
-
end
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_depth
|
22
|
-
stmt = parser.parse 'SELECT * FROM OMG WHERE 1 = 10'
|
23
|
-
assert_operator stmt.ast.to_a.length, :>, 1
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_not_equal_operator
|
27
|
-
stmt = parser.parse 'SELECT id FROM comments WHERE issue_id = 1 AND type <> 3'
|
28
|
-
assert stmt.ast.is_a?(GDA::Nodes::Select)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
data/test/test_statement.rb
DELETED
@@ -1,112 +0,0 @@
|
|
1
|
-
require 'helper'
|
2
|
-
|
3
|
-
module GDA
|
4
|
-
module SQL
|
5
|
-
class TestUnion < TestCase
|
6
|
-
attr_reader :parser, :stmt
|
7
|
-
|
8
|
-
def setup
|
9
|
-
@parser = GDA::SQL::Parser.new
|
10
|
-
sql = <<-SQL.gsub(/^ */, "")
|
11
|
-
SELECT id FROM posts WHERE actor_id = 1 AND actor_type = 1
|
12
|
-
UNION
|
13
|
-
SELECT id FROM posts WHERE actor_id = 1 AND actor_type = 3
|
14
|
-
SQL
|
15
|
-
|
16
|
-
@stmt = parser.parse(sql)
|
17
|
-
end
|
18
|
-
|
19
|
-
def test_union_query
|
20
|
-
assert_equal 2, stmt.ast.stmt_list.count
|
21
|
-
assert_equal 0, stmt.ast.compound_type, "should be an UNION type"
|
22
|
-
end
|
23
|
-
|
24
|
-
def test_union_query_visitor
|
25
|
-
visitor = Class.new(Visitors::Visitor) do
|
26
|
-
attr_reader :selects_count
|
27
|
-
def visit_GDA_Nodes_Select(*)
|
28
|
-
@selects_count ||= 0
|
29
|
-
@selects_count += 1
|
30
|
-
end
|
31
|
-
end.new
|
32
|
-
|
33
|
-
visitor.accept stmt.ast
|
34
|
-
assert_equal 2, visitor.selects_count
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
class TestStatement < TestCase
|
39
|
-
attr_reader :parser, :stmt
|
40
|
-
|
41
|
-
def setup
|
42
|
-
super
|
43
|
-
@parser = GDA::SQL::Parser.new
|
44
|
-
@stmt = parser.parse 'SELECT * FROM FOO WHERE 1 = 1 GROUP BY omg HAVING omg(id) < 2 ORDER BY foo, bar LIMIT 50 OFFSET 2'
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_serialize
|
48
|
-
assert stmt.serialize
|
49
|
-
end
|
50
|
-
|
51
|
-
def test_from
|
52
|
-
assert stmt.ast
|
53
|
-
assert stmt.ast.from
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_distinct_expr
|
57
|
-
assert_nil stmt.ast.distinct_expr
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_expr_list
|
61
|
-
assert_equal 1, stmt.ast.expr_list.length
|
62
|
-
|
63
|
-
stmt.ast.expr_list.each do |node|
|
64
|
-
assert node
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_where_cond
|
69
|
-
assert stmt.ast.where_cond
|
70
|
-
end
|
71
|
-
|
72
|
-
def test_group_by
|
73
|
-
assert stmt.ast.group_by
|
74
|
-
stmt.ast.group_by.each do |node|
|
75
|
-
assert node
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_having_cond
|
80
|
-
assert stmt.ast.having_cond
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_order_by
|
84
|
-
assert_equal 2, stmt.ast.order_by.length
|
85
|
-
stmt.ast.order_by.each do |node|
|
86
|
-
assert node
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def test_limit_count
|
91
|
-
assert stmt.ast.limit_count
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_limit_offset
|
95
|
-
assert stmt.ast.limit_offset
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_distinct?
|
99
|
-
refute stmt.ast.distinct?
|
100
|
-
end
|
101
|
-
|
102
|
-
def test_each
|
103
|
-
yielded = false
|
104
|
-
stmt.ast.each do |node|
|
105
|
-
yielded = true
|
106
|
-
assert node
|
107
|
-
end
|
108
|
-
assert yielded
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|