aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorgkemmey <gray.kemmey@gmail.com>2018-09-13 16:00:51 -0400
committergkemmey <gray.kemmey@gmail.com>2018-09-13 16:11:09 -0400
commit3a36cb08687aa337efca4dff12d20901d4d8029e (patch)
tree162409e8c479b0062c67f78632f8422238d7c7f7 /activerecord/lib/active_record
parentb20762e56c0412aee02bd244a3128c933c484e52 (diff)
downloadrails-3a36cb08687aa337efca4dff12d20901d4d8029e.tar.gz
rails-3a36cb08687aa337efca4dff12d20901d4d8029e.tar.bz2
rails-3a36cb08687aa337efca4dff12d20901d4d8029e.zip
SQLite3 adapter supports expression indexes
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb4
2 files changed, 9 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb b/activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb
index 24e7bc65fa..0e254455b6 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite3/schema_statements.rb
@@ -21,12 +21,16 @@ module ActiveRecord
WHERE name = #{quote(row['name'])} AND type = 'index'
SQL
- /\sWHERE\s+(?<where>.+)$/i =~ index_sql
+ /\sON\s+"(\w+?)"\s+\((?<expressions>.+?)\)(\sWHERE\s+(?<where>.+))?$/i =~ index_sql
columns = exec_query("PRAGMA index_info(#{quote(row['name'])})", "SCHEMA").map do |col|
col["name"]
end
+ if columns.any?(&:nil?) # index created with an expression
+ columns = expressions.split(", ").map { |e| e.gsub(/^\"|\"?$/, "") }
+ end
+
# Add info on sort order for columns (only desc order is explicitly specified, asc is
# the default)
orders = {}
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
index efe454fa7f..51f4944808 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
@@ -125,6 +125,10 @@ module ActiveRecord
true
end
+ def supports_expression_index?
+ sqlite_version >= "3.9.0"
+ end
+
def requires_reloading?
true
end