File tree 5 files changed +75
-2
lines changed
5 files changed +75
-2
lines changed Original file line number Diff line number Diff line change
1
+ module SQLTree ::Node
2
+ class BeginStatement < Base
3
+ def to_sql ( options = { } )
4
+ "BEGIN"
5
+ end
6
+
7
+ def self . parse ( tokens )
8
+ tokens . consume ( SQLTree ::Token ::BEGIN )
9
+ return self . new
10
+ end
11
+ end
12
+ end
Original file line number Diff line number Diff line change
1
+ module SQLTree ::Node
2
+ class CommitStatement < Base
3
+ def to_sql ( options = { } )
4
+ "COMMIT"
5
+ end
6
+
7
+ def self . parse ( tokens )
8
+ tokens . consume ( SQLTree ::Token ::COMMIT )
9
+ return self . new
10
+ end
11
+ end
12
+ end
Original file line number Diff line number Diff line change
1
+ module SQLTree ::Node
2
+
3
+ # The <tt>DeleteQuery</tt> node represents an SQL DELETE query.
4
+ #
5
+ # This node has two children: <tt>table</tt> and <tt>where</tt>.
6
+ class SetQuery < Base
7
+
8
+ # The variable (<tt>SQLTree::Node::Field</tt>) that is being set.
9
+ child :variable
10
+
11
+ # The <tt>SQLTree::Node::Expression</tt> value that the variable is being
12
+ # set to.
13
+ child :value
14
+
15
+ # Initializes a new DeleteQuery instance.
16
+ def initialize ( variable , value )
17
+ @variable , @value = variable , value
18
+ end
19
+
20
+ # Generates an SQL DELETE query from this node.
21
+ def to_sql ( options = { } )
22
+ sql = "SET #{ variable . to_sql ( options ) } "
23
+ sql << " TO #{ value . to_sql ( options ) } "
24
+ sql
25
+ end
26
+
27
+ # Parses a SET query from a stream of tokens.
28
+ # <tt>tokens</tt>:: The token stream to parse from, which is an instance
29
+ # of <tt> SQLTree::Parser</tt>.
30
+ def self . parse ( tokens )
31
+ tokens . consume ( SQLTree ::Token ::SET )
32
+ variable = SQLTree ::Node ::Expression ::Field . parse ( tokens )
33
+ tokens . consume ( SQLTree ::Token ::TO )
34
+ value = SQLTree ::Node ::Expression ::Value . parse ( tokens )
35
+ return self . new ( variable , value )
36
+ end
37
+ end
38
+ end
Original file line number Diff line number Diff line change
1
+ require "#{ File . dirname ( __FILE__ ) } /../spec_helper"
2
+
3
+ describe SQLTree ::Node ::SetQuery do
4
+
5
+ it "should parse a set query correctly" do
6
+ set = SQLTree ::Node ::SetQuery [ "SET foo TO 'var'" ]
7
+ set . variable . should == SQLTree ::Node ::Expression ::Field . new ( "foo" )
8
+ set . value . should == SQLTree ::Node ::Expression ::Value . new ( "var" )
9
+ end
10
+
11
+ end
Original file line number Diff line number Diff line change @@ -22,6 +22,6 @@ Gem::Specification.new do |s|
22
22
23
23
# Do not modify the files and test_files values by hand, because this will
24
24
# automatically by them gem release script.
25
- s . files = %w( spec/unit/select_query_spec .rb spec/unit/insert_query_spec .rb spec/spec_helper .rb lib/sql_tree/tokenizer .rb lib/sql_tree/node/join .rb .gitignore lib/sql_tree/node/ordering .rb LICENSE spec/lib/matchers .rb lib/sql_tree/parser .rb sql_tree.gemspec spec/unit/tokenizer_spec .rb spec/unit/expression_node_spec .rb spec/unit/delete_query_spec .rb spec/unit/leaf_node_spec .rb lib/sql_tree/token .rb lib/sql_tree/node/table_reference .rb lib/sql_tree/node/source .rb lib/sql_tree/node/insert_query.rb Rakefile tasks/github-gem.rake spec/unit/update_query_spec.rb spec/ integration/parse_and_generate_spec.rb lib/sql_tree/node/select_query .rb lib/sql_tree/node.rb README.rdoc spec/integration/api_spec .rb lib/sql_tree/node/expression .rb lib/sql_tree/node/delete_query .rb lib/sql_tree/node/select_declaration .rb lib/sql_tree.rb lib/sql_tree/node/update_query .rb )
26
- s . test_files = %w( spec/unit/select_query_spec.rb spec/unit/insert_query_spec .rb spec/unit/tokenizer_spec .rb spec/unit/expression_node_spec .rb spec/unit/delete_query_spec .rb spec/unit/leaf_node_spec .rb spec/unit/update_query_spec .rb spec/integration/parse_and_generate_spec.rb spec/integration/api_spec .rb )
25
+ s . files = %w( spec/spec_helper.rb lib/sql_tree/tokenizer .rb lib/sql_tree/node/join .rb sql_tree.gemspec spec/unit/select_query_spec .rb spec/ lib/matchers .rb lib/sql_tree/parser .rb .gitignore lib/sql_tree/node/source .rb LICENSE spec/unit/expression_node_spec .rb spec/unit/delete_query_spec .rb Gemfile spec/unit/leaf_node_spec .rb lib/sql_tree/token.rb Rakefile spec/unit/update_query_spec .rb spec/unit/tokenizer_spec .rb spec/integration/api_spec .rb lib/sql_tree/node/select_query .rb lib/sql_tree/node.rb README.rdoc lib/sql_tree/node/table_reference .rb lib/sql_tree/node/insert_query.rb tasks/github-gem.rake spec/integration/parse_and_generate_spec.rb lib/sql_tree/node/expression .rb spec/unit/insert_query_spec .rb lib/sql_tree/node/select_declaration .rb lib/sql_tree.rb lib/sql_tree/node/update_query .rb lib/sql_tree/node/ordering .rb lib/sql_tree/node/delete_query .rb )
26
+ s . test_files = %w( spec/unit/select_query_spec.rb spec/unit/expression_node_spec .rb spec/unit/delete_query_spec .rb spec/unit/leaf_node_spec .rb spec/unit/update_query_spec .rb spec/unit/tokenizer_spec .rb spec/integration/api_spec .rb spec/integration/parse_and_generate_spec.rb spec/unit/insert_query_spec .rb )
27
27
end
You can’t perform that action at this time.
0 commit comments