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
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 51 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
39 40 41 42 43 44 45 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 39 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
47 48 49 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 47 def drop_virtual_table(table_name, **) execute("DROP TABLE IF EXISTS #{quote_table_name(table_name)}") end |
#fts_indexes(table_name) ⇒ Object
70 71 72 73 74 75 76 77 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 70 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
79 80 81 82 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 79 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
84 85 86 87 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 84 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
31 32 33 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 31 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
65 66 67 68 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 65 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
35 36 37 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 35 def supports_virtual_tables? true end |
#tables(name = nil) ⇒ Object
7 8 9 10 11 12 13 14 15 16 |
# 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_%' AND name NOT LIKE '__turso_internal_%' SQL end |
#views ⇒ Object
18 19 20 21 22 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 18 def views query_values(<<~SQL, "SCHEMA") SELECT name FROM sqlite_master WHERE type = 'view' SQL end |
#virtual_tables ⇒ Object
24 25 26 27 28 29 |
# File 'lib/active_record/connection_adapters/turso_adapter/schema_statements.rb', line 24 def virtual_tables query_values(<<~SQL, "SCHEMA") SELECT name FROM sqlite_master WHERE type = 'table' AND sql LIKE '%CREATE VIRTUAL TABLE%' SQL end |