rparsec-ruby19 1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,128 @@
1
+ require 'parser_test'
2
+ require 'sql'
3
+ require 'sql_parser'
4
+ class SqlTestCase < ParserTestCase
5
+ include SqlParser
6
+ def verify_sql(code, expected, parser)
7
+ assert_equal(expected, make(parser).parse(code).to_s)
8
+ end
9
+ def verify_relation(code, expected)
10
+ verify_sql(code, expected, relation)
11
+ end
12
+ def verify_predicate(code, expected)
13
+ verify_sql(code, expected, predicate)
14
+ end
15
+ def testSimpleExpression
16
+ verify_sql('1+2+3', '((1 + 2) + 3)', expression)
17
+ end
18
+ def testExpressionWithBool
19
+ verify_sql('1+Case 2 when 1: x else dbo.y end',
20
+ '(1 + case 2 when 1: x else dbo.y end)', expression)
21
+ end
22
+ def testExpressionWithWildcard
23
+ verify_sql('a.*', 'a.*', expression)
24
+ end
25
+ def testSimpleRelation
26
+ verify_relation('select * from table1', 'select * from table1')
27
+ end
28
+ def testSimpleRelationWithStringLiteral
29
+ verify_relation("select 'a',* from table1", "select 'a', * from table1")
30
+ end
31
+ def testSimpleRelationWithVar
32
+ verify_relation("select $a,* from table1", "select $a, * from table1")
33
+ end
34
+ def testSimpleRelationWithQuotedName
35
+ # the print out isn't really valid. but we care about parser, not the printer.
36
+ verify_relation("select $a,* from [table 1]", "select $a, * from table 1")
37
+ end
38
+ def testSubRelation
39
+ verify_relation('select * from (select a, b, c.* from c)',
40
+ 'select * from (select a, b, c.* from c)')
41
+ end
42
+ def testSimpleRelationWithAlias
43
+ verify_relation('select x.* from table1 x', 'select x.* from table1 AS x')
44
+ end
45
+ def testSubRelationWithAlias
46
+ verify_relation('select * from ((select a, b, c.* from c)) x',
47
+ 'select * from (select a, b, c.* from c) AS x')
48
+ end
49
+ def testRelationWithWhere
50
+ verify_relation('select * from table where x=1',
51
+ 'select * from table where x = 1')
52
+ end
53
+ def testRelationWithWhereAndDistinct
54
+ verify_relation('select distinct * from table where x=1',
55
+ 'select distinct * from table where x = 1')
56
+ end
57
+ def testRelationWithCompoundPredicateInWhereClause
58
+ verify_relation('select * from table where x=1 and y=3',
59
+ 'select * from table where (x = 1 and y = 3)')
60
+ end
61
+ def testRelationWithOrderBy
62
+ verify_relation('select distinct * from table where x=1 order by x asc, y desc',
63
+ 'select distinct * from table where x = 1 order by x, y desc')
64
+ end
65
+ def testRelationWithOrderByAndLimit
66
+ verify_relation('select distinct * from table where x=1 order by x asc, y desc limit 5',
67
+ 'select distinct * from table where x = 1 order by x, y desc limit 5')
68
+ end
69
+ def testRelationWithGroupByWithoutHaving
70
+ verify_relation('select distinct * from table where x=1 group by x, y order by x asc, y desc',
71
+ 'select distinct * from table where x = 1 group by x, y order by x, y desc')
72
+ end
73
+ def testRelationWithGroupByWithHaving
74
+ verify_relation('select distinct * from table where x=1 group by x, y having x!=y order by x asc, y desc',
75
+ 'select distinct * from table where x = 1 group by x, y having x <> y order by x, y desc')
76
+ end
77
+ def testRelationWithSimpleJoin
78
+ verify_relation('select * from table1 t1 inner join table2 t2 on t1.a=t2.b where x=1',
79
+ 'select * from table1 AS t1 inner join table2 AS t2 on t1.a = t2.b where x = 1')
80
+ end
81
+ def testRelationWithMultiJoins
82
+ verify_relation('select * from table1 t1 inner join table2 t2 right outer join table3 on t2.x>t3.y on t1.a=t2.b cross join table3 where x=1',
83
+ 'select * from table1 AS t1 inner join table2 AS t2 right join table3 on t2.x > t3.y on t1.a = t2.b cross join table3 where x = 1')
84
+ end
85
+ def testRelationWithExists
86
+ verify_relation('select 1 from table1 where exists(select id from table2 where x=name)',
87
+ 'select 1 from table1 where exists(select id from table2 where x = name)')
88
+ end
89
+ def testRelationWithIn
90
+ verify_relation('select 1 from table1 where x in(1,2,3)',
91
+ 'select 1 from table1 where x in (1, 2, 3)')
92
+ end
93
+ def testRelationWithNotIn
94
+ verify_relation('select 1 from table1 where x not in(1,2,3)',
95
+ 'select 1 from table1 where x not in (1, 2, 3)')
96
+ end
97
+ def testRelationWithInRelation
98
+ verify_relation('select 1 from table1 where x in(select * from table)',
99
+ 'select 1 from table1 where x in (select * from table)')
100
+ end
101
+ def testRelationWithNotInRelation
102
+ verify_relation('select 1 from table1 where x not in table',
103
+ 'select 1 from table1 where x not in (table)')
104
+ end
105
+ def testRelationWithNotInRelationAndAmbiguousSubRelation
106
+ verify_relation('select 1 from table1 where x not in (table)',
107
+ 'select 1 from table1 where x not in (table)')
108
+ end
109
+ def testRelationWithBetween
110
+ verify_relation('select 1 from table1 where x between a and b',
111
+ 'select 1 from table1 where x between a and b')
112
+ end
113
+ def testRelationWithNotBetween
114
+ verify_relation('select 1 from table1 where x not between (a,b)',
115
+ 'select 1 from table1 where x not between a and b')
116
+ end
117
+ def testRelationWithGroupCompare
118
+ verify_relation('select 1 from table1 where not (a,b,c)>(1,2,3)',
119
+ 'select 1 from table1 where (not (a, b, c) > (1, 2, 3))')
120
+ end
121
+ def testUnion
122
+ verify_relation('select * from table1 where a=2 union select * from table2 where a=1',
123
+ 'select * from table1 where a = 2 union select * from table2 where a = 1')
124
+ end
125
+ def testAndOrNot
126
+ verify_predicate '1>1 or 1<=1 and not true', '(1 > 1 or (1 <= 1 and (not true)))'
127
+ end
128
+ end
@@ -0,0 +1,13 @@
1
+ %w{
2
+ simple_monad
3
+ functor
4
+ simple_parser
5
+ operator
6
+ keyword
7
+ expression
8
+ s_expression
9
+ full_parser
10
+ sql
11
+ }.each do |name|
12
+ require "#{name}_test"
13
+ end
metadata ADDED
@@ -0,0 +1,95 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rparsec-ruby19
3
+ version: !ruby/object:Gem::Version
4
+ version: '1.0'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ben Yu
9
+ - Clinton R. Nixon
10
+ autorequire: rparsec
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-01-26 00:00:00.000000000 Z
14
+ dependencies: []
15
+ description: rparsec is a recursive descent parser combinator framework. Declarative
16
+ API allows creating parser intuitively and dynamically.
17
+ email:
18
+ - ajoo.email@gmail.com
19
+ - crnixon@gmail.com
20
+ executables: []
21
+ extensions: []
22
+ extra_rdoc_files: []
23
+ files:
24
+ - rparsec/context.rb
25
+ - rparsec/error.rb
26
+ - rparsec/expressions.rb
27
+ - rparsec/functors.rb
28
+ - rparsec/id_monad.rb
29
+ - rparsec/keywords.rb
30
+ - rparsec/locator.rb
31
+ - rparsec/misc.rb
32
+ - rparsec/monad.rb
33
+ - rparsec/operators.rb
34
+ - rparsec/parser.rb
35
+ - rparsec/parser_monad.rb
36
+ - rparsec/parsers.rb
37
+ - rparsec/token.rb
38
+ - rparsec.rb
39
+ - test/src/expression_test.rb
40
+ - test/src/full_parser_test.rb
41
+ - test/src/functor_test.rb
42
+ - test/src/import.rb
43
+ - test/src/keyword_test.rb
44
+ - test/src/operator_test.rb
45
+ - test/src/parser_test.rb
46
+ - test/src/perf_benchmark.rb
47
+ - test/src/s_expression_test.rb
48
+ - test/src/scratch.rb
49
+ - test/src/simple_monad_test.rb
50
+ - test/src/simple_parser_test.rb
51
+ - test/src/sql.rb
52
+ - test/src/sql_parser.rb
53
+ - test/src/sql_test.rb
54
+ - test/src/tests.rb
55
+ homepage:
56
+ licenses: []
57
+ post_install_message:
58
+ rdoc_options: []
59
+ require_paths:
60
+ - .
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ none: false
63
+ requirements:
64
+ - - ! '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 1.8.11
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: A Ruby Parser Combinator Framework
79
+ test_files:
80
+ - test/src/expression_test.rb
81
+ - test/src/full_parser_test.rb
82
+ - test/src/functor_test.rb
83
+ - test/src/import.rb
84
+ - test/src/keyword_test.rb
85
+ - test/src/operator_test.rb
86
+ - test/src/parser_test.rb
87
+ - test/src/perf_benchmark.rb
88
+ - test/src/s_expression_test.rb
89
+ - test/src/scratch.rb
90
+ - test/src/simple_monad_test.rb
91
+ - test/src/simple_parser_test.rb
92
+ - test/src/sql.rb
93
+ - test/src/sql_parser.rb
94
+ - test/src/sql_test.rb
95
+ - test/src/tests.rb