| Module | Sequel::SQLite::DatasetMethods |
| In: |
lib/sequel/adapters/shared/sqlite.rb
|
Instance methods for datasets that connect to an SQLite database
SQLite does not support pattern matching via regular expressions. SQLite is case insensitive (depending on pragma), so use LIKE for ILIKE.
# File lib/sequel/adapters/shared/sqlite.rb, line 240
240: def complex_expression_sql(op, args)
241: case op
242: when :~, '!~''!~', '~*''~*', '!~*''!~*'
243: raise Error, "SQLite does not support pattern matching via regular expressions"
244: when :LIKE, 'NOT LIKE''NOT LIKE', :ILIKE, 'NOT ILIKE''NOT ILIKE'
245: # SQLite is case insensitive for ASCII, and non case sensitive for other character sets
246: "#{'NOT ' if [:'NOT LIKE', :'NOT ILIKE'].include?(op)}(#{literal(args.at(0))} LIKE #{literal(args.at(1))})"
247: else
248: super(op, args)
249: end
250: end
SQLite performs a TRUNCATE style DELETE if no filter is specified. Since we want to always return the count of records, add a condition that is always true and then delete.
# File lib/sequel/adapters/shared/sqlite.rb, line 255
255: def delete
256: @opts[:where] ? super : filter(1=>1).delete
257: end
Insert the values into the database.
# File lib/sequel/adapters/shared/sqlite.rb, line 260
260: def insert(*values)
261: execute_insert(insert_sql(*values))
262: end
Allow inserting of values directly from a dataset.
# File lib/sequel/adapters/shared/sqlite.rb, line 265
265: def insert_sql(*values)
266: if (values.size == 1) && values.first.is_a?(Sequel::Dataset)
267: "INSERT INTO #{source_list(@opts[:from])} #{values.first.sql};"
268: else
269: super(*values)
270: end
271: end