Module: ActiveRecord::ConnectionAdapters::TursoAdapter::SchemaStatements
- Included in:
- ActiveRecord::ConnectionAdapters::TursoAdapter
- Defined in:
- lib/active_record/connection_adapters/turso_adapter/schema_statements.rb
Instance Method Summary collapse
- #add_fts_index(table_name, columns, tokenizer: :default, weights: {}) ⇒ Object
- #create_virtual_table(table_name, type_name, columns_or_options = [], **options) ⇒ Object
- #drop_virtual_table(table_name, **options) ⇒ Object
- #fts_indexes(table_name) ⇒ Object
- #fts_match(_table_name, columns, query) ⇒ Object
- #fts_score(_table_name, columns, query) ⇒ Object
- #indexes(table_name) ⇒ Object
- #remove_fts_index(table_name, name = nil) ⇒ Object
- #supports_virtual_tables? ⇒ Boolean
- #tables(name = nil) ⇒ Object
- #views ⇒ Object
- #virtual_tables ⇒ Object
Instance Method Details
#add_fts_index(table_name, columns, tokenizer: :default, weights: {}) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 50 def add_fts_index(table_name, columns, tokenizer: :default, weights: {}) columns = Array(columns) name = "fts_#{table_name}_#{columns.join('_')}" weights_str = weights.map { |col, w| "#{col}=#{w}" }.join(",") with_clause = ["tokenizer = '#{tokenizer}'"] with_clause << "weights = '#{weights_str}'" unless weights_str.empty? execute(<<~SQL) CREATE INDEX #{quote_table_name(name)} ON #{quote_table_name(table_name)} USING fts (#{columns.join(", ")}) WITH (#{with_clause.join(", ")}) SQL end |
#create_virtual_table(table_name, type_name, columns_or_options = [], **options) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 38 def create_virtual_table(table_name, type_name, = [], **) type_name = type_name.to_s columns = .is_a?(Array) ? : ([:columns] || []) = .is_a?(Hash) ? : = () execute("CREATE VIRTUAL TABLE #{quote_table_name(table_name)} USING #{type_name} (#{columns.join(", ")})#{}") end |
#drop_virtual_table(table_name, **options) ⇒ Object
46 47 48 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 46 def drop_virtual_table(table_name, **) execute("DROP TABLE IF EXISTS #{quote_table_name(table_name)}") end |
#fts_indexes(table_name) ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 69 def fts_indexes(table_name) query_values(<<~SQL, "SCHEMA") SELECT name FROM sqlite_master WHERE type = 'index' AND tbl_name = #{quote(table_name)} AND sql LIKE '%USING fts%' SQL end |
#fts_match(_table_name, columns, query) ⇒ Object
78 79 80 81 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 78 def fts_match(_table_name, columns, query) cols = Array(columns).map { |c| quote_table_name(c) }.join(", ") Arel.sql("fts_match(#{cols}, #{quote(query)})") end |
#fts_score(_table_name, columns, query) ⇒ Object
83 84 85 86 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 83 def fts_score(_table_name, columns, query) cols = Array(columns).map { |c| quote_table_name(c) }.join(", ") Arel.sql("fts_score(#{cols}, #{quote(query)})") end |
#indexes(table_name) ⇒ Object
30 31 32 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 30 def indexes(table_name) super.reject { |idx| idx.name.to_s.start_with?("fts_dir_") || idx.name.to_s.start_with?("sqlite_fts_") } end |
#remove_fts_index(table_name, name = nil) ⇒ Object
64 65 66 67 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 64 def remove_fts_index(table_name, name = nil) name ||= "fts_#{table_name}" execute("DROP INDEX IF EXISTS #{quote_table_name(name)}") end |
#supports_virtual_tables? ⇒ Boolean
34 35 36 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 34 def supports_virtual_tables? true end |
#tables(name = nil) ⇒ Object
7 8 9 10 11 12 13 14 15 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 7 def tables(name = nil) query_values(<<~SQL, "SCHEMA") SELECT name FROM sqlite_master WHERE type IN ('table', 'view') AND name NOT LIKE 'sqlite_%' AND name NOT LIKE 'fts_dir_%' AND name NOT LIKE 'sqlite_fts_%' SQL end |
#views ⇒ Object
17 18 19 20 21 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 17 def views query_values(<<~SQL, "SCHEMA") SELECT name FROM sqlite_master WHERE type = 'view' SQL end |
#virtual_tables ⇒ Object
23 24 25 26 27 28 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 23 def virtual_tables query_values(<<~SQL, "SCHEMA") SELECT name FROM sqlite_master WHERE type = 'table' AND sql LIKE '%CREATE VIRTUAL TABLE%' SQL end |