veritas-sql-generator 0.0.3
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.
- data/Gemfile +33 -0
- data/LICENSE +20 -0
- data/README.rdoc +27 -0
- data/Rakefile +25 -0
- data/TODO +17 -0
- data/config/flay.yml +3 -0
- data/config/flog.yml +2 -0
- data/config/roodi.yml +16 -0
- data/config/site.reek +124 -0
- data/config/yardstick.yml +2 -0
- data/lib/veritas-sql-generator.rb +3 -0
- data/lib/veritas/base_relation.rb +36 -0
- data/lib/veritas/sql/generator.rb +35 -0
- data/lib/veritas/sql/generator/attribute.rb +25 -0
- data/lib/veritas/sql/generator/direction.rb +36 -0
- data/lib/veritas/sql/generator/identifier.rb +27 -0
- data/lib/veritas/sql/generator/literal.rb +160 -0
- data/lib/veritas/sql/generator/logic.rb +349 -0
- data/lib/veritas/sql/generator/relation.rb +111 -0
- data/lib/veritas/sql/generator/relation/base.rb +14 -0
- data/lib/veritas/sql/generator/relation/binary.rb +184 -0
- data/lib/veritas/sql/generator/relation/set.rb +99 -0
- data/lib/veritas/sql/generator/relation/unary.rb +326 -0
- data/lib/veritas/sql/generator/version.rb +9 -0
- data/lib/veritas/sql/generator/visitor.rb +121 -0
- data/spec/rcov.opts +6 -0
- data/spec/shared/command_method_behavior.rb +7 -0
- data/spec/shared/generated_sql_behavior.rb +15 -0
- data/spec/shared/idempotent_method_behavior.rb +7 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/unit/veritas/base_relation/name_spec.rb +45 -0
- data/spec/unit/veritas/sql/generator/attribute/visit_veritas_attribute_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/direction/visit_veritas_relation_operation_order_ascending_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/direction/visit_veritas_relation_operation_order_descending_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/identifier/visit_identifier_spec.rb +26 -0
- data/spec/unit/veritas/sql/generator/literal/class_methods/dup_frozen_spec.rb +23 -0
- data/spec/unit/veritas/sql/generator/literal/visit_class_spec.rb +31 -0
- data/spec/unit/veritas/sql/generator/literal/visit_date_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/literal/visit_date_time_spec.rb +61 -0
- data/spec/unit/veritas/sql/generator/literal/visit_enumerable_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/literal/visit_false_class_spec.rb +14 -0
- data/spec/unit/veritas/sql/generator/literal/visit_nil_class_spec.rb +14 -0
- data/spec/unit/veritas/sql/generator/literal/visit_numeric_spec.rb +34 -0
- data/spec/unit/veritas/sql/generator/literal/visit_string_spec.rb +26 -0
- data/spec/unit/veritas/sql/generator/literal/visit_time_spec.rb +97 -0
- data/spec/unit/veritas/sql/generator/literal/visit_true_class_spec.rb +14 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_connective_conjunction_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_connective_disjunction_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_connective_negation_spec.rb +16 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_equality_spec.rb +27 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_exclusion_spec.rb +43 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_greater_than_or_equal_to_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_greater_than_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_inclusion_spec.rb +43 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_inequality_spec.rb +55 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_less_than_or_equal_to_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_predicate_less_than_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_proposition_contradiction_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/logic/visit_veritas_logic_proposition_tautology_spec.rb +15 -0
- data/spec/unit/veritas/sql/generator/relation/binary/base/to_subquery_spec.rb +35 -0
- data/spec/unit/veritas/sql/generator/relation/binary/base/visit_veritas_base_relation_spec.rb +22 -0
- data/spec/unit/veritas/sql/generator/relation/binary/class_methods/subquery_spec.rb +42 -0
- data/spec/unit/veritas/sql/generator/relation/binary/to_s_spec.rb +35 -0
- data/spec/unit/veritas/sql/generator/relation/binary/to_subquery_spec.rb +35 -0
- data/spec/unit/veritas/sql/generator/relation/binary/visit_veritas_algebra_join_spec.rb +138 -0
- data/spec/unit/veritas/sql/generator/relation/binary/visit_veritas_algebra_product_spec.rb +139 -0
- data/spec/unit/veritas/sql/generator/relation/class_methods/subquery_spec.rb +33 -0
- data/spec/unit/veritas/sql/generator/relation/class_methods/visit_spec.rb +61 -0
- data/spec/unit/veritas/sql/generator/relation/name_spec.rb +30 -0
- data/spec/unit/veritas/sql/generator/relation/set/to_s_spec.rb +55 -0
- data/spec/unit/veritas/sql/generator/relation/set/to_subquery_spec.rb +55 -0
- data/spec/unit/veritas/sql/generator/relation/set/visit_veritas_algebra_difference_spec.rb +138 -0
- data/spec/unit/veritas/sql/generator/relation/set/visit_veritas_algebra_intersection_spec.rb +138 -0
- data/spec/unit/veritas/sql/generator/relation/set/visit_veritas_algebra_union_spec.rb +138 -0
- data/spec/unit/veritas/sql/generator/relation/to_sql_spec.rb +52 -0
- data/spec/unit/veritas/sql/generator/relation/unary/to_s_spec.rb +55 -0
- data/spec/unit/veritas/sql/generator/relation/unary/to_subquery_spec.rb +75 -0
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_algebra_projection_spec.rb +138 -0
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_algebra_rename_spec.rb +136 -0
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_algebra_restriction_spec.rb +157 -0
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_base_relation_spec.rb +21 -0
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_relation_operation_limit_spec.rb +125 -0
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_relation_operation_offset_spec.rb +125 -0
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_relation_operation_order_spec.rb +136 -0
- data/spec/unit/veritas/sql/generator/relation/unary/visit_veritas_relation_operation_reverse_spec.rb +125 -0
- data/spec/unit/veritas/sql/generator/relation/visit_spec.rb +54 -0
- data/spec/unit/veritas/sql/generator/relation/visited_spec.rb +35 -0
- data/spec/unit/veritas/sql/generator/visitor/class_methods/handler_for_spec.rb +71 -0
- data/spec/unit/veritas/sql/generator/visitor/visit_spec.rb +12 -0
- data/spec/unit/veritas/sql/generator/visitor/visited_spec.rb +11 -0
- data/tasks/quality/ci.rake +2 -0
- data/tasks/quality/flay.rake +41 -0
- data/tasks/quality/flog.rake +45 -0
- data/tasks/quality/heckle.rake +203 -0
- data/tasks/quality/metric_fu.rake +26 -0
- data/tasks/quality/reek.rake +9 -0
- data/tasks/quality/roodi.rake +15 -0
- data/tasks/quality/yardstick.rake +23 -0
- data/tasks/spec.rake +38 -0
- data/tasks/yard.rake +9 -0
- data/veritas-sql-generator.gemspec +222 -0
- metadata +285 -0
data/Gemfile
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
source :rubygems
|
|
2
|
+
|
|
3
|
+
gem 'veritas', '0.0.3', :git => 'git://github.com/dkubb/veritas.git'
|
|
4
|
+
|
|
5
|
+
group :development do
|
|
6
|
+
gem 'backports', '~> 2.1.0'
|
|
7
|
+
gem 'jeweler', '~> 1.5.2'
|
|
8
|
+
gem 'rake', '~> 0.8.7'
|
|
9
|
+
gem 'rspec', '~> 1.3.2'
|
|
10
|
+
gem 'yard', '~> 0.6.8'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
group :jruby do
|
|
14
|
+
platform :jruby do
|
|
15
|
+
gem 'jruby-openssl', '~> 0.7.3'
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
platforms :mri_18 do
|
|
20
|
+
group :quality do
|
|
21
|
+
gem 'flay', '~> 1.4.2'
|
|
22
|
+
gem 'flog', '~> 2.5.1'
|
|
23
|
+
gem 'heckle', '~> 1.4.3'
|
|
24
|
+
gem 'json', '~> 1.5.1'
|
|
25
|
+
gem 'metric_fu', '~> 2.1.1'
|
|
26
|
+
gem 'mspec', '~> 1.5.17'
|
|
27
|
+
gem 'rcov', '~> 0.9.9'
|
|
28
|
+
gem 'reek', '~> 1.2.8', :git => 'git://github.com/dkubb/reek.git'
|
|
29
|
+
gem 'roodi', '~> 2.1.0'
|
|
30
|
+
gem 'ruby2ruby', '= 1.2.2'
|
|
31
|
+
gem 'yardstick', '~> 0.3.0'
|
|
32
|
+
end
|
|
33
|
+
end
|
data/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2010-2011 Dan Kubb
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
= Veritas SQL Generator
|
|
2
|
+
|
|
3
|
+
Relational algebra SQL generator
|
|
4
|
+
|
|
5
|
+
== Note on Patches/Pull Requests
|
|
6
|
+
|
|
7
|
+
* If you want your code merged into the mainline, please discuss
|
|
8
|
+
the proposed changes with me before doing any work on it. This
|
|
9
|
+
library is still in early development, and it may not always be
|
|
10
|
+
clear the direction it is going. Some features may not be appropriate
|
|
11
|
+
yet, may need to be deferred until later when the foundation for
|
|
12
|
+
them is laid, or may be more applicable in a plugin.
|
|
13
|
+
* Fork the project.
|
|
14
|
+
* Make your feature addition or bug fix.
|
|
15
|
+
* Follow this {style guide}[https://github.com/dkubb/styleguide].
|
|
16
|
+
* Add specs for it. This is important so I don't break it in a
|
|
17
|
+
future version unintentionally. Tests must cover all branches
|
|
18
|
+
within the code, and code must be fully covered.
|
|
19
|
+
* Commit, do not mess with Rakefile, version, or history.
|
|
20
|
+
(if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
|
|
21
|
+
* Run "rake ci". This must pass and not show any regressions in the
|
|
22
|
+
metrics for the code to be merged.
|
|
23
|
+
* Send me a pull request. Bonus points for topic branches.
|
|
24
|
+
|
|
25
|
+
== Copyright
|
|
26
|
+
|
|
27
|
+
Copyright (c) 2010-2011 Dan Kubb. See LICENSE for details.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require 'rake'
|
|
2
|
+
|
|
3
|
+
require File.expand_path('../lib/veritas/sql/generator/version', __FILE__)
|
|
4
|
+
|
|
5
|
+
begin
|
|
6
|
+
gem('jeweler', '~> 1.5.2') if respond_to?(:gem, true)
|
|
7
|
+
require 'jeweler'
|
|
8
|
+
|
|
9
|
+
Jeweler::Tasks.new do |gem|
|
|
10
|
+
gem.name = 'veritas-sql-generator'
|
|
11
|
+
gem.summary = 'Relational algebra SQL generator'
|
|
12
|
+
gem.description = 'Generate SQL from a veritas relation'
|
|
13
|
+
gem.email = 'dan.kubb@gmail.com'
|
|
14
|
+
gem.homepage = 'https://github.com/dkubb/veritas-sql-generator'
|
|
15
|
+
gem.authors = [ 'Dan Kubb' ]
|
|
16
|
+
|
|
17
|
+
gem.version = Veritas::SQL::Generator::VERSION
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
Jeweler::GemcutterTasks.new
|
|
21
|
+
|
|
22
|
+
FileList['tasks/**/*.rake'].each { |task| import task }
|
|
23
|
+
rescue LoadError
|
|
24
|
+
puts 'Jeweler (or a dependency) not available. Install it with: gem install jeweler -v 1.5.2'
|
|
25
|
+
end
|
data/TODO
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
* Replace some of the conditional logic with polymorphism, especially
|
|
2
|
+
where there is special case logic for certain types of generators
|
|
3
|
+
within other generators.
|
|
4
|
+
* Replace Equality/Inequality with classes that handle all of the
|
|
5
|
+
special cases.
|
|
6
|
+
* Use different classes for inclusive/exclusive Range literals so that
|
|
7
|
+
they can be serialized to SQL differently.
|
|
8
|
+
* Create Veritas::Literal::Range proxy object w/factory method
|
|
9
|
+
* Create Veritas::Literal::Range::Inclusive
|
|
10
|
+
* Create Veritas::Literal::Range::Exclusive
|
|
11
|
+
|
|
12
|
+
* Adjust reek and roodi scores down to lower thresholds
|
|
13
|
+
|
|
14
|
+
* Handle cases where an Inequality/Exclusion predicate is used (or a
|
|
15
|
+
Negation wrapping an Equality/Inclusion) on an *optional* attribute.
|
|
16
|
+
* Add "OR attribute IS NULL" to the statement to ensure cases when
|
|
17
|
+
the value is NULL still matches.
|
data/config/flay.yml
ADDED
data/config/flog.yml
ADDED
data/config/roodi.yml
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
AbcMetricMethodCheck: { score: 7.1 }
|
|
3
|
+
AssignmentInConditionalCheck: { }
|
|
4
|
+
CaseMissingElseCheck: { }
|
|
5
|
+
ClassLineCountCheck: { line_count: 316 }
|
|
6
|
+
ClassNameCheck: { pattern: !ruby/regexp /\A(?:[A-Z]+|[A-Z][a-z](?:[A-Z]?[a-z])+)\z/ }
|
|
7
|
+
ClassVariableCheck: { }
|
|
8
|
+
CyclomaticComplexityBlockCheck: { complexity: 2 }
|
|
9
|
+
CyclomaticComplexityMethodCheck: { complexity: 6 }
|
|
10
|
+
EmptyRescueBodyCheck: { }
|
|
11
|
+
ForLoopCheck: { }
|
|
12
|
+
MethodLineCountCheck: { line_count: 7 }
|
|
13
|
+
MethodNameCheck: { pattern: !ruby/regexp /\A(?:[a-z](?:_?[a-z])+[?!=]?|\[\]=?|==|<=>|[+*&|-])\z/ }
|
|
14
|
+
ModuleLineCountCheck: { line_count: 345 }
|
|
15
|
+
ModuleNameCheck: { pattern: !ruby/regexp /\A(?:[A-Z]+|[A-Z][a-z](?:[A-Z]?[a-z])+)\z/ }
|
|
16
|
+
ParameterNumberCheck: { parameter_count: 3 }
|
data/config/site.reek
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
---
|
|
2
|
+
UncommunicativeParameterName:
|
|
3
|
+
accept: []
|
|
4
|
+
exclude: []
|
|
5
|
+
enabled: true
|
|
6
|
+
reject:
|
|
7
|
+
- !ruby/regexp /^.$/
|
|
8
|
+
- !ruby/regexp /[0-9]$/
|
|
9
|
+
- !ruby/regexp /[A-Z]/
|
|
10
|
+
LargeClass:
|
|
11
|
+
max_methods: 22 # TODO: reduce this in UnaryRelation
|
|
12
|
+
exclude: []
|
|
13
|
+
enabled: true
|
|
14
|
+
max_instance_variables: 9 # TODO: reduce this in UnaryRelation
|
|
15
|
+
UncommunicativeMethodName:
|
|
16
|
+
accept: []
|
|
17
|
+
exclude: []
|
|
18
|
+
enabled: true
|
|
19
|
+
reject:
|
|
20
|
+
- !ruby/regexp /^[a-z]$/
|
|
21
|
+
- !ruby/regexp /[0-9]$/
|
|
22
|
+
- !ruby/regexp /[A-Z]/
|
|
23
|
+
LongParameterList:
|
|
24
|
+
max_params: 3
|
|
25
|
+
exclude: []
|
|
26
|
+
enabled: true
|
|
27
|
+
overrides: {}
|
|
28
|
+
FeatureEnvy:
|
|
29
|
+
exclude: [
|
|
30
|
+
# TODO: change these methods to be class methods
|
|
31
|
+
'Veritas::SQL::Generator::Attribute#visit_veritas_attribute',
|
|
32
|
+
'Veritas::SQL::Generator::Identifier#visit_identifier',
|
|
33
|
+
'Veritas::SQL::Generator::Literal#visit_date_time',
|
|
34
|
+
'Veritas::SQL::Generator::Literal#visit_numeric',
|
|
35
|
+
'Veritas::SQL::Generator::Literal#visit_string',
|
|
36
|
+
'Veritas::SQL::Generator::Literal#visit_time',
|
|
37
|
+
'Veritas::SQL::Generator::Logic#visit_veritas_logic_predicate_inequality',
|
|
38
|
+
'Veritas::SQL::Generator::Logic#exclusive_range_exclusion_sql',
|
|
39
|
+
'Veritas::SQL::Generator::Logic#exclusive_range_inclusion_sql',
|
|
40
|
+
'Veritas::SQL::Generator::Logic#new_from_enumerable_predicate',
|
|
41
|
+
'Veritas::SQL::Generator::Logic#optional?',
|
|
42
|
+
'Veritas::SQL::Generator::Relation::Unary#collapse_subquery_for?'
|
|
43
|
+
]
|
|
44
|
+
enabled: true
|
|
45
|
+
ClassVariable:
|
|
46
|
+
exclude: []
|
|
47
|
+
enabled: true
|
|
48
|
+
BooleanParameter:
|
|
49
|
+
exclude: []
|
|
50
|
+
enabled: true
|
|
51
|
+
IrresponsibleModule:
|
|
52
|
+
exclude: []
|
|
53
|
+
enabled: true
|
|
54
|
+
UncommunicativeModuleName:
|
|
55
|
+
accept: []
|
|
56
|
+
exclude: []
|
|
57
|
+
enabled: true
|
|
58
|
+
reject:
|
|
59
|
+
- !ruby/regexp /^.$/
|
|
60
|
+
- !ruby/regexp /[0-9]$/
|
|
61
|
+
NestedIterators:
|
|
62
|
+
ignore_iterators: []
|
|
63
|
+
exclude: [
|
|
64
|
+
'Veritas::SQL::Generator::Visitor#self.handlers'
|
|
65
|
+
]
|
|
66
|
+
enabled: true
|
|
67
|
+
max_allowed_nesting: 1
|
|
68
|
+
LongMethod:
|
|
69
|
+
max_statements: 7
|
|
70
|
+
exclude: [
|
|
71
|
+
'Veritas::SQL::Generator::Relation::Unary#to_s'
|
|
72
|
+
]
|
|
73
|
+
enabled: true
|
|
74
|
+
Duplication:
|
|
75
|
+
allow_calls: []
|
|
76
|
+
exclude: []
|
|
77
|
+
enabled: true
|
|
78
|
+
max_calls: 1
|
|
79
|
+
UtilityFunction:
|
|
80
|
+
max_helper_calls: 1
|
|
81
|
+
exclude: [
|
|
82
|
+
# TODO: change these methods to be class methods
|
|
83
|
+
'Veritas::SQL::Generator::Attribute#visit_veritas_attribute',
|
|
84
|
+
'Veritas::SQL::Generator::Identifier#visit_identifier',
|
|
85
|
+
'Veritas::SQL::Generator::Literal#visit_numeric',
|
|
86
|
+
'Veritas::SQL::Generator::Literal#visit_string',
|
|
87
|
+
'Veritas::SQL::Generator::Logic#visit_veritas_logic_predicate_inequality',
|
|
88
|
+
'Veritas::SQL::Generator::Logic#exclusive_range_exclusion_sql',
|
|
89
|
+
'Veritas::SQL::Generator::Logic#exclusive_range_inclusion_sql',
|
|
90
|
+
'Veritas::SQL::Generator::Logic#new_from_enumerable_predicate',
|
|
91
|
+
'Veritas::SQL::Generator::Logic#optional?',
|
|
92
|
+
'Veritas::SQL::Generator::Relation::Unary#collapse_subquery_for?'
|
|
93
|
+
]
|
|
94
|
+
enabled: true
|
|
95
|
+
Attribute:
|
|
96
|
+
exclude: []
|
|
97
|
+
enabled: false
|
|
98
|
+
UncommunicativeVariableName:
|
|
99
|
+
accept: []
|
|
100
|
+
exclude: []
|
|
101
|
+
enabled: true
|
|
102
|
+
reject:
|
|
103
|
+
- !ruby/regexp /^.$/
|
|
104
|
+
- !ruby/regexp /[0-9]$/
|
|
105
|
+
- !ruby/regexp /[A-Z]/
|
|
106
|
+
SimulatedPolymorphism:
|
|
107
|
+
exclude: []
|
|
108
|
+
enabled: true
|
|
109
|
+
max_ifs: 1
|
|
110
|
+
DataClump:
|
|
111
|
+
exclude: [
|
|
112
|
+
# TODO: split Range handling methods into separate class/module
|
|
113
|
+
'Veritas::SQL::Generator::Logic'
|
|
114
|
+
]
|
|
115
|
+
enabled: true
|
|
116
|
+
max_copies: 1
|
|
117
|
+
min_clump_size: 2
|
|
118
|
+
ControlCouple:
|
|
119
|
+
exclude: []
|
|
120
|
+
enabled: true
|
|
121
|
+
LongYieldList:
|
|
122
|
+
max_params: 1
|
|
123
|
+
exclude: []
|
|
124
|
+
enabled: true
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Veritas
|
|
4
|
+
|
|
5
|
+
# A class that represents a base relation in an RDBMS
|
|
6
|
+
class BaseRelation < Relation
|
|
7
|
+
|
|
8
|
+
# The base relation name
|
|
9
|
+
#
|
|
10
|
+
# @example
|
|
11
|
+
# name = base_relation.name
|
|
12
|
+
#
|
|
13
|
+
# @return [#to_s]
|
|
14
|
+
#
|
|
15
|
+
# @api public
|
|
16
|
+
attr_reader :name
|
|
17
|
+
|
|
18
|
+
# Initialize a base relation
|
|
19
|
+
#
|
|
20
|
+
# @param [#to_s] name
|
|
21
|
+
# the relation name
|
|
22
|
+
# @param [Header, #to_ary] header
|
|
23
|
+
# the relation header
|
|
24
|
+
# @param [Enumerable] tuples
|
|
25
|
+
# the relation tuples
|
|
26
|
+
#
|
|
27
|
+
# @return [undefined]
|
|
28
|
+
#
|
|
29
|
+
# @api private
|
|
30
|
+
def initialize(name, *args)
|
|
31
|
+
super(*args)
|
|
32
|
+
@name = Immutable.freeze_object(name.to_s)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end # class BaseRelation
|
|
36
|
+
end # module Veritas
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
require 'date'
|
|
4
|
+
require 'time'
|
|
5
|
+
|
|
6
|
+
require 'veritas'
|
|
7
|
+
|
|
8
|
+
require 'veritas/base_relation'
|
|
9
|
+
|
|
10
|
+
require 'veritas/sql/generator/visitor'
|
|
11
|
+
|
|
12
|
+
require 'veritas/sql/generator/identifier'
|
|
13
|
+
require 'veritas/sql/generator/attribute'
|
|
14
|
+
require 'veritas/sql/generator/direction'
|
|
15
|
+
require 'veritas/sql/generator/literal'
|
|
16
|
+
require 'veritas/sql/generator/logic'
|
|
17
|
+
|
|
18
|
+
require 'veritas/sql/generator/relation'
|
|
19
|
+
require 'veritas/sql/generator/relation/unary'
|
|
20
|
+
require 'veritas/sql/generator/relation/base'
|
|
21
|
+
require 'veritas/sql/generator/relation/binary'
|
|
22
|
+
require 'veritas/sql/generator/relation/set'
|
|
23
|
+
|
|
24
|
+
require 'veritas/sql/generator/version'
|
|
25
|
+
|
|
26
|
+
module Veritas
|
|
27
|
+
module SQL
|
|
28
|
+
module Generator
|
|
29
|
+
|
|
30
|
+
# Raised when an invalid relation is visited
|
|
31
|
+
class InvalidRelationError < StandardError; end
|
|
32
|
+
|
|
33
|
+
end # module Generator
|
|
34
|
+
end # module SQL
|
|
35
|
+
end # module Veritas
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Veritas
|
|
4
|
+
module SQL
|
|
5
|
+
module Generator
|
|
6
|
+
|
|
7
|
+
# Generates an SQL statement for an attribute
|
|
8
|
+
module Attribute
|
|
9
|
+
include Identifier
|
|
10
|
+
|
|
11
|
+
# Visit an Attribute
|
|
12
|
+
#
|
|
13
|
+
# @param [Attribute] attribute
|
|
14
|
+
#
|
|
15
|
+
# @return [#to_s]
|
|
16
|
+
#
|
|
17
|
+
# @api private
|
|
18
|
+
def visit_veritas_attribute(attribute)
|
|
19
|
+
visit_identifier(attribute.name)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end # module Attribute
|
|
23
|
+
end # module Generator
|
|
24
|
+
end # module SQL
|
|
25
|
+
end # module Veritas
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Veritas
|
|
4
|
+
module SQL
|
|
5
|
+
module Generator
|
|
6
|
+
|
|
7
|
+
# Generates an SQL statement for a direction
|
|
8
|
+
module Direction
|
|
9
|
+
include Attribute
|
|
10
|
+
|
|
11
|
+
# Visit an Ascending Direction
|
|
12
|
+
#
|
|
13
|
+
# @param [Relation::Operation::Order::Ascending] direction
|
|
14
|
+
#
|
|
15
|
+
# @return [#to_s]
|
|
16
|
+
#
|
|
17
|
+
# @api private
|
|
18
|
+
def visit_veritas_relation_operation_order_ascending(direction)
|
|
19
|
+
dispatch direction.attribute
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Visit an Descending Direction
|
|
23
|
+
#
|
|
24
|
+
# @param [Relation::Operation::Order::Descending] direction
|
|
25
|
+
#
|
|
26
|
+
# @return [#to_s]
|
|
27
|
+
#
|
|
28
|
+
# @api private
|
|
29
|
+
def visit_veritas_relation_operation_order_descending(direction)
|
|
30
|
+
"#{dispatch direction.attribute} DESC"
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end # module Direction
|
|
34
|
+
end # module Generator
|
|
35
|
+
end # module SQL
|
|
36
|
+
end # module Veritas
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
|
|
3
|
+
module Veritas
|
|
4
|
+
module SQL
|
|
5
|
+
module Generator
|
|
6
|
+
|
|
7
|
+
# Generates an SQL statement for an identifier
|
|
8
|
+
module Identifier
|
|
9
|
+
|
|
10
|
+
QUOTE = '"'.freeze
|
|
11
|
+
ESCAPED_QUOTE = '""'.freeze
|
|
12
|
+
|
|
13
|
+
# Quote the identifier
|
|
14
|
+
#
|
|
15
|
+
# @param [#to_s] identifier
|
|
16
|
+
#
|
|
17
|
+
# @return [#to_s]
|
|
18
|
+
#
|
|
19
|
+
# @api private
|
|
20
|
+
def visit_identifier(identifier)
|
|
21
|
+
"#{QUOTE}#{identifier.to_s.gsub(QUOTE, ESCAPED_QUOTE)}#{QUOTE}"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
end # module Identifier
|
|
25
|
+
end # module Generator
|
|
26
|
+
end # module SQL
|
|
27
|
+
end # module Veritas
|