query_builder 0.0.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.
Files changed (229) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +2 -0
  3. data/.gitignore +9 -0
  4. data/.metrics +9 -0
  5. data/.rspec +2 -0
  6. data/.rubocop.yml +2 -0
  7. data/.travis.yml +25 -0
  8. data/.yardopts +3 -0
  9. data/CHANGELOG.md +5 -0
  10. data/Gemfile +7 -0
  11. data/Guardfile +14 -0
  12. data/LICENSE +21 -0
  13. data/README.md +95 -0
  14. data/Rakefile +34 -0
  15. data/config/metrics/STYLEGUIDE +230 -0
  16. data/config/metrics/cane.yml +5 -0
  17. data/config/metrics/churn.yml +6 -0
  18. data/config/metrics/flay.yml +2 -0
  19. data/config/metrics/metric_fu.yml +14 -0
  20. data/config/metrics/reek.yml +1 -0
  21. data/config/metrics/roodi.yml +24 -0
  22. data/config/metrics/rubocop.yml +80 -0
  23. data/config/metrics/saikuro.yml +3 -0
  24. data/config/metrics/simplecov.yml +6 -0
  25. data/config/metrics/yardstick.yml +37 -0
  26. data/lib/query_builder.rb +9 -0
  27. data/lib/query_builder/core.rb +19 -0
  28. data/lib/query_builder/core/attribute.rb +54 -0
  29. data/lib/query_builder/core/attribute_error.rb +25 -0
  30. data/lib/query_builder/core/base.rb +102 -0
  31. data/lib/query_builder/core/clause.rb +46 -0
  32. data/lib/query_builder/core/statement.rb +55 -0
  33. data/lib/query_builder/cql.rb +80 -0
  34. data/lib/query_builder/cql/contexts.rb +21 -0
  35. data/lib/query_builder/cql/contexts/aggregate.rb +42 -0
  36. data/lib/query_builder/cql/contexts/column.rb +59 -0
  37. data/lib/query_builder/cql/contexts/field.rb +48 -0
  38. data/lib/query_builder/cql/contexts/function.rb +46 -0
  39. data/lib/query_builder/cql/contexts/index.rb +44 -0
  40. data/lib/query_builder/cql/contexts/keyspace.rb +107 -0
  41. data/lib/query_builder/cql/contexts/permission.rb +59 -0
  42. data/lib/query_builder/cql/contexts/role.rb +51 -0
  43. data/lib/query_builder/cql/contexts/table.rb +140 -0
  44. data/lib/query_builder/cql/contexts/trigger.rb +42 -0
  45. data/lib/query_builder/cql/contexts/type.rb +52 -0
  46. data/lib/query_builder/cql/contexts/user.rb +53 -0
  47. data/lib/query_builder/cql/modifiers.rb +61 -0
  48. data/lib/query_builder/cql/modifiers/add_column.rb +50 -0
  49. data/lib/query_builder/cql/modifiers/add_field.rb +49 -0
  50. data/lib/query_builder/cql/modifiers/allow_filtering.rb +45 -0
  51. data/lib/query_builder/cql/modifiers/alter.rb +44 -0
  52. data/lib/query_builder/cql/modifiers/called_on_null.rb +47 -0
  53. data/lib/query_builder/cql/modifiers/clustering_order.rb +51 -0
  54. data/lib/query_builder/cql/modifiers/column.rb +59 -0
  55. data/lib/query_builder/cql/modifiers/compact_storage.rb +46 -0
  56. data/lib/query_builder/cql/modifiers/count.rb +47 -0
  57. data/lib/query_builder/cql/modifiers/counter.rb +45 -0
  58. data/lib/query_builder/cql/modifiers/delete.rb +48 -0
  59. data/lib/query_builder/cql/modifiers/distinct.rb +45 -0
  60. data/lib/query_builder/cql/modifiers/finalfunc.rb +47 -0
  61. data/lib/query_builder/cql/modifiers/if.rb +44 -0
  62. data/lib/query_builder/cql/modifiers/if_exists.rb +46 -0
  63. data/lib/query_builder/cql/modifiers/if_not_exists.rb +46 -0
  64. data/lib/query_builder/cql/modifiers/initcond.rb +49 -0
  65. data/lib/query_builder/cql/modifiers/insert.rb +68 -0
  66. data/lib/query_builder/cql/modifiers/limit.rb +49 -0
  67. data/lib/query_builder/cql/modifiers/norecursive.rb +45 -0
  68. data/lib/query_builder/cql/modifiers/or_replace.rb +44 -0
  69. data/lib/query_builder/cql/modifiers/order.rb +50 -0
  70. data/lib/query_builder/cql/modifiers/password.rb +49 -0
  71. data/lib/query_builder/cql/modifiers/primary_key.rb +51 -0
  72. data/lib/query_builder/cql/modifiers/returns.rb +49 -0
  73. data/lib/query_builder/cql/modifiers/selected.rb +54 -0
  74. data/lib/query_builder/cql/modifiers/sfunc.rb +47 -0
  75. data/lib/query_builder/cql/modifiers/statement.rb +47 -0
  76. data/lib/query_builder/cql/modifiers/stype.rb +47 -0
  77. data/lib/query_builder/cql/modifiers/superuser.rb +54 -0
  78. data/lib/query_builder/cql/modifiers/timestamp.rb +50 -0
  79. data/lib/query_builder/cql/modifiers/unlogged.rb +45 -0
  80. data/lib/query_builder/cql/modifiers/update.rb +44 -0
  81. data/lib/query_builder/cql/modifiers/using.rb +48 -0
  82. data/lib/query_builder/cql/modifiers/using_options.rb +51 -0
  83. data/lib/query_builder/cql/modifiers/where.rb +44 -0
  84. data/lib/query_builder/cql/modifiers/where_clustered.rb +51 -0
  85. data/lib/query_builder/cql/modifiers/with.rb +44 -0
  86. data/lib/query_builder/cql/modifiers/with_options.rb +42 -0
  87. data/lib/query_builder/cql/operators.rb +29 -0
  88. data/lib/query_builder/cql/operators/cql.rb +23 -0
  89. data/lib/query_builder/cql/operators/cql_composite.rb +20 -0
  90. data/lib/query_builder/cql/operators/cql_dec.rb +21 -0
  91. data/lib/query_builder/cql/operators/cql_element.rb +23 -0
  92. data/lib/query_builder/cql/operators/cql_entries.rb +20 -0
  93. data/lib/query_builder/cql/operators/cql_frozen.rb +20 -0
  94. data/lib/query_builder/cql/operators/cql_full.rb +20 -0
  95. data/lib/query_builder/cql/operators/cql_gt.rb +23 -0
  96. data/lib/query_builder/cql/operators/cql_gte.rb +23 -0
  97. data/lib/query_builder/cql/operators/cql_in.rb +23 -0
  98. data/lib/query_builder/cql/operators/cql_inc.rb +21 -0
  99. data/lib/query_builder/cql/operators/cql_keys.rb +20 -0
  100. data/lib/query_builder/cql/operators/cql_list.rb +21 -0
  101. data/lib/query_builder/cql/operators/cql_literal.rb +84 -0
  102. data/lib/query_builder/cql/operators/cql_lt.rb +23 -0
  103. data/lib/query_builder/cql/operators/cql_lte.rb +23 -0
  104. data/lib/query_builder/cql/operators/cql_map.rb +25 -0
  105. data/lib/query_builder/cql/operators/cql_set.rb +21 -0
  106. data/lib/query_builder/cql/operators/cql_token.rb +21 -0
  107. data/lib/query_builder/cql/operators/cql_token_value.rb +23 -0
  108. data/lib/query_builder/cql/operators/cql_ttl.rb +20 -0
  109. data/lib/query_builder/cql/operators/cql_tuple.rb +21 -0
  110. data/lib/query_builder/cql/operators/cql_tuple_value.rb +23 -0
  111. data/lib/query_builder/cql/operators/cql_writetime.rb +20 -0
  112. data/lib/query_builder/cql/statements.rb +25 -0
  113. data/lib/query_builder/cql/statements/alter_column.rb +27 -0
  114. data/lib/query_builder/cql/statements/alter_field.rb +27 -0
  115. data/lib/query_builder/cql/statements/alter_keyspace.rb +25 -0
  116. data/lib/query_builder/cql/statements/alter_role.rb +26 -0
  117. data/lib/query_builder/cql/statements/alter_table.rb +25 -0
  118. data/lib/query_builder/cql/statements/alter_user.rb +26 -0
  119. data/lib/query_builder/cql/statements/batch.rb +31 -0
  120. data/lib/query_builder/cql/statements/create_aggregate.rb +36 -0
  121. data/lib/query_builder/cql/statements/create_column.rb +35 -0
  122. data/lib/query_builder/cql/statements/create_field.rb +25 -0
  123. data/lib/query_builder/cql/statements/create_function.rb +38 -0
  124. data/lib/query_builder/cql/statements/create_index.rb +41 -0
  125. data/lib/query_builder/cql/statements/create_keyspace.rb +26 -0
  126. data/lib/query_builder/cql/statements/create_role.rb +26 -0
  127. data/lib/query_builder/cql/statements/create_table.rb +30 -0
  128. data/lib/query_builder/cql/statements/create_trigger.rb +29 -0
  129. data/lib/query_builder/cql/statements/create_type.rb +26 -0
  130. data/lib/query_builder/cql/statements/create_user.rb +27 -0
  131. data/lib/query_builder/cql/statements/delete.rb +32 -0
  132. data/lib/query_builder/cql/statements/drop_aggregate.rb +25 -0
  133. data/lib/query_builder/cql/statements/drop_column.rb +23 -0
  134. data/lib/query_builder/cql/statements/drop_function.rb +25 -0
  135. data/lib/query_builder/cql/statements/drop_index.rb +25 -0
  136. data/lib/query_builder/cql/statements/drop_keyspace.rb +25 -0
  137. data/lib/query_builder/cql/statements/drop_role.rb +25 -0
  138. data/lib/query_builder/cql/statements/drop_table.rb +25 -0
  139. data/lib/query_builder/cql/statements/drop_trigger.rb +25 -0
  140. data/lib/query_builder/cql/statements/drop_type.rb +25 -0
  141. data/lib/query_builder/cql/statements/drop_user.rb +25 -0
  142. data/lib/query_builder/cql/statements/grant.rb +31 -0
  143. data/lib/query_builder/cql/statements/insert.rb +27 -0
  144. data/lib/query_builder/cql/statements/list_permissions.rb +35 -0
  145. data/lib/query_builder/cql/statements/list_roles.rb +23 -0
  146. data/lib/query_builder/cql/statements/list_users.rb +23 -0
  147. data/lib/query_builder/cql/statements/rename_column.rb +27 -0
  148. data/lib/query_builder/cql/statements/rename_field.rb +25 -0
  149. data/lib/query_builder/cql/statements/revoke.rb +31 -0
  150. data/lib/query_builder/cql/statements/select.rb +35 -0
  151. data/lib/query_builder/cql/statements/truncate.rb +23 -0
  152. data/lib/query_builder/cql/statements/update.rb +31 -0
  153. data/lib/query_builder/cql/statements/use.rb +23 -0
  154. data/lib/query_builder/rspec.rb +25 -0
  155. data/lib/query_builder/version.rb +9 -0
  156. data/query_builder.gemspec +31 -0
  157. data/spec/integration/alter_keyspace_spec.rb +17 -0
  158. data/spec/integration/alter_role_spec.rb +28 -0
  159. data/spec/integration/alter_table_add_spec.rb +21 -0
  160. data/spec/integration/alter_table_alter_spec.rb +15 -0
  161. data/spec/integration/alter_table_drop_spec.rb +15 -0
  162. data/spec/integration/alter_table_rename_spec.rb +15 -0
  163. data/spec/integration/alter_table_with_spec.rb +17 -0
  164. data/spec/integration/alter_type_add_spec.rb +15 -0
  165. data/spec/integration/alter_type_alter_spec.rb +15 -0
  166. data/spec/integration/alter_type_rename_spec.rb +15 -0
  167. data/spec/integration/alter_user_spec.rb +28 -0
  168. data/spec/integration/batch_spec.rb +32 -0
  169. data/spec/integration/create_aggregate_spec.rb +31 -0
  170. data/spec/integration/create_function_spec.rb +29 -0
  171. data/spec/integration/create_index_spec.rb +35 -0
  172. data/spec/integration/create_keyspace_spec.rb +24 -0
  173. data/spec/integration/create_role_spec.rb +26 -0
  174. data/spec/integration/create_table_spec.rb +34 -0
  175. data/spec/integration/create_trigger_spec.rb +21 -0
  176. data/spec/integration/create_type_spec.rb +20 -0
  177. data/spec/integration/create_user_spec.rb +23 -0
  178. data/spec/integration/delete_spec.rb +28 -0
  179. data/spec/integration/drop_aggregate_spec.rb +21 -0
  180. data/spec/integration/drop_function_spec.rb +21 -0
  181. data/spec/integration/drop_index_spec.rb +21 -0
  182. data/spec/integration/drop_keyspace_spec.rb +18 -0
  183. data/spec/integration/drop_role_spec.rb +18 -0
  184. data/spec/integration/drop_table_spec.rb +18 -0
  185. data/spec/integration/drop_trigger_spec.rb +21 -0
  186. data/spec/integration/drop_type_spec.rb +18 -0
  187. data/spec/integration/drop_user_spec.rb +18 -0
  188. data/spec/integration/grant_spec.rb +29 -0
  189. data/spec/integration/insert_spec.rb +22 -0
  190. data/spec/integration/list_permissions_spec.rb +34 -0
  191. data/spec/integration/list_roles_spec.rb +12 -0
  192. data/spec/integration/list_users_spec.rb +12 -0
  193. data/spec/integration/revoke_spec.rb +29 -0
  194. data/spec/integration/select_spec.rb +46 -0
  195. data/spec/integration/truncate_spec.rb +12 -0
  196. data/spec/integration/update_spec.rb +23 -0
  197. data/spec/integration/use_spec.rb +12 -0
  198. data/spec/spec_helper.rb +16 -0
  199. data/spec/unit/core/attribute_error_spec.rb +38 -0
  200. data/spec/unit/core/attribute_spec.rb +70 -0
  201. data/spec/unit/core/base_spec.rb +110 -0
  202. data/spec/unit/core/clause_spec.rb +101 -0
  203. data/spec/unit/core/statement_spec.rb +88 -0
  204. data/spec/unit/cql/operators/cql_composite_spec.rb +12 -0
  205. data/spec/unit/cql/operators/cql_dec_spec.rb +12 -0
  206. data/spec/unit/cql/operators/cql_element_spec.rb +12 -0
  207. data/spec/unit/cql/operators/cql_entries_spec.rb +12 -0
  208. data/spec/unit/cql/operators/cql_frozen_spec.rb +12 -0
  209. data/spec/unit/cql/operators/cql_full_spec.rb +12 -0
  210. data/spec/unit/cql/operators/cql_gt_spec.rb +19 -0
  211. data/spec/unit/cql/operators/cql_gte_spec.rb +19 -0
  212. data/spec/unit/cql/operators/cql_in_spec.rb +12 -0
  213. data/spec/unit/cql/operators/cql_inc_spec.rb +12 -0
  214. data/spec/unit/cql/operators/cql_keys_spec.rb +12 -0
  215. data/spec/unit/cql/operators/cql_list_spec.rb +12 -0
  216. data/spec/unit/cql/operators/cql_literal_spec.rb +83 -0
  217. data/spec/unit/cql/operators/cql_lt_spec.rb +19 -0
  218. data/spec/unit/cql/operators/cql_lte_spec.rb +19 -0
  219. data/spec/unit/cql/operators/cql_map_spec.rb +12 -0
  220. data/spec/unit/cql/operators/cql_set_spec.rb +12 -0
  221. data/spec/unit/cql/operators/cql_spec.rb +12 -0
  222. data/spec/unit/cql/operators/cql_token_spec.rb +12 -0
  223. data/spec/unit/cql/operators/cql_token_value_spec.rb +12 -0
  224. data/spec/unit/cql/operators/cql_ttl_spec.rb +12 -0
  225. data/spec/unit/cql/operators/cql_tuple_spec.rb +12 -0
  226. data/spec/unit/cql/operators/cql_tuple_value_spec.rb +12 -0
  227. data/spec/unit/cql/operators/cql_writetime_spec.rb +12 -0
  228. data/spec/unit/cql/operators_spec.rb +66 -0
  229. metadata +405 -0
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides WITH clauses for statements
8
+ #
9
+ module With
10
+
11
+ # Adds WITH clause to the statement
12
+ #
13
+ # @param [Hash] options
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def with(options)
18
+ options
19
+ .map { |key, value| Clause.new(column: key, value: value) }
20
+ .inject(self, :<<)
21
+ end
22
+
23
+ private
24
+
25
+ def maybe_with
26
+ list = clauses(:with)
27
+ ["WITH", list.join(" AND ")] if list.any?
28
+ end
29
+
30
+ # The clause for adding to a statement
31
+ #
32
+ # @api private
33
+ #
34
+ class Clause < BaseCondition
35
+
36
+ type :with
37
+
38
+ end # class Clause
39
+
40
+ end # module With
41
+
42
+ end # module Modifiers
43
+
44
+ end # module QueryBuilder::CQL
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides WITH OPTIONS clauses for statements
8
+ #
9
+ module WithOptions
10
+
11
+ # Adds WITH OPTIONS clause to the statement
12
+ #
13
+ # @param [Hash] options
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def with(options)
18
+ self << Clause.new(column: :options, value: options)
19
+ end
20
+
21
+ private
22
+
23
+ def maybe_with
24
+ list = clauses(:with)
25
+ ["WITH", list.last] if list.any?
26
+ end
27
+
28
+ # The clause for adding to a statement
29
+ #
30
+ # @api private
31
+ #
32
+ class Clause < BaseCondition
33
+
34
+ type :with
35
+
36
+ end # class Clause
37
+
38
+ end # module WithOptions
39
+
40
+ end # module Modifiers
41
+
42
+ end # module QueryBuilder::CQL
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder
4
+
5
+ module CQL
6
+
7
+ # The collection of CQL-specific operators (building blocks for statements)
8
+ #
9
+ module Operators
10
+
11
+ extend Transproc::Registry
12
+
13
+ private
14
+
15
+ def respond_to_missing?(name, *)
16
+ Operators.respond_to?(name)
17
+ end
18
+
19
+ def method_missing(name, *args)
20
+ Operators[name, *args]
21
+ end
22
+
23
+ Dir[File.expand_path("../operators/*.rb", __FILE__)].each(&method(:load))
24
+
25
+ end # module Clauses
26
+
27
+ end # module CQL
28
+
29
+ end # module QueryBuilder
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ # Provides CQL statement from chunks
6
+ #
7
+ # @example
8
+ # fn = Operators[:cql]
9
+ # fn["USE", "", [], "my_keyspace"]
10
+ # # => "USE my_keyspace;"
11
+ #
12
+ # @param [Array<String, Array<String>>] parts
13
+ #
14
+ # @return [String]
15
+ #
16
+ def self.cql(*parts)
17
+ parts
18
+ .flatten
19
+ .reject { |item| item.nil? || item.empty? }
20
+ .join(" ") << ";"
21
+ end
22
+
23
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ # Returns a description for the composite partition key
6
+ #
7
+ # @example
8
+ # fn = Operators[:cql_composite]
9
+ # fn[:foo, :bar, :baz]
10
+ # # => "(foo, bar, baz)"
11
+ #
12
+ # @param [Array<#to_s>] columns List of columns for the composite
13
+ #
14
+ # @return [String]
15
+ #
16
+ def self.cql_composite(*columns)
17
+ "(#{columns.join(", ")})"
18
+ end
19
+
20
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ # Describes decrementing of the column
6
+ #
7
+ # @example
8
+ # fn = Operators[:cql_dec, 3]
9
+ # fn[:foo]
10
+ # # => "foo = foo - 3"
11
+ #
12
+ # @param [#to_s] column
13
+ # @param [Numeric] value
14
+ #
15
+ # @return [String]
16
+ #
17
+ def self.cql_dec(column, value)
18
+ "#{column} = #{column} - #{value}"
19
+ end
20
+
21
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "cql_literal"
4
+
5
+ module QueryBuilder::CQL::Operators
6
+
7
+ # Returns a description for element of CQL collection
8
+ #
9
+ # @example
10
+ # fn = Operators[:cql_element]
11
+ # fn[:foo, :bar]
12
+ # # => "foo['bar']"
13
+ #
14
+ # @param [#to_s] column
15
+ # @param [#to_s] key
16
+ #
17
+ # @return [String]
18
+ #
19
+ def self.cql_element(column, key)
20
+ "#{column}[#{cql_literal(key)}]"
21
+ end
22
+
23
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ # Describes entries index
6
+ #
7
+ # @example
8
+ # fn = Operators[:cql_entries]
9
+ # fn[:foo]
10
+ # # => "ENTRIES(foo)"
11
+ #
12
+ # @param [#to_s] column
13
+ #
14
+ # @return [String]
15
+ #
16
+ def self.cql_entries(column)
17
+ "ENTRIES(#{column})"
18
+ end
19
+
20
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ # Marks value as frozen
6
+ #
7
+ # @example
8
+ # fn = Operators[:cql_frozen]
9
+ # fn[:foo]
10
+ # # => "FROZEN <foo>"
11
+ #
12
+ # @param [#to_s] value
13
+ #
14
+ # @return [String]
15
+ #
16
+ def self.cql_frozen(value)
17
+ "FROZEN <#{value}>"
18
+ end
19
+
20
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ # Describes full frozen collection index
6
+ #
7
+ # @example
8
+ # fn = Operators[:cql_full]
9
+ # fn[:foo]
10
+ # # => "FULL(foo)"
11
+ #
12
+ # @param [#to_s] column
13
+ #
14
+ # @return [String]
15
+ #
16
+ def self.cql_full(column)
17
+ "FULL(#{column})"
18
+ end
19
+
20
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "cql_literal"
4
+
5
+ module QueryBuilder::CQL::Operators
6
+
7
+ # Describes 'greater than' operator
8
+ #
9
+ # @example
10
+ # fn = Operators[:cql_gt, 3]
11
+ # fn[:foo]
12
+ # # => "foo > 3"
13
+ #
14
+ # @param [#to_s] column
15
+ # @param [Numeric] value
16
+ #
17
+ # @return [String]
18
+ #
19
+ def self.cql_gt(column, value)
20
+ "#{column} > #{cql_literal(value)}"
21
+ end
22
+
23
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "cql_literal"
4
+
5
+ module QueryBuilder::CQL::Operators
6
+
7
+ # Describes 'greater than or equal' operator
8
+ #
9
+ # @example
10
+ # fn = Operators[:cql_gt, 3]
11
+ # fn[:foo]
12
+ # # => "foo >= 3"
13
+ #
14
+ # @param [#to_s] column
15
+ # @param [Numeric] value
16
+ #
17
+ # @return [String]
18
+ #
19
+ def self.cql_gte(column, value)
20
+ "#{column} >= #{cql_literal(value)}"
21
+ end
22
+
23
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,23 @@
1
+ # encoding: utf-8
2
+
3
+ require_relative "cql_literal"
4
+
5
+ module QueryBuilder::CQL::Operators
6
+
7
+ # Returns IN condition
8
+ #
9
+ # @example
10
+ # fn = Operators[:cql_in]
11
+ # fn[:foo, :bar, :baz]
12
+ # # => "foo IN ('bar', 'baz')"
13
+ #
14
+ # @param [#to_s] column
15
+ # @param [Array<#to_s>] values
16
+ #
17
+ # @return [String]
18
+ #
19
+ def self.cql_in(column, *values)
20
+ "#{column} IN (#{values.map { |value| cql_literal(value) }.join(", ")})"
21
+ end
22
+
23
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ # Describes incrementing of the column
6
+ #
7
+ # @example
8
+ # fn = Operators[:cql_inc, 3]
9
+ # fn[:foo]
10
+ # # => "foo = foo + 3"
11
+ #
12
+ # @param [#to_s] column
13
+ # @param [Numeric] value
14
+ #
15
+ # @return [String]
16
+ #
17
+ def self.cql_inc(column, value)
18
+ "#{column} = #{column} + #{value}"
19
+ end
20
+
21
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,20 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ # Describes keys index
6
+ #
7
+ # @example
8
+ # fn = Operators[:cql_keys]
9
+ # fn[:foo]
10
+ # # => "KEYS(foo)"
11
+ #
12
+ # @param [#to_s] column
13
+ #
14
+ # @return [String]
15
+ #
16
+ def self.cql_keys(column)
17
+ "KEYS(#{column})"
18
+ end
19
+
20
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ # Returns the CQL LIST definition
6
+ #
7
+ # @example
8
+ # fn = Operators[:cql_list]
9
+ #
10
+ # fn[:int]
11
+ # # => "LIST<int>"
12
+ #
13
+ # @param [#to_s] value
14
+ #
15
+ # @return [String]
16
+ #
17
+ def self.cql_list(value)
18
+ "LIST<#{value}>"
19
+ end
20
+
21
+ end # module QueryBuilder::CQL::Operators
@@ -0,0 +1,84 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL::Operators
4
+
5
+ class << self
6
+
7
+ # Converts value to CQL literal
8
+ #
9
+ # @example
10
+ # fn = Operators[:cql_literal]
11
+ # fn[nil] # => "NaN"
12
+ # fn["0x9232"] # => "0x9232"
13
+ # fn[:foo] # => "'foo'"
14
+ #
15
+ # @param [Object] value
16
+ #
17
+ # @return [String]
18
+ #
19
+ def cql_literal(value)
20
+ return "NaN" if nan?(value)
21
+ return "Infinity" if infinity?(value)
22
+ return value.to_s if unchanged?(value)
23
+ return cql_literal_array(value) if array?(value)
24
+ return cql_literal_hash(value) if hash?(value)
25
+ quote(value)
26
+ end
27
+
28
+ private
29
+
30
+ def cql_literal_array(value)
31
+ "[#{value.map(&method(:cql_literal)).join(", ")}]"
32
+ end
33
+
34
+ def cql_literal_hash(value)
35
+ str =
36
+ value
37
+ .map { |k, v| [cql_literal(k), cql_literal(v)].join(": ") }
38
+ .join(", ")
39
+ "{#{str}}"
40
+ end
41
+
42
+ def quote(value)
43
+ "'#{value.to_s.gsub("\'", "\'\'")}'"
44
+ end
45
+
46
+ def nan?(value)
47
+ value.nil? || value.to_s.eql?("NaN")
48
+ end
49
+
50
+ def infinity?(value)
51
+ value.to_s.eql?("Infinity")
52
+ end
53
+
54
+ def unchanged?(value)
55
+ number?(value) || uuid?(value) || blob?(value) || bool?(value)
56
+ end
57
+
58
+ def uuid?(value)
59
+ value.to_s[/^\h{8}(-\h{4}){3}-\h{12}$/]
60
+ end
61
+
62
+ def blob?(value)
63
+ value.to_s[/^0[xX]./]
64
+ end
65
+
66
+ def number?(value)
67
+ value.is_a? Numeric
68
+ end
69
+
70
+ def bool?(value)
71
+ [true, false].include? value
72
+ end
73
+
74
+ def hash?(value)
75
+ value.instance_of? Hash
76
+ end
77
+
78
+ def array?(value)
79
+ value.instance_of? Array
80
+ end
81
+
82
+ end
83
+
84
+ end # module QueryBuilder::CQL::Operators