Class: ActiveRecord::ConnectionAdapters::SQLite2Adapter
- Inherits:
-
SQLiteAdapter
- Object
- AbstractAdapter
- SQLiteAdapter
- ActiveRecord::ConnectionAdapters::SQLite2Adapter
- Defined in:
- lib/active_record/connection_adapters/sqlite_adapter.rb
Overview
:nodoc:
Direct Known Subclasses
Instance Method Summary collapse
-
#execute(sql, name = nil) ⇒ Object
SQLite 2 does not support COUNT(DISTINCT) queries:.
- #rewrite_count_distinct_queries(sql) ⇒ Object
Methods inherited from SQLiteAdapter
#adapter_name, #add_column, #begin_db_transaction, #change_column, #change_column_default, #columns, #commit_db_transaction, #delete, #indexes, #insert, #native_database_types, #primary_key, #quote_column_name, #quote_string, #remove_column, #remove_index, #rename_column, #rename_table, #rollback_db_transaction, #select_all, #select_one, #supports_count_distinct?, #supports_migrations?, #tables, #update
Methods inherited from AbstractAdapter
Instance Method Details
#execute(sql, name = nil) ⇒ Object
SQLite 2 does not support COUNT(DISTINCT) queries:
select COUNT(DISTINCT ArtistID) from CDs;
In order to get the number of artists we execute the following statement
SELECT COUNT(ArtistID) FROM (SELECT DISTINCT ArtistID FROM CDs);
354 355 356 |
# File 'lib/active_record/connection_adapters/sqlite_adapter.rb', line 354 def execute(sql, name = nil) #:nodoc: super(rewrite_count_distinct_queries(sql), name) end |
#rewrite_count_distinct_queries(sql) ⇒ Object
358 359 360 361 362 363 364 365 366 367 |
# File 'lib/active_record/connection_adapters/sqlite_adapter.rb', line 358 def rewrite_count_distinct_queries(sql) if sql =~ /count\(distinct ([^\)]+)\)( AS \w+)? (.*)/i distinct_column = $1 distinct_query = $3 column_name = distinct_column.split('.').last "SELECT COUNT(#{column_name}) FROM (SELECT DISTINCT #{distinct_column} #{distinct_query})" else sql end end |