gda 1.0.0 → 1.1.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.
- checksums.yaml +5 -5
- data/README.rdoc +1 -6
- data/ext/gda/extconf.rb +6 -2
- data/ext/gda/gda.c +1 -1
- data/ext/gda/gda_nodes.c +32 -0
- data/ext/gda/gda_provider.c +1 -0
- data/ext/gda/gda_statement.c +3 -0
- data/lib/gda/visitors/visitor.rb +4 -0
- data/lib/gda.rb +1 -1
- data/test/helper.rb +1 -1
- data/test/test_gda.rb +3 -0
- data/test/test_nodes.rb +5 -0
- data/test/test_statement.rb +33 -0
- metadata +44 -44
- data/.gemtest +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 57c06ead700d0c7f320a74263ce3e5ecfe28015a5489d65d9f3c5faf96647709
|
4
|
+
data.tar.gz: dad5b08bd24a8c61f2294b045a7b5a5c822a048ed94d1c82ebf8b63413c54b6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d734598fe06db00664019f84b15680499a48e4b54ee7512970009c84cfac4831bba103edf87539f2ae5e20bbbd433a9eeb730d16e0767651fdfa8e6f030612e
|
7
|
+
data.tar.gz: 05f7689feb91287713fad9729d0af8b255ffa12c781892d1f3be5e84524b2853cd8492281d2dfeff8700ed14f78f87e02d60eba5075760439d6eca4bb6c775eb
|
data/README.rdoc
CHANGED
@@ -7,11 +7,6 @@
|
|
7
7
|
An SQL parser. Wraps libgda in a loving embrace to give you a ruby level SQL
|
8
8
|
parser.
|
9
9
|
|
10
|
-
== FEATURES/PROBLEMS:
|
11
|
-
|
12
|
-
* Not done yet
|
13
|
-
* Do not use
|
14
|
-
|
15
10
|
== SYNOPSIS:
|
16
11
|
|
17
12
|
parser = GDA::SQL::Parser.new
|
@@ -39,7 +34,7 @@ parser.
|
|
39
34
|
|
40
35
|
(The MIT License)
|
41
36
|
|
42
|
-
Copyright (c) 2012-
|
37
|
+
Copyright (c) 2012-2016 Aaron Patterson
|
43
38
|
|
44
39
|
Permission is hereby granted, free of charge, to any person obtaining
|
45
40
|
a copy of this software and associated documentation files (the
|
data/ext/gda/extconf.rb
CHANGED
@@ -2,12 +2,16 @@ require 'mkmf'
|
|
2
2
|
|
3
3
|
# :stopdoc:
|
4
4
|
|
5
|
-
ENV['PKG_CONFIG_PATH']
|
5
|
+
ENV['PKG_CONFIG_PATH'] ||= '/usr/local/lib/pkgconfig'
|
6
6
|
|
7
7
|
dir_config 'libgda'
|
8
8
|
|
9
9
|
def asplode missing
|
10
|
-
abort
|
10
|
+
abort <<-MSG
|
11
|
+
#{missing} is missing. Try 'brew install libgda' if you are on OSX and have homebrew installed.
|
12
|
+
You can also check https://github.com/GNOME/libgda for more info on how to install
|
13
|
+
the dependency.
|
14
|
+
MSG
|
11
15
|
end
|
12
16
|
|
13
17
|
pkg_config 'libgda-5.0'
|
data/ext/gda/gda.c
CHANGED
data/ext/gda/gda_nodes.c
CHANGED
@@ -23,6 +23,7 @@ VALUE cSavepoint;
|
|
23
23
|
VALUE cBegin;
|
24
24
|
VALUE cRollback;
|
25
25
|
VALUE cCommit;
|
26
|
+
VALUE cCompound;
|
26
27
|
|
27
28
|
#define WrapInteger(klass, type, lname) \
|
28
29
|
static VALUE rb_##klass##_##lname(VALUE self) \
|
@@ -146,6 +147,8 @@ WrapNode(cJoin, GdaSqlSelectJoin, expr);
|
|
146
147
|
WrapList(cJoin, GdaSqlSelectJoin, use);
|
147
148
|
WrapInteger(cJoin, GdaSqlSelectJoin, position);
|
148
149
|
|
150
|
+
WrapInteger(cCompound, GdaSqlStatementCompound, compound_type);
|
151
|
+
|
149
152
|
WrapList(cUnknown, GdaSqlStatementUnknown, expressions);
|
150
153
|
|
151
154
|
static VALUE distinct_p(VALUE self)
|
@@ -236,12 +239,36 @@ VALUE WrapAnyPart(VALUE stmt, GdaSqlAnyPart *part)
|
|
236
239
|
case GDA_SQL_ANY_SQL_SELECT_JOIN:
|
237
240
|
return Wrap(stmt, cJoin, part);
|
238
241
|
break;
|
242
|
+
case GDA_SQL_ANY_STMT_COMPOUND:
|
243
|
+
return Wrap(stmt, cCompound, part);
|
244
|
+
break;
|
239
245
|
default:
|
240
246
|
rb_raise(rb_eRuntimeError, "unknown node type: %d\n", part->type);
|
241
247
|
return Qnil;
|
242
248
|
}
|
243
249
|
}
|
244
250
|
|
251
|
+
|
252
|
+
static VALUE rb_cCompound_stmt_list(VALUE self)
|
253
|
+
{
|
254
|
+
GdaSqlStatementCompound * st;
|
255
|
+
GSList * list;
|
256
|
+
VALUE array;
|
257
|
+
VALUE stmt;
|
258
|
+
|
259
|
+
Data_Get_Struct(self, GdaSqlStatementCompound, st);
|
260
|
+
stmt = rb_iv_get(self, "stmt");
|
261
|
+
array = rb_ary_new();
|
262
|
+
|
263
|
+
for (list = st->stmt_list; list; list = list->next) {
|
264
|
+
GdaSqlStatement *sqlst = (GdaSqlStatement*) list->data;
|
265
|
+
VALUE obj = Wrap(stmt, cSelect, GDA_SQL_ANY_PART(sqlst->contents));
|
266
|
+
rb_ary_push(array, obj);
|
267
|
+
}
|
268
|
+
return array;
|
269
|
+
}
|
270
|
+
|
271
|
+
|
245
272
|
static VALUE rb_cInsert_values_list(VALUE self)
|
246
273
|
{
|
247
274
|
GdaSqlStatementInsert * st;
|
@@ -392,6 +419,7 @@ void Init_gda_nodes()
|
|
392
419
|
mNodes = rb_define_module_under(mGDA, "Nodes");
|
393
420
|
|
394
421
|
cNode = rb_define_class_under(mNodes, "Node", rb_cObject);
|
422
|
+
rb_undef_alloc_func(cNode);
|
395
423
|
|
396
424
|
cSelect = rb_define_class_under(mNodes, "Select", cNode);
|
397
425
|
rb_define_method(cSelect, "distinct?", distinct_p, 0);
|
@@ -477,6 +505,10 @@ void Init_gda_nodes()
|
|
477
505
|
cField = rb_define_class_under(mNodes, "Field", cNode);
|
478
506
|
WrapperMethod(cField, field_name);
|
479
507
|
|
508
|
+
cCompound = rb_define_class_under(mNodes, "Compound", cNode);
|
509
|
+
WrapperMethod(cCompound, compound_type);
|
510
|
+
WrapperMethod(cCompound, stmt_list);
|
511
|
+
|
480
512
|
cBegin = rb_define_class_under(mNodes, "Begin", cNode);
|
481
513
|
cRollback = rb_define_class_under(mNodes, "Rollback", cNode);
|
482
514
|
cCommit = rb_define_class_under(mNodes, "Commit", cNode);
|
data/ext/gda/gda_provider.c
CHANGED
@@ -52,6 +52,7 @@ static VALUE quote_str(VALUE self, VALUE str)
|
|
52
52
|
void Init_gda_provider()
|
53
53
|
{
|
54
54
|
cProvider = rb_define_class_under(mSQL, "Provider", rb_cObject);
|
55
|
+
rb_undef_alloc_func(cProvider);
|
55
56
|
rb_define_singleton_method(cProvider, "find", find, 1);
|
56
57
|
rb_define_method(cProvider, "name", name, 0);
|
57
58
|
rb_define_method(cProvider, "parser", parser, 0);
|
data/ext/gda/gda_statement.c
CHANGED
@@ -49,6 +49,9 @@ void Init_gda_statement()
|
|
49
49
|
cStatement = rb_define_class_under(mSQL, "Statement", rb_cObject);
|
50
50
|
cStructure = rb_define_class_under(mSQL, "Structure", rb_cObject);
|
51
51
|
|
52
|
+
rb_undef_alloc_func(cStatement);
|
53
|
+
rb_undef_alloc_func(cStructure);
|
54
|
+
|
52
55
|
rb_define_method(cStatement, "serialize", serialize, 0);
|
53
56
|
rb_define_method(cStatement, "structure", structure, 0);
|
54
57
|
rb_define_method(cStructure, "ast", ast, 0);
|
data/lib/gda/visitors/visitor.rb
CHANGED
data/lib/gda.rb
CHANGED
data/test/helper.rb
CHANGED
data/test/test_gda.rb
CHANGED
@@ -34,17 +34,20 @@ module GDA
|
|
34
34
|
|
35
35
|
def test_pg_parser
|
36
36
|
provider = SQL::Provider.find "PostgreSQL"
|
37
|
+
skip "don't have PG provider" unless provider
|
37
38
|
assert provider.parser.parse 'INSERT INTO "accounts" ("credit_limit", "firm_id", "firm_name") VALUES ($1, $2, $3) RETURNING "id"'
|
38
39
|
end
|
39
40
|
|
40
41
|
def test_mysql_parser
|
41
42
|
provider = SQL::Provider.find "MySQL"
|
43
|
+
skip "don't have MySQL provider" unless provider
|
42
44
|
assert provider.parser.parse 'SELECT topics.* FROM topics WHERE topics.id = 147 LIMIT 1'
|
43
45
|
|
44
46
|
end
|
45
47
|
|
46
48
|
def test_id_quote
|
47
49
|
provider = SQL::Provider.find "MySQL"
|
50
|
+
skip "don't have MySQL provider" unless provider
|
48
51
|
assert_equal '"1foo"', provider.quote("1foo")
|
49
52
|
end
|
50
53
|
|
data/test/test_nodes.rb
CHANGED
@@ -22,5 +22,10 @@ module GDA
|
|
22
22
|
stmt = parser.parse 'SELECT * FROM OMG WHERE 1 = 10'
|
23
23
|
assert_operator stmt.ast.to_a.length, :>, 1
|
24
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
|
25
30
|
end
|
26
31
|
end
|
data/test/test_statement.rb
CHANGED
@@ -2,6 +2,39 @@ require 'helper'
|
|
2
2
|
|
3
3
|
module GDA
|
4
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
|
+
|
5
38
|
class TestStatement < TestCase
|
6
39
|
attr_reader :parser, :stmt
|
7
40
|
|
metadata
CHANGED
@@ -1,85 +1,91 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-01-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.14'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '5.14'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rake-compiler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.4.1
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 0.4.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: sqlite3
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rdoc
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
61
|
+
version: '4.0'
|
62
|
+
- - "<"
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: '7'
|
62
65
|
type: :development
|
63
66
|
prerelease: false
|
64
67
|
version_requirements: !ruby/object:Gem::Requirement
|
65
68
|
requirements:
|
66
|
-
- -
|
69
|
+
- - ">="
|
67
70
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
71
|
+
version: '4.0'
|
72
|
+
- - "<"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '7'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: hoe
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
|
-
- - ~>
|
79
|
+
- - "~>"
|
74
80
|
- !ruby/object:Gem::Version
|
75
|
-
version: '3.
|
81
|
+
version: '3.23'
|
76
82
|
type: :development
|
77
83
|
prerelease: false
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
79
85
|
requirements:
|
80
|
-
- - ~>
|
86
|
+
- - "~>"
|
81
87
|
- !ruby/object:Gem::Version
|
82
|
-
version: '3.
|
88
|
+
version: '3.23'
|
83
89
|
description: |-
|
84
90
|
An SQL parser. Wraps libgda in a loving embrace to give you a ruby level SQL
|
85
91
|
parser.
|
@@ -93,7 +99,7 @@ extra_rdoc_files:
|
|
93
99
|
- Manifest.txt
|
94
100
|
- README.rdoc
|
95
101
|
files:
|
96
|
-
- .autotest
|
102
|
+
- ".autotest"
|
97
103
|
- CHANGELOG.rdoc
|
98
104
|
- Manifest.txt
|
99
105
|
- README.rdoc
|
@@ -120,36 +126,30 @@ files:
|
|
120
126
|
- test/test_node_attributes.rb
|
121
127
|
- test/test_nodes.rb
|
122
128
|
- test/test_statement.rb
|
123
|
-
- .gemtest
|
124
129
|
homepage: http://github.com/tenderlove/gda
|
125
|
-
licenses:
|
126
|
-
|
127
|
-
|
130
|
+
licenses:
|
131
|
+
- MIT
|
132
|
+
metadata:
|
133
|
+
homepage_uri: http://github.com/tenderlove/gda
|
134
|
+
post_install_message:
|
128
135
|
rdoc_options:
|
129
|
-
- --main
|
136
|
+
- "--main"
|
130
137
|
- README.rdoc
|
131
138
|
require_paths:
|
132
139
|
- lib
|
133
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
134
141
|
requirements:
|
135
|
-
- -
|
142
|
+
- - ">="
|
136
143
|
- !ruby/object:Gem::Version
|
137
144
|
version: 1.9.3
|
138
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
139
146
|
requirements:
|
140
|
-
- -
|
147
|
+
- - ">="
|
141
148
|
- !ruby/object:Gem::Version
|
142
149
|
version: '0'
|
143
150
|
requirements: []
|
144
|
-
|
145
|
-
|
146
|
-
signing_key:
|
151
|
+
rubygems_version: 3.2.22
|
152
|
+
signing_key:
|
147
153
|
specification_version: 4
|
148
154
|
summary: An SQL parser
|
149
|
-
test_files:
|
150
|
-
- test/test_dot_visitor.rb
|
151
|
-
- test/test_gda.rb
|
152
|
-
- test/test_max_depth.rb
|
153
|
-
- test/test_node_attributes.rb
|
154
|
-
- test/test_nodes.rb
|
155
|
-
- test/test_statement.rb
|
155
|
+
test_files: []
|
data/.gemtest
DELETED
File without changes
|