Class: Mystic::SQL::Index
- Inherits:
-
Object
- Object
- Mystic::SQL::Index
- Defined in:
- lib/mystic/sql/index.rb
Constant Summary collapse
- INDEX_TYPES =
[ :btree, :hash, :gist, :spgist, :gin ].freeze
Instance Attribute Summary collapse
-
#columns ⇒ Object
Symbol or string.
-
#name ⇒ Object
Symbol or string.
-
#opts ⇒ Object
Symbol or string.
-
#table_name ⇒ Object
Symbol or string.
-
#type ⇒ Object
Symbol or string.
-
#unique ⇒ Object
Symbol or string.
Instance Method Summary collapse
-
#<<(col) ⇒ Object
can accept shit other than columns like box(location,location).
-
#initialize(opts = {}) ⇒ Index
constructor
Key => Value (type) :fillfactor => A value in the range 10..100 (Integer) :fastupdate => true/false (TrueClass/FalseClass) :concurrently => true/false (TrueClass/FalseClass) :tablespace => The name of the desired tablespace (String) :buffering => :on/:off/:auto (Symbol) :concurrently => true/false (TrueClass/FalseClass) :where => The conditions for including entries in your index, same as SELECT * FROM table WHERE __ (String).
- #method_missing(meth, *args, &block) ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(opts = {}) ⇒ Index
Key => Value (type) :fillfactor => A value in the range 10..100 (Integer) :fastupdate => true/false (TrueClass/FalseClass) :concurrently => true/false (TrueClass/FalseClass) :tablespace => The name of the desired tablespace (String) :buffering => :on/:off/:auto (Symbol) :concurrently => true/false (TrueClass/FalseClass) :where => The conditions for including entries in your index, same as SELECT * FROM table WHERE __ (String)
33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/mystic/sql/index.rb', line 33 def initialize opts={} opts.symbolize! raise ArgumentError, "Missing table_name." unless opts.member? :table_name raise ArgumentError, "Indeces need columns or else what's the point?" unless opts.member? :columns @name = opts.delete(:name).to_sym if opts.member? :name @table_name = opts.delete(:table_name).to_sym @type = (opts.delete(:type) || :btree).to_s.downcase.to_sym @unique = opts.delete :unique || false @columns = opts.delete(:columns).symbolize rescue [] @opts = opts end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(meth, *args, &block) ⇒ Object
54 55 56 57 |
# File 'lib/mystic/sql/index.rb', line 54 def method_missing(meth, *args, &block) return @opts[meth] if @opts.member? meth nil end |
Instance Attribute Details
#columns ⇒ Object
Symbol or string
6 7 8 |
# File 'lib/mystic/sql/index.rb', line 6 def columns @columns end |
#name ⇒ Object
Symbol or string
6 7 8 |
# File 'lib/mystic/sql/index.rb', line 6 def name @name end |
#opts ⇒ Object
Symbol or string
6 7 8 |
# File 'lib/mystic/sql/index.rb', line 6 def opts @opts end |
#table_name ⇒ Object
Symbol or string
6 7 8 |
# File 'lib/mystic/sql/index.rb', line 6 def table_name @table_name end |
#type ⇒ Object
Symbol or string
6 7 8 |
# File 'lib/mystic/sql/index.rb', line 6 def type @type end |
#unique ⇒ Object
Symbol or string
6 7 8 |
# File 'lib/mystic/sql/index.rb', line 6 def unique @unique end |
Instance Method Details
#<<(col) ⇒ Object
can accept shit other than columns like box(location,location)
47 48 49 50 51 52 |
# File 'lib/mystic/sql/index.rb', line 47 def << col case col when Column then @columns << col.name.to_s when String then @columns << col else raise ArgumentError, "Column must be a String or a Mystic::SQL::Column" end end |
#to_s ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/mystic/sql/index.rb', line 59 def to_s storage_params = opts.subhash :fillfactor, :buffering, :fastupdate sql = [] sql << "CREATE" sql << "UNIQUE" if unique sql << "INDEX" sql << "CONCURENTLY" if concurrently sql << name unless name.nil? sql << "ON #{table_name}" sql << "USING #{type}" if INDEX_TYPES.include? type sql << "(#{columns.map(&:to_s).join ',' })" sql << "WITH (#{storage_params.sqlize})" unless storage_params.empty? sql << "TABLESPACE #{tablespace}" unless tablespace.nil? sql << "WHERE #{where}" unless where.nil? sql*' ' end |