Class: Sequel::DuckDB::Database
- Inherits:
-
Sequel::Database
- Object
- Sequel::Database
- Sequel::DuckDB::Database
- Includes:
- DatabaseMethods
- Defined in:
- lib/sequel/adapters/duckdb.rb
Overview
Database class for DuckDB adapter
This class extends Sequel::Database to provide DuckDB-specific functionality. It handles connection management, schema operations, and SQL execution for DuckDB databases. The class includes DatabaseMethods from the shared module to provide the core database functionality.
Instance Method Summary collapse
-
#connect(server) ⇒ ::DuckDB::Connection
Connect to a DuckDB database.
-
#dataset_class_default ⇒ Class
Return the default dataset class for this database.
-
#disconnect_connection(conn) ⇒ void
Disconnect from a DuckDB database connection.
-
#valid_connection?(conn) ⇒ Boolean
Check if a DuckDB connection is valid and open.
Methods included from DatabaseMethods
#analyze_query, #auto_increment_column_sql, #auto_increment_sql, #begin_transaction, #commit_transaction, #configure_columnar_optimization, #configure_duckdb, #configure_memory_optimization, #configure_parallel_execution, #cpu_count, #database_error_classes, #database_exception_class, #database_exception_message, #database_exception_sqlstate, #database_exception_use_sqlstates?, #database_type, #execute, #execute_insert, #execute_statement, #execute_update, #explain_query, #folds_unquoted_identifiers_to_uppercase?, #get_config_value, #handle_constraint_violation, #in_transaction?, #indexes, #isolation_transaction, #log_connection_info?, #log_error, #log_info, #log_sql_error, #log_sql_query, #log_sql_timing, #log_warn, #map_duckdb_type_to_sequel, #parse_default_value, #parse_index_columns, #primary_key_column_sql, #query_plan, #quote_identifiers_default, #rollback_transaction, #savepoint_transaction, #schema, #schema_parse_indexes, #schema_parse_table, #schema_parse_tables, #set_config_value, #set_pragma, #supports_autocommit_control?, #supports_autocommit_disable?, #supports_autoincrement?, #supports_explain?, #supports_manual_transaction_control?, #supports_savepoints?, #supports_transaction_isolation_level?, #table_exists?, #tables, #transaction, #type_literal, #typecast_value, #typecast_value_time, #update_primary_key_info
Instance Method Details
#connect(server) ⇒ ::DuckDB::Connection
Connect to a DuckDB database
Creates a connection to either a file-based or in-memory DuckDB database. This method handles the low-level connection establishment and error handling.
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/sequel/adapters/duckdb.rb', line 127 def connect(server) # rubocop:disable Metrics/MethodLength opts = server_opts(server) database_path = opts[:database] begin if database_path == ":memory:" || database_path.nil? # Create in-memory database and return connection db = ::DuckDB::Database.open(":memory:") else # Fix URI parsing issue - add leading slash if missing for absolute paths database_path = "/#{database_path}" if database_path.match?(/^[a-zA-Z]/) && !database_path.start_with?(":") # Create file-based database (will create file if it doesn't exist) and return connection db = ::DuckDB::Database.open(database_path) end db.connect rescue ::DuckDB::Error => e raise Sequel::DatabaseConnectionError, "Failed to connect to DuckDB database: #{e.message}" rescue StandardError => e raise Sequel::DatabaseConnectionError, "Unexpected error connecting to DuckDB: #{e.message}" end end |
#dataset_class_default ⇒ Class
Return the default dataset class for this database
This method is called by Sequel to determine which Dataset class to use when creating new datasets for this database connection.
187 188 189 |
# File 'lib/sequel/adapters/duckdb.rb', line 187 def dataset_class_default Dataset end |
#disconnect_connection(conn) ⇒ void
This method returns an undefined value.
Disconnect from a DuckDB database connection
154 155 156 157 158 159 160 161 162 |
# File 'lib/sequel/adapters/duckdb.rb', line 154 def disconnect_connection(conn) return unless conn begin conn.close rescue ::DuckDB::Error # Ignore errors during disconnect - connection may already be closed end end |
#valid_connection?(conn) ⇒ Boolean
Check if a DuckDB connection is valid and open
168 169 170 171 172 173 174 175 176 177 178 |
# File 'lib/sequel/adapters/duckdb.rb', line 168 def valid_connection?(conn) return false unless conn begin # Try a simple query to check if the connection is still valid conn.query("SELECT 1") true rescue ::DuckDB::Error false end end |