gda 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.rdoc +1 -1
- data/ext/gda/gda_nodes.c +31 -0
- data/lib/gda.rb +1 -1
- data/lib/gda/visitors/visitor.rb +4 -0
- data/test/test_nodes.rb +5 -0
- data/test/test_statement.rb +33 -0
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 09209a9fa57de499346a00205d6192c1fdc814b2
|
4
|
+
data.tar.gz: e5f046ad0e79ad6cbd379348140455837fe458c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05f0726618f23cf50ce0e78215401bdfc4729ebb6ee4058e558947ad984b31a6c9fa52717965453c797fdfd2b08a89b3e90244e57a0dd401bb61da4a194d39f5
|
7
|
+
data.tar.gz: 97f55889fb6c30db52176f9ed61d7b8678702f2627f1c87be1f67dee193eb8df4c78813ac0d3ea8d5ad5912a15ce033dcd54a4aeb2f6639ee0d0d1816c30a45b
|
data/README.rdoc
CHANGED
@@ -34,7 +34,7 @@ parser.
|
|
34
34
|
|
35
35
|
(The MIT License)
|
36
36
|
|
37
|
-
Copyright (c) 2012-
|
37
|
+
Copyright (c) 2012-2016 Aaron Patterson
|
38
38
|
|
39
39
|
Permission is hereby granted, free of charge, to any person obtaining
|
40
40
|
a copy of this software and associated documentation files (the
|
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;
|
@@ -477,6 +504,10 @@ void Init_gda_nodes()
|
|
477
504
|
cField = rb_define_class_under(mNodes, "Field", cNode);
|
478
505
|
WrapperMethod(cField, field_name);
|
479
506
|
|
507
|
+
cCompound = rb_define_class_under(mNodes, "Compound", cNode);
|
508
|
+
WrapperMethod(cCompound, compound_type);
|
509
|
+
WrapperMethod(cCompound, stmt_list);
|
510
|
+
|
480
511
|
cBegin = rb_define_class_under(mNodes, "Begin", cNode);
|
481
512
|
cRollback = rb_define_class_under(mNodes, "Rollback", cNode);
|
482
513
|
cCommit = rb_define_class_under(mNodes, "Commit", cNode);
|
data/lib/gda.rb
CHANGED
data/lib/gda/visitors/visitor.rb
CHANGED
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,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gda
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-29 00:00:00.000000000 Z
|
12
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.8'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '5.8'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: rdoc
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,7 +128,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
142
128
|
version: '0'
|
143
129
|
requirements: []
|
144
130
|
rubyforge_project:
|
145
|
-
rubygems_version: 2.
|
131
|
+
rubygems_version: 2.2.5
|
146
132
|
signing_key:
|
147
133
|
specification_version: 4
|
148
134
|
summary: An SQL parser
|