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,49 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides LIMIT clauses for statements
8
+ #
9
+ module Limit
10
+
11
+ # Adds LIMIT clause to the statement
12
+ #
13
+ # @param [Integer] value
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def limit(value)
18
+ self << Clause.new(value: value)
19
+ end
20
+
21
+ private
22
+
23
+ def maybe_limit
24
+ clauses(:limit)
25
+ end
26
+
27
+ # The clause for adding to a statement
28
+ #
29
+ # @api private
30
+ #
31
+ class Clause < Base
32
+
33
+ unique
34
+ type :limit
35
+
36
+ attribute :value, required: true
37
+
38
+ # @private
39
+ def to_s
40
+ "LIMIT #{value}"
41
+ end
42
+
43
+ end # class Clause
44
+
45
+ end # module Limit
46
+
47
+ end # module Modifiers
48
+
49
+ end # module QueryBuilder::CQL
@@ -0,0 +1,45 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides NORECURSIVE clauses for statements
8
+ #
9
+ module Norecursive
10
+
11
+ # Adds NORECURSIVE clause to the statement
12
+ #
13
+ # @return [QueryBuilder::Core::Statement] updated statement
14
+ #
15
+ def norecursive
16
+ self << Clause.new
17
+ end
18
+
19
+ private
20
+
21
+ def maybe_norecursive
22
+ clauses(:norecursive)
23
+ end
24
+
25
+ # The clause for adding to a statement
26
+ #
27
+ # @api private
28
+ #
29
+ class Clause < Base
30
+
31
+ unique
32
+ type :norecursive
33
+
34
+ # @private
35
+ def to_s
36
+ "NORECURSIVE"
37
+ end
38
+
39
+ end # class Clause
40
+
41
+ end # module Norecursive
42
+
43
+ end # module Modifiers
44
+
45
+ end # module QueryBuilder::CQL
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides OR REPLACE clauses for statements
8
+ #
9
+ module OrReplace
10
+
11
+ # Adds OR REPLACE clause to the statement
12
+ #
13
+ # @return [QueryBuilder::Core::Statement] updated statement
14
+ #
15
+ def or_replace
16
+ self << Clause.new
17
+ end
18
+
19
+ private
20
+
21
+ def maybe_replace
22
+ clauses(:replace)
23
+ end
24
+
25
+ # The clause for adding to a statement
26
+ #
27
+ # @api private
28
+ #
29
+ class Clause < Base
30
+
31
+ type :replace
32
+
33
+ # @private
34
+ def to_s
35
+ "OR REPLACE"
36
+ end
37
+
38
+ end # class Clause
39
+
40
+ end # module OrReplace
41
+
42
+ end # module Modifiers
43
+
44
+ end # module QueryBuilder::CQL
@@ -0,0 +1,50 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides ORDER clauses for statements
8
+ #
9
+ module Order
10
+
11
+ # Adds ORDER clause to the statement
12
+ #
13
+ # @param [#to_s] name The name of the column
14
+ # @param [:asc, :desc] order The order of clustering
15
+ #
16
+ # @return [QueryBuilder::Core::Statement] updated statement
17
+ #
18
+ def order(name, order = :asc)
19
+ self << Clause.new(name: name, desc: order.equal?(:desc))
20
+ end
21
+
22
+ private
23
+
24
+ def maybe_order
25
+ clauses(:order)
26
+ end
27
+
28
+ # The clause for adding to a statement
29
+ #
30
+ # @api private
31
+ #
32
+ class Clause < Base
33
+
34
+ unique
35
+ type :order
36
+ attribute :name, required: true
37
+ attribute :desc, default: false
38
+
39
+ # @private
40
+ def to_s
41
+ "ORDER BY (#{name} #{desc ? "DESC" : "ASC"})"
42
+ end
43
+
44
+ end # class Clause
45
+
46
+ end # module Order
47
+
48
+ end # module Modifiers
49
+
50
+ end # module QueryBuilder::CQL
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides PASSWORD clauses for statements
8
+ #
9
+ module Password
10
+
11
+ # Adds PASSWORD clause to the statement
12
+ #
13
+ # @param [#to_s] name
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def password(name)
18
+ self << Clause.new(name: name)
19
+ end
20
+
21
+ private
22
+
23
+ def maybe_with
24
+ list = clauses(:with)
25
+ ["WITH", list.join(" AND ")] if list.any?
26
+ end
27
+
28
+ # The clause for adding to a statement
29
+ #
30
+ # @api private
31
+ #
32
+ class Clause < Base
33
+
34
+ unique
35
+ type :with
36
+ attribute :name, required: true
37
+
38
+ # @private
39
+ def to_s
40
+ "PASSWORD #{cql_literal[name]}"
41
+ end
42
+
43
+ end # class Clause
44
+
45
+ end # module Superuser
46
+
47
+ end # module Modifiers
48
+
49
+ end # module QueryBuilder::CQL
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides PRIMARY KEY clause for a statement
8
+ #
9
+ module PrimaryKey
10
+
11
+ # Defines a primary key for the table
12
+ #
13
+ # @param [#to_s, Array<#to_s>] columns
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def primary_key(*columns)
18
+ self << Clause.new(columns: columns)
19
+ end
20
+
21
+ private
22
+
23
+ def maybe_columns
24
+ "(#{(clauses(:column) + clauses(:primary_key)).compact.join(", ")})"
25
+ end
26
+
27
+ # The clause for adding to a statement
28
+ #
29
+ # @api private
30
+ #
31
+ class Clause < Base
32
+
33
+ unique
34
+ type :primary_key
35
+ attribute :columns, required: true
36
+
37
+ # Returns the CQL representation of the clause
38
+ #
39
+ # @return [String]
40
+ #
41
+ def to_s
42
+ ["PRIMARY KEY", "(#{columns.join(", ")})"].join(" ")
43
+ end
44
+
45
+ end # class Clause
46
+
47
+ end # module PrimaryKey
48
+
49
+ end # module Modifiers
50
+
51
+ end # module QueryBuilder::CQL
@@ -0,0 +1,49 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides column for CREATE INDEX statement
8
+ #
9
+ # @api public
10
+ #
11
+ module Returns
12
+
13
+ # Adds return type to the index
14
+ #
15
+ # @param [#to_s] type
16
+ #
17
+ # @return [QueryBuilder::Core::Statement] updated statement
18
+ #
19
+ def returns(type)
20
+ self << Clause.new(type_name: type)
21
+ end
22
+
23
+ private
24
+
25
+ def maybe_returns
26
+ clauses(:returns)
27
+ end
28
+
29
+ # The clause for adding to a statement
30
+ #
31
+ # @api private
32
+ #
33
+ class Clause < Base
34
+
35
+ type :returns
36
+ attribute :type_name, required: true
37
+
38
+ # @private
39
+ def to_s
40
+ "RETURNS #{type_name}"
41
+ end
42
+
43
+ end # class Clause
44
+
45
+ end # module Returns
46
+
47
+ end # module Modifiers
48
+
49
+ end # module QueryBuilder::CQL
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides the list of selected columns for SELECT statement
8
+ #
9
+ module Selected
10
+
11
+ # Adds a column
12
+ #
13
+ # @param [Array] values
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def select(*values)
18
+ return self if values.empty?
19
+ hash = values.last.instance_of?(Hash) ? values.pop : {}
20
+ list = values.map { |name| Clause.new(name: name) }
21
+ list += hash.map { |as, name| Clause.new(name: name, as: as) }
22
+ list.inject(self, :<<)
23
+ end
24
+
25
+ private
26
+
27
+ def maybe_selected
28
+ list = clauses(:selected)
29
+ list.any? ? list.join(", ") : "*"
30
+ end
31
+
32
+ # The clause for adding to a statement
33
+ #
34
+ # @api private
35
+ #
36
+ class Clause < Base
37
+
38
+ type :selected
39
+
40
+ attribute :name, required: true
41
+ attribute :as
42
+
43
+ # @private
44
+ def to_s
45
+ [name, (as ? "AS" : nil), as].compact.join(" ")
46
+ end
47
+
48
+ end # class Clause
49
+
50
+ end # module Selected
51
+
52
+ end # module Modifiers
53
+
54
+ end # module QueryBuilder::CQL
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides SFUNC clauses for statements
8
+ #
9
+ module Sfunc
10
+
11
+ # Adds SFUNC clause to the statement
12
+ #
13
+ # @param [#to_s] name
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def sfunc(name)
18
+ self << Clause.new(name: name)
19
+ end
20
+
21
+ private
22
+
23
+ def maybe_functions
24
+ clauses(:function).join(" ")
25
+ end
26
+
27
+ # The clause for adding to a statement
28
+ #
29
+ # @api private
30
+ #
31
+ class Clause < Base
32
+
33
+ type :function
34
+ attribute :name, required: true
35
+
36
+ # @private
37
+ def to_s
38
+ "SFUNC #{name}"
39
+ end
40
+
41
+ end # class Clause
42
+
43
+ end # module Sfunc
44
+
45
+ end # module Modifiers
46
+
47
+ end # module QueryBuilder::CQL