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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 90fd4381e4ad8e36706b5668d06a7aefd38bddb3
4
- data.tar.gz: d4decc43386524ae4bb1b5f013b9c8e61284cf7d
2
+ SHA256:
3
+ metadata.gz: 57c06ead700d0c7f320a74263ce3e5ecfe28015a5489d65d9f3c5faf96647709
4
+ data.tar.gz: dad5b08bd24a8c61f2294b045a7b5a5c822a048ed94d1c82ebf8b63413c54b6d
5
5
  SHA512:
6
- metadata.gz: 1a1cff3f1c41b0797b0acfc4432e8bdee15f37dd3a82737f44f30a5b39480450065c8f3d6e52e54dcf8c443023683b1c76910d0ab64cd5d6b6ffb2ff337eb3f6
7
- data.tar.gz: a46766066ba0905568447e5d2b0068299cd4693dccc578683b17593cbd5feba30af797c44459786a7fdf6e21d9415a61851aaa6b6700b6ce21d964fb5f80c854
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-2013 Aaron Patterson
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']= '/usr/local/Library/ENV/pkgconfig/mountain_lion'
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 "#{missing} is missing. Try 'brew install libgda'"
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
@@ -16,7 +16,7 @@ static VALUE parse(VALUE self, VALUE sql)
16
16
  {
17
17
  GdaSqlParser * parser;
18
18
  GdaStatement * stmt;
19
- GError * error;
19
+ GError * error = NULL;
20
20
  const gchar * rest;
21
21
 
22
22
  Data_Get_Struct(self, GdaSqlParser, parser);
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);
@@ -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);
@@ -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);
@@ -94,6 +94,10 @@ module GDA
94
94
  visit node.expressions
95
95
  end
96
96
 
97
+ def visit_GDA_Nodes_Compound node
98
+ visit node.stmt_list
99
+ end
100
+
97
101
  ## Terminal nodes
98
102
  def visit_GDA_Nodes_Table node
99
103
  end
data/lib/gda.rb CHANGED
@@ -4,7 +4,7 @@ require 'gda/visitors/dot'
4
4
  require 'gda/visitors/max_depth'
5
5
 
6
6
  module GDA
7
- VERSION = '1.0.0'
7
+ VERSION = '1.1.1'
8
8
 
9
9
  module SQL
10
10
  class Statement
data/test/helper.rb CHANGED
@@ -3,7 +3,7 @@ require 'gda'
3
3
  require 'sqlite3'
4
4
 
5
5
  module GDA
6
- class TestCase < MiniTest::Unit::TestCase
6
+ class TestCase < Minitest::Test
7
7
  @@rails_sql = nil
8
8
 
9
9
  def self.rails_sql
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
@@ -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.0.0
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: 2013-03-07 00:00:00.000000000 Z
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: '4.6'
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: '4.6'
26
+ version: '5.14'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rdoc
28
+ name: rake-compiler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '3.10'
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: '3.10'
40
+ version: 0.4.1
41
41
  - !ruby/object:Gem::Dependency
42
- name: rake-compiler
42
+ name: sqlite3
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 0.4.1
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.4.1
54
+ version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: sqlite3
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.5'
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.5'
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
- metadata: {}
127
- post_install_message:
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
- rubyforge_project: gda
145
- rubygems_version: 2.0.2
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