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,50 @@
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 AddColumn
12
+
13
+ # Adds columns to the index
14
+ #
15
+ # @param [#to_s, Array<#to_s>] cols
16
+ #
17
+ # @return [QueryBuilder::Core::Statement] updated statement
18
+ #
19
+ def add(*cols)
20
+ cols.map { |col| Clause.new(name: col) }.inject(self, :<<)
21
+ end
22
+
23
+ private
24
+
25
+ def maybe_columns
26
+ "(#{clauses(:column).join(", ")})"
27
+ end
28
+
29
+ # The clause for adding to a statement
30
+ #
31
+ # @api private
32
+ #
33
+ class Clause < Base
34
+
35
+ type :column
36
+ attribute :name, required: true
37
+
38
+ # @private
39
+ def to_s
40
+ return name.to_s unless name.instance_of? Array
41
+ "(#{name.join(", ")})"
42
+ end
43
+
44
+ end # class Clause
45
+
46
+ end # module AddColumn
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 fields for CREATE TYPE statement
8
+ #
9
+ module AddField
10
+
11
+ # Adds field to the type
12
+ #
13
+ # @param [#to_s] name
14
+ # @param [#to_s] type
15
+ #
16
+ # @return [QueryBuilder::Core::Statement] updated statement
17
+ #
18
+ def add(name, type)
19
+ self << Clause.new(name: name, type_name: type)
20
+ end
21
+
22
+ private
23
+
24
+ def maybe_fields
25
+ "(#{clauses(:column).join(", ")})"
26
+ end
27
+
28
+ # The clause for adding to a statement
29
+ #
30
+ # @api private
31
+ #
32
+ class Clause < Base
33
+
34
+ type :column
35
+ attribute :name, required: true
36
+ attribute :type_name, required: true
37
+
38
+ # @private
39
+ def to_s
40
+ [name, type_name].join(" ")
41
+ end
42
+
43
+ end # class Clause
44
+
45
+ end # module AddField
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 ALLOW FILTERING clauses for statements
8
+ #
9
+ module AllowFiltering
10
+
11
+ # Adds ALLOW FILTERING clause to the statement
12
+ #
13
+ # @return [QueryBuilder::Core::Statement] updated statement
14
+ #
15
+ def allow_filtering
16
+ self << Clause.new
17
+ end
18
+
19
+ private
20
+
21
+ def maybe_filter
22
+ clauses(:filter)
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 :filter
33
+
34
+ # @private
35
+ def to_s
36
+ "ALLOW FILTERING"
37
+ end
38
+
39
+ end # class Clause
40
+
41
+ end # module AllowFiltering
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 WITH clauses for statements like ALTER TABLE
8
+ #
9
+ module Alter
10
+
11
+ # Adds WITH clause to the statement
12
+ #
13
+ # @param [Hash] options
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def alter(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 Alter
41
+
42
+ end # module Modifiers
43
+
44
+ end # module QueryBuilder::CQL
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides column for CALLED ON NULL statement
8
+ #
9
+ # @api public
10
+ #
11
+ module CalledOnNull
12
+
13
+ # Adds CALLED ON NULL to the index
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def called_on_null
18
+ self << Clause.new
19
+ end
20
+
21
+ private
22
+
23
+ def maybe_called
24
+ called = clauses(:called).last
25
+ [(called ? called : "RETURNS NULL"), "ON NULL INPUT"].join(" ")
26
+ end
27
+
28
+ # The clause for adding to a statement
29
+ #
30
+ # @api private
31
+ #
32
+ class Clause < Base
33
+
34
+ type :called
35
+
36
+ # @private
37
+ def to_s
38
+ "CALLED"
39
+ end
40
+
41
+ end # class Clause
42
+
43
+ end # module CalledOnNull
44
+
45
+ end # module Modifiers
46
+
47
+ end # module QueryBuilder::CQL
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides CLUSTERING ORDER clauses for statements
8
+ #
9
+ module ClusteringOrder
10
+
11
+ # Adds CLUSTERNING 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 clustering_order(name, order = :asc)
19
+ self << Clause.new(name: name, desc: order.equal?(:desc))
20
+ end
21
+
22
+ private
23
+
24
+ def maybe_where
25
+ list = clauses(:where)
26
+ ["WHERE", list.join(" AND ")] if list.any?
27
+ end
28
+
29
+ # The clause for adding to a statement
30
+ #
31
+ # @api private
32
+ #
33
+ class Clause < Base
34
+
35
+ unique
36
+ type :with
37
+ attribute :name, required: true
38
+ attribute :desc, default: false
39
+
40
+ # @private
41
+ def to_s
42
+ "CLUSTERING ORDER BY (#{name} #{desc ? "DESC" : "ASC"})"
43
+ end
44
+
45
+ end # class Clause
46
+
47
+ end # module ClusteringOrder
48
+
49
+ end # module Modifiers
50
+
51
+ end # module QueryBuilder::CQL
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides columns for CREATE TYPE statement
8
+ #
9
+ module Column
10
+
11
+ # Adds column to the table
12
+ #
13
+ # @param [#to_s] name
14
+ # @param [#to_s] type_name
15
+ # @param [Hash] options
16
+ # @option options [Boolean] :static
17
+ #
18
+ # @return [QueryBuilder::Core::Statement] updated statement
19
+ #
20
+ def add(name, type_name, options = {})
21
+ self << Clause
22
+ .new(name: name, type_name: type_name, static: options[:static])
23
+ end
24
+
25
+ private
26
+
27
+ def maybe_columns
28
+ "(#{(clauses(:column) + clauses(:primary_key)).compact.join(", ")})"
29
+ end
30
+
31
+ # The clause for adding to a statement
32
+ #
33
+ # @api private
34
+ #
35
+ class Clause < Base
36
+
37
+ type :column
38
+ attribute :name, required: true
39
+ attribute :type_name, required: true
40
+ attribute :static, default: false
41
+
42
+ # @private
43
+ def to_s
44
+ [name, type_name, maybe_static].compact.join(" ")
45
+ end
46
+
47
+ private
48
+
49
+ def maybe_static
50
+ "STATIC" if static
51
+ end
52
+
53
+ end # class Clause
54
+
55
+ end # module Column
56
+
57
+ end # module Modifiers
58
+
59
+ end # module QueryBuilder::CQL
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides COMPACT STORAGE clauses for statements
8
+ #
9
+ module CompactStorage
10
+
11
+ # Adds COMPACT STORAGE clause to the statement
12
+ #
13
+ # @return [QueryBuilder::Core::Statement] updated statement
14
+ #
15
+ def compact_storage
16
+ self << Clause.new
17
+ end
18
+
19
+ private
20
+
21
+ def maybe_where
22
+ list = clauses(:where)
23
+ ["WHERE", list.join(" AND ")] if list.any?
24
+ end
25
+
26
+ # The clause for adding to a statement
27
+ #
28
+ # @api private
29
+ #
30
+ class Clause < Base
31
+
32
+ unique
33
+ type :with
34
+
35
+ # @private
36
+ def to_s
37
+ "COMPACT STORAGE"
38
+ end
39
+
40
+ end # class Clause
41
+
42
+ end # module CompactStorage
43
+
44
+ end # module Modifiers
45
+
46
+ end # module QueryBuilder::CQL
@@ -0,0 +1,47 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Modifiers
6
+
7
+ # Provides COUNT(*|1) clause to SELECT statement
8
+ #
9
+ module Count
10
+
11
+ # Adds COUNT clause to the statement
12
+ #
13
+ # @param [Integer] value
14
+ #
15
+ # @return [QueryBuilder::Core::Statement] updated statement
16
+ #
17
+ def count(value = nil)
18
+ self << Clause.new(value: value)
19
+ end
20
+
21
+ private
22
+
23
+ def maybe_selected
24
+ list = clauses(:selected)
25
+ list.any? ? list.join(", ") : "*"
26
+ end
27
+
28
+ # The clause for adding to a statement
29
+ #
30
+ # @api private
31
+ #
32
+ class Clause < Base
33
+
34
+ type :selected
35
+ attribute :value
36
+
37
+ def to_s
38
+ "COUNT(#{value ? value : "*"})"
39
+ end
40
+
41
+ end # class Clause
42
+
43
+ end # module Count
44
+
45
+ end # module Modifiers
46
+
47
+ end # module QueryBuilder::CQL