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,55 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::Core
4
+
5
+ # Abstract base class for CQL statemens (roots of AST)
6
+ #
7
+ # The statement can belong to some context (keyspace, table).
8
+ # It is created with several clauses (like WHERE, SET etc.)
9
+ #
10
+ # @abstract
11
+ #
12
+ class Statement < Base
13
+
14
+ attribute :context, default: nil
15
+
16
+ # @!method initialize(type, *attributes, &block)
17
+ # Initializes the statement with a type, attributes and block
18
+ #
19
+ # @param (see QueryBuilder::Clause)
20
+ # @param [Proc] block
21
+ # The block that returns an array of clauses for the statement
22
+ #
23
+ def initialize(*)
24
+ @clauses = block_given? ? Array[*yield] : []
25
+ super
26
+ end
27
+
28
+ # @!method clauses(type = nil)
29
+ # Returns array of chunks of code for the statement's clauses
30
+ #
31
+ # @param [Symbol] type The optional type to select clauses by
32
+ #
33
+ # @return [Array<String>]
34
+ #
35
+ def clauses(cond = nil)
36
+ (cond ? @clauses.select { |item| cond.equal? item.type } : @clauses)
37
+ .map(&:to_s)
38
+ end
39
+
40
+ # @!method <<(clause)
41
+ # Returns a new statement where the clause is added
42
+ #
43
+ # @param [QueryBuilder::Clause] clause
44
+ #
45
+ # @return [QueryBuilder::Statement]
46
+ #
47
+ def <<(clause)
48
+ new_clauses = @clauses.dup
49
+ new_clauses.delete clause
50
+ self.class.new(attributes) { new_clauses + [clause] }
51
+ end
52
+
53
+ end # class Statement
54
+
55
+ end # module QueryBuilder::Core
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder
4
+
5
+ require_relative "cql/operators"
6
+ require_relative "cql/contexts"
7
+ require_relative "cql/modifiers"
8
+ require_relative "cql/statements"
9
+
10
+ # The builder for CQL-specific statements
11
+ #
12
+ module CQL
13
+
14
+ # Returns the context of Cassandra keyspace
15
+ #
16
+ # @param [#to_s] name The name of the keyspace
17
+ #
18
+ # @param [QueryBuilder::CQL::Contexts::Keyspace]
19
+ #
20
+ def self.keyspace(name)
21
+ Contexts::Keyspace.new(name: name)
22
+ end
23
+
24
+ # Returns the context of Cassandra user
25
+ #
26
+ # @param [#to_s] name The name of the user
27
+ #
28
+ # @param [QueryBuilder::CQL::Contexts::User]
29
+ #
30
+ def self.user(name)
31
+ Contexts::User.new(name: name)
32
+ end
33
+
34
+ # Returns the context of Cassandra users role
35
+ #
36
+ # @param [#to_s] name The name of the role
37
+ #
38
+ # @param [QueryBuilder::CQL::Contexts::Role]
39
+ #
40
+ def self.role(name)
41
+ Contexts::Role.new(name: name)
42
+ end
43
+
44
+ # Returns the context of Cassandra root permission
45
+ #
46
+ # @param [#to_s, nil] name The name of the permission
47
+ #
48
+ # @param [QueryBuilder::CQL::Contexts::Permission]
49
+ #
50
+ def self.permission(name = nil)
51
+ Contexts::Permission.new(name: name)
52
+ end
53
+
54
+ # Builds the 'LIST USERS' CQL statement
55
+ #
56
+ # @return [QueryBuilder::Statements::ListUsers]
57
+ #
58
+ def self.users
59
+ Statements::ListUsers.new
60
+ end
61
+
62
+ # Builds the 'LIST ROLES' CQL statement
63
+ #
64
+ # @return [QueryBuilder::Statements::ListRoles]
65
+ #
66
+ def self.roles
67
+ Statements::ListRoles.new
68
+ end
69
+
70
+ # Builds the 'BATCH' CQL statement
71
+ #
72
+ # @return [QueryBuilder::Statements::Batch]
73
+ #
74
+ def self.batch
75
+ Statements::Batch.new
76
+ end
77
+
78
+ end # module CQL
79
+
80
+ end # module QueryBuilder
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder
4
+
5
+ module CQL
6
+
7
+ # The collection of CQL-specific contexts for statements
8
+ #
9
+ module Contexts
10
+
11
+ # The base class for CQL-specific contexts
12
+ #
13
+ Base = Core::Base
14
+
15
+ Dir[File.expand_path("../contexts/*.rb", __FILE__)].each(&method(:load))
16
+
17
+ end # module Contexts
18
+
19
+ end # module CQL
20
+
21
+ end # module QueryBuilder
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Contexts
6
+
7
+ # Describes the Cassandra user-defined aggregate
8
+ #
9
+ class Aggregate < Base
10
+
11
+ attribute :keyspace, required: true
12
+ attribute :name, required: true
13
+
14
+ # Returns the full name of the aggregate
15
+ #
16
+ # @return [String]
17
+ #
18
+ def to_s
19
+ [keyspace, name].join(".")
20
+ end
21
+
22
+ # Builds the 'CREATE AGGREGATE' CQL statement
23
+ #
24
+ # @return [QueryBuilder::Statements::CreateAggregate]
25
+ #
26
+ def create
27
+ Statements::CreateAggregate.new(context: self)
28
+ end
29
+
30
+ # Builds the 'DROP AGGREGATE' CQL statement
31
+ #
32
+ # @return [QueryBuilder::Statements::DropAggregate]
33
+ #
34
+ def drop
35
+ Statements::DropAggregate.new(context: self)
36
+ end
37
+
38
+ end # class Aggregate
39
+
40
+ end # module Contexts
41
+
42
+ end # module QueryBuilder::CQL
@@ -0,0 +1,59 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Contexts
6
+
7
+ # Describes the Cassandra table column
8
+ #
9
+ class Column < Base
10
+
11
+ attribute :table, required: true
12
+ attribute :name, required: true
13
+
14
+ # Builds the 'ALTER TABLE ... ADD' CQL statement
15
+ #
16
+ # @param [#to_s] type
17
+ # @param [Hash] options
18
+ # @option options [Boolean] :static
19
+ #
20
+ # @return [QueryBuilder::Statements::AddColumn]
21
+ #
22
+ def create(type, options = {})
23
+ Statements::CreateColumn
24
+ .new(context: self, type: type, static: options[:static])
25
+ end
26
+
27
+ # Builds the 'ALTER TABLE ... RENAME' CQL statement
28
+ #
29
+ # @param [#to_s] name
30
+ #
31
+ # @return [QueryBuilder::Statements::RenameColumn]
32
+ #
33
+ def rename(name)
34
+ Statements::RenameColumn.new(context: self, name: name)
35
+ end
36
+
37
+ # Builds the 'ALTER TABLE ... ALTER' CQL statement
38
+ #
39
+ # @param [#to_s] type
40
+ #
41
+ # @return [QueryBuilder::Statements::AlterColumn]
42
+ #
43
+ def alter(type)
44
+ Statements::AlterColumn.new(context: self, type: type)
45
+ end
46
+
47
+ # Builds the 'ALTER TABLE ... DROP' CQL statement
48
+ #
49
+ # @return [QueryBuilder::Statements::DropColumn]
50
+ #
51
+ def drop
52
+ Statements::DropColumn.new(context: self)
53
+ end
54
+
55
+ end # class Column
56
+
57
+ end # module Contexts
58
+
59
+ end # module QueryBuilder::CQL
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Contexts
6
+
7
+ # Describes the field of Cassandra user-defined type
8
+ #
9
+ class Field < Base
10
+
11
+ attribute :type, required: true
12
+ attribute :name, required: true
13
+
14
+ # Builds the 'ALTER TYPE ... ADD' CQL statement
15
+ #
16
+ # @param [#to_s] type
17
+ #
18
+ # @return [QueryBuilder::Statements::CreateField]
19
+ #
20
+ def create(type)
21
+ Statements::CreateField.new(context: self, type: type)
22
+ end
23
+
24
+ # Builds the 'ALTER TYPE ... ALTER' CQL statement
25
+ #
26
+ # @param [#to_s] type
27
+ #
28
+ # @return [QueryBuilder::Statements::AlterField]
29
+ #
30
+ def alter(type)
31
+ Statements::AlterField.new(context: self, type: type)
32
+ end
33
+
34
+ # Builds the 'ALTER TYPE ... RENAME' CQL statement
35
+ #
36
+ # @param [#to_s] name
37
+ #
38
+ # @return [QueryBuilder::Statements::RenameField]
39
+ #
40
+ def rename(name)
41
+ Statements::RenameField.new(context: self, name: name)
42
+ end
43
+
44
+ end # class Field
45
+
46
+ end # module Contexts
47
+
48
+ end # module QueryBuilder::CQL
@@ -0,0 +1,46 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Contexts
6
+
7
+ # Describes the Cassandra user-defined function
8
+ #
9
+ class Function < Base
10
+
11
+ attribute :keyspace, required: true
12
+ attribute :name, required: true
13
+
14
+ # Returns the full name of the function
15
+ #
16
+ # @return [String]
17
+ #
18
+ def to_s
19
+ [keyspace, name].join(".")
20
+ end
21
+
22
+ # Builds the 'CREATE FUNCTION' CQL statement
23
+ #
24
+ # @param [#to_s] language
25
+ # @param [#to_s] body
26
+ #
27
+ # @return [QueryBuilder::Statements::CreateFunction]
28
+ #
29
+ def create(language, body)
30
+ Statements::CreateFunction
31
+ .new(context: self, language: language, body: body)
32
+ end
33
+
34
+ # Builds the 'DROP FUNCTION' CQL statement
35
+ #
36
+ # @return [QueryBuilder::Statements::DropFunction]
37
+ #
38
+ def drop
39
+ Statements::DropFunction.new(context: self)
40
+ end
41
+
42
+ end # class Function
43
+
44
+ end # module Contexts
45
+
46
+ end # module QueryBuilder::CQL
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Contexts
6
+
7
+ # Describes the Cassandra table index
8
+ #
9
+ class Index < Base
10
+
11
+ attribute :table, required: true
12
+ attribute :name
13
+
14
+ # <description>
15
+ #
16
+ # @return [<type>] <description>
17
+ #
18
+ def to_s
19
+ [table.keyspace.name, name].join(".")
20
+ end
21
+
22
+ # Builds the 'CREATE INDEX' CQL statement for the current table
23
+ #
24
+ # @param [Hash] options
25
+ #
26
+ # @return [QueryBuilder::Statements::CreateIndex]
27
+ #
28
+ def create(*options)
29
+ Statements::CreateIndex.new(context: self).add(options)
30
+ end
31
+
32
+ # Builds the 'DROP INDEX' CQL statement
33
+ #
34
+ # @return [QueryBuilder::Statements::DropIndex]
35
+ #
36
+ def drop
37
+ Statements::DropIndex.new(context: self)
38
+ end
39
+
40
+ end # class Index
41
+
42
+ end # module Contexts
43
+
44
+ end # module QueryBuilder::CQL
@@ -0,0 +1,107 @@
1
+ # encoding: utf-8
2
+
3
+ module QueryBuilder::CQL
4
+
5
+ module Contexts
6
+
7
+ # Describes the Cassandra keyspace
8
+ #
9
+ class Keyspace < Base
10
+
11
+ attribute :name, required: true
12
+
13
+ # Returns the name of the keyspace
14
+ #
15
+ # @return [String]
16
+ #
17
+ def to_s
18
+ name.to_s
19
+ end
20
+
21
+ # Returns the table context
22
+ #
23
+ # @param [#to_s] name
24
+ #
25
+ # @return [QueryBuilder::CQL::Contexts::Table]
26
+ #
27
+ def table(name)
28
+ Table.new(keyspace: self, name: name)
29
+ end
30
+
31
+ # Returns the type context
32
+ #
33
+ # @param [#to_s] name
34
+ #
35
+ # @return [QueryBuilder::CQL::Contexts::Type]
36
+ #
37
+ def type(name)
38
+ Type.new(keyspace: self, name: name)
39
+ end
40
+
41
+ # Returns the function context
42
+ #
43
+ # @param [#to_s] name
44
+ #
45
+ # @return [QueryBuilder::CQL::Contexts::Function]
46
+ #
47
+ def function(name)
48
+ Function.new(keyspace: self, name: name)
49
+ end
50
+
51
+ # Returns the aggregate context
52
+ #
53
+ # @param [#to_s] name
54
+ #
55
+ # @return [QueryBuilder::CQL::Contexts::Aggregate]
56
+ #
57
+ def aggregate(name)
58
+ Aggregate.new(keyspace: self, name: name)
59
+ end
60
+
61
+ # Returns the context of Cassandra keyspace permission
62
+ #
63
+ # @param [#to_s, nil] name The name of the permission
64
+ #
65
+ # @param [QueryBuilder::CQL::Contexts::Permission]
66
+ #
67
+ def permission(name = nil)
68
+ Contexts::Permission.new(keyspace: self, name: name)
69
+ end
70
+
71
+ # Builds the 'CREATE KEYSPACE' CQL statement for the current keyspace
72
+ #
73
+ # @return [QueryBuilder::Statements::CreateKeyspace]
74
+ #
75
+ def create
76
+ Statements::CreateKeyspace.new(context: self)
77
+ end
78
+
79
+ # Builds the 'ALTER KEYSPACE' CQL statement for the current keyspace
80
+ #
81
+ # @return [QueryBuilder::CQL::Statements::AlterKeyspace]
82
+ #
83
+ def alter
84
+ Statements::AlterKeyspace.new(context: self)
85
+ end
86
+
87
+ # Builds the 'DROP KEYSPACE' CQL statement for the current keyspace
88
+ #
89
+ # @return [QueryBuilder::CQL::Statements::DropKeyspace]
90
+ #
91
+ def drop
92
+ Statements::DropKeyspace.new(context: self)
93
+ end
94
+
95
+ # Builds the 'USE' CQL statement
96
+ #
97
+ # @return [QueryBuilder::Statements::Use]
98
+ #
99
+ def use
100
+ Statements::Use.new(context: self)
101
+ end
102
+
103
+ end # class Keyspace
104
+
105
+ end # module Contexts
106
+
107
+ end # module QueryBuilder::CQL::Contexts