Class: Sequel::SQLite::Database
- Includes:
- DatabaseMethods
- Defined in:
- lib/sequel/adapters/sqlite.rb
Constant Summary
Constants included from DatabaseMethods
Sequel::SQLite::DatabaseMethods::AUTO_VACUUM, Sequel::SQLite::DatabaseMethods::SYNCHRONOUS, Sequel::SQLite::DatabaseMethods::TEMP_STORE, Sequel::SQLite::DatabaseMethods::TRANSACTION_MODE
Constants inherited from Database
Database::ADAPTERS, Database::COLUMN_DEFINITION_ORDER, Database::COLUMN_SCHEMA_DATETIME_TYPES, Database::COLUMN_SCHEMA_STRING_TYPES, Database::COMBINABLE_ALTER_TABLE_OPS, Database::DEFAULT_DATABASE_ERROR_REGEXPS, Database::DEFAULT_STRING_COLUMN_SIZE, Database::EXTENSIONS, Database::OPTS, Database::SCHEMA_TYPE_CLASSES, Database::TRANSACTION_ISOLATION_LEVELS
Instance Attribute Summary collapse
-
#conversion_procs ⇒ Object
readonly
The conversion procs to use for this database.
Attributes included from DatabaseMethods
#current_timestamp_utc, #integer_booleans, #transaction_mode, #use_timestamp_timezones
Attributes inherited from Database
#cache_schema, #check_string_typecast_bytesize, #dataset_class, #default_string_column_size, #log_connection_info, #log_warn_duration, #loggers, #opts, #pool, #prepared_statements, #sql_log_level, #timezone, #transaction_isolation_level
Instance Method Summary collapse
-
#allow_regexp? ⇒ Boolean
Whether this Database instance is setup to allow regexp matching.
-
#connect(server) ⇒ Object
Connect to the database.
-
#disconnect_connection(c) ⇒ Object
Disconnect given connections from the database.
-
#execute(sql, opts = OPTS, &block) ⇒ Object
Run the given SQL with the given arguments and yield each row.
-
#execute_ddl(sql, opts = OPTS) ⇒ Object
Drop any prepared statements on the connection when executing DDL.
-
#execute_dui(sql, opts = OPTS) ⇒ Object
Run the given SQL with the given arguments and return the number of changed rows.
- #execute_insert(sql, opts = OPTS) ⇒ Object
- #freeze ⇒ Object
-
#initialize(opts = OPTS) ⇒ Database
constructor
A new instance of Database.
-
#to_application_timestamp(s) ⇒ Object
Handle Integer and Float arguments, since SQLite can store timestamps as integers and floats.
Methods included from DatabaseMethods
#database_type, #foreign_key_list, #indexes, #set_integer_booleans, #sqlite_version, #support_without_rowid?, #supports_create_table_if_not_exists?, #supports_deferrable_foreign_key_constraints?, #supports_partial_indexes?, #supports_savepoints?, #tables, #use_timestamp_timezones?, #values, #views
Methods inherited from Database
#<<, #[], adapter_class, #adapter_scheme, adapter_scheme, #add_column, #add_index, #add_servers, #after_commit, after_initialize, #after_rollback, #alter_table, #alter_table_generator, #call, #cast_type_literal, connect, #create_join_table, #create_join_table!, #create_join_table?, #create_or_replace_view, #create_table, #create_table!, #create_table?, #create_table_generator, #create_view, #database_type, #dataset, #disconnect, #drop_column, #drop_index, #drop_join_table, #drop_table, #drop_table?, #drop_view, #extend_datasets, #extension, extension, #fetch, #from, #from_application_timestamp, #get, #global_index_namespace?, #in_transaction?, #inspect, #literal, #literal_symbol, #literal_symbol_set, load_adapter, #log_connection_yield, #log_exception, #log_info, #logger=, #new_connection, #prepared_statement, #quote_identifier, register_extension, #remove_servers, #rename_column, #rename_table, #rollback_checker, #rollback_on_exit, #run, run_after_initialize, #schema, #schema_type_class, #select, #serial_primary_key_options, #servers, #set_column_default, #set_column_type, #set_prepared_statement, set_shared_adapter_scheme, #sharded?, #single_threaded?, #supports_create_table_if_not_exists?, #supports_deferrable_constraints?, #supports_deferrable_foreign_key_constraints?, #supports_drop_table_if_exists?, #supports_foreign_key_parsing?, #supports_index_parsing?, #supports_partial_indexes?, #supports_prepared_transactions?, #supports_savepoints?, #supports_savepoints_in_prepared_transactions?, #supports_schema_parsing?, #supports_table_listing?, #supports_transaction_isolation_levels?, #supports_transactional_ddl?, #supports_view_listing?, #supports_views_with_check_option?, #supports_views_with_local_check_option?, #synchronize, #table_exists?, #test_connection, #transaction, #typecast_value, #uri, #url, #valid_connection?
Constructor Details
Instance Attribute Details
#conversion_procs ⇒ Object (readonly)
The conversion procs to use for this database
99 100 101 |
# File 'lib/sequel/adapters/sqlite.rb', line 99 def conversion_procs @conversion_procs end |
Instance Method Details
#allow_regexp? ⇒ Boolean
Whether this Database instance is setup to allow regexp matching. True if the :setup_regexp_function option was passed when creating the Database.
158 159 160 |
# File 'lib/sequel/adapters/sqlite.rb', line 158 def allow_regexp? @allow_regexp end |
#connect(server) ⇒ Object
Connect to the database. Since SQLite is a file based database, available options are limited:
- :database
-
database name (filename or ‘:memory:’ or file: URI)
- :readonly
-
open database in read-only mode; useful for reading static data that you do not want to modify
- :disable_dqs
-
disable double quoted strings in DDL and DML statements (requires SQLite 3.29.0+ and sqlite3 gem version 1.4.3+).
- :timeout
-
how long to wait for the database to be available if it is locked, given in milliseconds (default is 5000)
- :setup_regexp_function
-
enable use of Regexp objects with SQL
'REGEXP' operator. If the value is :cached or "cached",
caches the generated regexps, which can result in a memory
leak if dynamic regexps are used. If the value is a Proc,
it will be called with a string for the regexp and a string
for the value to compare, and should return whether the regexp
matches.
- :regexp_function_cache
-
If setting
setup_regexp_function
tocached
, this
determines the cache to use. It should either be a proc or a class, and it
defaults to +Hash+. You can use +ObjectSpace::WeakKeyMap+ on Ruby 3.3+ to
have the VM automatically remove regexps from the cache after they
are no longer used.
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/sequel/adapters/sqlite.rb', line 128 def connect(server) opts = server_opts(server) opts[:database] = ':memory:' if blank_object?(opts[:database]) sqlite3_opts = {} sqlite3_opts[:readonly] = typecast_value_boolean(opts[:readonly]) if opts.has_key?(:readonly) # SEQUEL6: Make strict: true the default behavior sqlite3_opts[:strict] = typecast_value_boolean(opts[:disable_dqs]) if opts.has_key?(:disable_dqs) db = ::SQLite3::Database.new(opts[:database].to_s, sqlite3_opts) db.busy_timeout(typecast_value_integer(opts.fetch(:timeout, 5000))) if USE_EXTENDED_RESULT_CODES db.extended_result_codes = true end connection_pragmas.each{|s| log_connection_yield(s, db){db.execute_batch(s)}} if typecast_value_boolean(opts[:setup_regexp_function]) setup_regexp_function(db, opts[:setup_regexp_function]) end class << db attr_reader :prepared_statements end db.instance_variable_set(:@prepared_statements, {}) db end |
#disconnect_connection(c) ⇒ Object
Disconnect given connections from the database.
163 164 165 166 |
# File 'lib/sequel/adapters/sqlite.rb', line 163 def disconnect_connection(c) c.prepared_statements.each_value{|v| v.first.close} c.close end |
#execute(sql, opts = OPTS, &block) ⇒ Object
Run the given SQL with the given arguments and yield each row.
169 170 171 |
# File 'lib/sequel/adapters/sqlite.rb', line 169 def execute(sql, opts=OPTS, &block) _execute(:select, sql, opts, &block) end |
#execute_ddl(sql, opts = OPTS) ⇒ Object
Drop any prepared statements on the connection when executing DDL. This is because prepared statements lock the table in such a way that you can’t drop or alter the table while a prepared statement that references it still exists.
181 182 183 184 185 186 187 |
# File 'lib/sequel/adapters/sqlite.rb', line 181 def execute_ddl(sql, opts=OPTS) synchronize(opts[:server]) do |conn| conn.prepared_statements.values.each{|cps, s| cps.close} conn.prepared_statements.clear super end end |
#execute_dui(sql, opts = OPTS) ⇒ Object
Run the given SQL with the given arguments and return the number of changed rows.
174 175 176 |
# File 'lib/sequel/adapters/sqlite.rb', line 174 def execute_dui(sql, opts=OPTS) _execute(:update, sql, opts) end |
#execute_insert(sql, opts = OPTS) ⇒ Object
189 190 191 |
# File 'lib/sequel/adapters/sqlite.rb', line 189 def execute_insert(sql, opts=OPTS) _execute(:insert, sql, opts) end |
#freeze ⇒ Object
193 194 195 196 |
# File 'lib/sequel/adapters/sqlite.rb', line 193 def freeze @conversion_procs.freeze super end |
#to_application_timestamp(s) ⇒ Object
Handle Integer and Float arguments, since SQLite can store timestamps as integers and floats.
199 200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/sequel/adapters/sqlite.rb', line 199 def (s) case s when String super when Integer super(Time.at(s).to_s) when Float super(DateTime.jd(s).to_s) else raise Sequel::Error, "unhandled type when converting to : #{s.inspect} (#{s.class.inspect})" end end |