Module: JdbcSpec::SQLite3
- Defined in:
- lib/jdbc_adapter/jdbc_sqlite3.rb
Defined Under Namespace
Modules: Column
Class Method Summary collapse
Instance Method Summary collapse
- #add_column(table_name, column_name, type, options = {}) ⇒ Object
-
#add_limit_offset!(sql, options) ⇒ Object
:nodoc:.
-
#change_column(table_name, column_name, type, options = {}) ⇒ Object
:nodoc:.
-
#change_column_default(table_name, column_name, default) ⇒ Object
:nodoc:.
- #indexes(table_name, name = nil) ⇒ Object
-
#insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) ⇒ Object
:nodoc:.
- #last_insert_id(table, sequence_name) ⇒ Object
- #modify_types(tp) ⇒ Object
-
#quote(value, column = nil) ⇒ Object
:nodoc:.
- #quote_string(str) ⇒ Object
- #quoted_false ⇒ Object
- #quoted_true ⇒ Object
-
#remove_column(table_name, column_name) ⇒ Object
:nodoc:.
- #remove_index(table_name, options = {}) ⇒ Object
-
#rename_column(table_name, column_name, new_column_name) ⇒ Object
:nodoc:.
- #rename_table(name, new_name) ⇒ Object
- #tables ⇒ Object
- #type_cast(value) ⇒ Object
Class Method Details
Instance Method Details
#add_column(table_name, column_name, type, options = {}) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 103 def add_column(table_name, column_name, type, = {}) if option_not_null = [:null] == false option_not_null = .delete(:null) end add_column_sql = "ALTER TABLE #{quote_table_name(table_name)} ADD #{quote_column_name(column_name)} #{type_to_sql(type, [:limit], [:precision], [:scale])}" (add_column_sql, ) execute(add_column_sql) if option_not_null alter_column_sql = "ALTER TABLE #{quote_table_name(table_name)} ALTER #{quote_column_name(column_name)} NOT NULL" end end |
#add_limit_offset!(sql, options) ⇒ Object
:nodoc:
161 162 163 164 165 166 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 161 def add_limit_offset!(sql, ) #:nodoc: if [:limit] sql << " LIMIT #{[:limit]}" sql << " OFFSET #{[:offset]}" if [:offset] end end |
#change_column(table_name, column_name, type, options = {}) ⇒ Object
:nodoc:
133 134 135 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 133 def change_column(table_name, column_name, type, = {}) #:nodoc: execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} #{type_to_sql(type, [:limit])}" end |
#change_column_default(table_name, column_name, default) ⇒ Object
:nodoc:
137 138 139 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 137 def change_column_default(table_name, column_name, default) #:nodoc: execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} SET DEFAULT #{quote(default)}" end |
#indexes(table_name, name = nil) ⇒ Object
176 177 178 179 180 181 182 183 184 185 186 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 176 def indexes(table_name, name = nil) result = select_rows("SELECT name, sql FROM sqlite_master WHERE tbl_name = '#{table_name}' AND type = 'index'", name) result.collect do |row| name = row[0] index_sql = row[1] unique = (index_sql =~ /unique/i) cols = index_sql.match(/\((.*)\)/)[1].gsub(/,/,' ').split ::ActiveRecord::ConnectionAdapters::IndexDefinition.new(table_name, name, unique, cols) end end |
#insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) ⇒ Object
:nodoc:
149 150 151 152 153 154 155 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 149 def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) #:nodoc: log(sql,name) do @connection.execute_update(sql) end table = sql.split(" ", 4)[2] id_value || last_insert_id(table, nil) end |
#last_insert_id(table, sequence_name) ⇒ Object
157 158 159 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 157 def last_insert_id(table, sequence_name) Integer(select_value("SELECT SEQ FROM SQLITE_SEQUENCE WHERE NAME = '#{table}'")) end |
#modify_types(tp) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 65 def modify_types(tp) tp[:primary_key] = "INTEGER PRIMARY KEY AUTOINCREMENT" tp[:float] = { :name => "REAL" } tp[:decimal] = { :name => "REAL" } tp[:datetime] = { :name => "INTEGER" } tp[:timestamp] = { :name => "INTEGER" } tp[:time] = { :name => "INTEGER" } tp[:date] = { :name => "INTEGER" } tp[:boolean] = { :name => "INTEGER", :limit => 1} tp end |
#quote(value, column = nil) ⇒ Object
:nodoc:
77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 77 def quote(value, column = nil) # :nodoc: return value.quoted_id if value.respond_to?(:quoted_id) case value when String if column && column.type == :binary "'#{quote_string(value).unpack("C*").collect {|v| v.to_s(16)}.join}'" else "'#{quote_string(value)}'" end else super end end |
#quote_string(str) ⇒ Object
91 92 93 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 91 def quote_string(str) str.gsub(/'/, "''") end |
#quoted_false ⇒ Object
99 100 101 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 99 def quoted_false '0' end |
#quoted_true ⇒ Object
95 96 97 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 95 def quoted_true '1' end |
#remove_column(table_name, column_name) ⇒ Object
:nodoc:
115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 115 def remove_column(table_name, column_name) #:nodoc: cols = columns(table_name).collect {|col| col.name} cols.delete(column_name) cols = cols.join(', ') table_backup = table_name + "_backup" @connection.begin execute "CREATE TEMPORARY TABLE #{table_backup}(#{cols})" insert "INSERT INTO #{table_backup} SELECT #{cols} FROM #{table_name}" execute "DROP TABLE #{table_name}" execute "CREATE TABLE #{table_name}(#{cols})" insert "INSERT INTO #{table_name} SELECT #{cols} FROM #{table_backup}" execute "DROP TABLE #{table_backup}" @connection.commit end |
#remove_index(table_name, options = {}) ⇒ Object
172 173 174 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 172 def remove_index(table_name, = {}) execute "DROP INDEX #{quote_column_name(index_name(table_name, ))}" end |
#rename_column(table_name, column_name, new_column_name) ⇒ Object
:nodoc:
141 142 143 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 141 def rename_column(table_name, column_name, new_column_name) #:nodoc: execute "ALTER TABLE #{table_name} ALTER COLUMN #{column_name} RENAME TO #{new_column_name}" end |
#rename_table(name, new_name) ⇒ Object
145 146 147 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 145 def rename_table(name, new_name) execute "ALTER TABLE #{name} RENAME TO #{new_name}" end |
#tables ⇒ Object
168 169 170 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 168 def tables @connection.tables.select {|row| row.to_s !~ /^sqlite_/i } end |
#type_cast(value) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/jdbc_adapter/jdbc_sqlite3.rb', line 50 def type_cast(value) return nil if value.nil? case type when :string then value when :integer then defined?(value.to_i) ? value.to_i : (value ? 1 : 0) when :primary_key then defined?(value.to_i) ? value.to_i : (value ? 1 : 0) when :float then value.to_f when :datetime then JdbcSpec::SQLite3::Column.cast_to_date_or_time(value) when :time then JdbcSpec::SQLite3::Column.cast_to_time(value) when :decimal then self.class.value_to_decimal(value) when :boolean then self.class.value_to_boolean(value) else value end end |