Skip to content

Commit 2942840

Browse files
authored
Merge pull request #7 from sql-rb/literals
Add literal node
2 parents 4758c57 + c059309 commit 2942840

File tree

5 files changed

+46
-0
lines changed

5 files changed

+46
-0
lines changed

lib/sql/composer/compiler.rb

+4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ def visit(node)
4242
self
4343
end
4444

45+
def visit_literal(node)
46+
add_node(Nodes::Literal, value: node[0])
47+
end
48+
4549
def visit_from(node)
4650
source, _ = node
4751
add_node(Nodes::From, source: source)

lib/sql/composer/dsl.rb

+7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
require "sql/composer/compiler"
66
require "sql/composer/tokens"
7+
require "sql/composer/nodes/literal"
78

89
module SQL
910
module Composer
@@ -31,6 +32,12 @@ def call
3132
compiler.(ast)
3233
end
3334

35+
def `(value)
36+
Nodes::Literal.new(value: value)
37+
end
38+
39+
private
40+
3441
def method_missing(name, *args)
3542
ast << [name.to_s.downcase, *args]
3643
self

lib/sql/composer/nodes.rb

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# frozen_string_literal: true
22

3+
require "sql/composer/nodes/literal"
34
require "sql/composer/nodes/identifier"
45
require "sql/composer/nodes/select"
56
require "sql/composer/nodes/from"

lib/sql/composer/nodes/literal.rb

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# frozen_string_literal: true
2+
3+
require "sql/composer/nodes/core"
4+
5+
module SQL
6+
module Composer
7+
module Nodes
8+
class Literal < Core
9+
def value
10+
fetch(:value)
11+
end
12+
alias_method :to_s, :value
13+
end
14+
end
15+
end
16+
end

spec/integration/sql/compose_spec.rb

+18
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,24 @@ def compose(&block)
2727
end
2828

2929
describe "SELECT" do
30+
context "with literals" do
31+
let(:query) do
32+
compose {
33+
SELECT `"users"."id"`, `"users"."name"`
34+
FROM `"users"`
35+
}
36+
end
37+
38+
specify do
39+
expect(result).to eql(
40+
<<~SQL.strip
41+
SELECT "users"."id", "users"."name"
42+
FROM "users"
43+
SQL
44+
)
45+
end
46+
end
47+
3048
context "without WHERE" do
3149
let(:query) do
3250
compose { |users|

0 commit comments

Comments
 (0)