diff --git a/api/0.6.0/DB.html b/api/0.6.0/DB.html new file mode 100644 index 0000000..8c5dbaf --- /dev/null +++ b/api/0.6.0/DB.html @@ -0,0 +1,778 @@ + + + + + + + + + + + + + + + DB - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + module DB + +

+ + + + + +

Overview

+ +

The DB module is a unified interface for database access. +Individual database systems are supported by specific database driver shards.

+ +

Available drivers include:

+ + + +

For basic instructions on implementing a new database driver, check Driver and the existing drivers.

+ +

DB manages a connection pool. The connection pool can be configured by query parameters to the +connection URI as described in Database.

+ +

Usage

+ +

Assuming crystal-sqlite3 is included a SQLite3 database can be opened with #open.

+ +
db = DB.open "sqlite3:./path/to/db/file.db"
+db.close
+ +

If a block is given to #open the database is closed automatically

+ +
DB.open "sqlite3:./file.db" do |db|
+  # work with db
+end # db is closed
+ +

In the code above db is a Database. Methods available for querying it are described in QueryMethods.

+ +

Three kind of statements can be performed:

+ +
  1. Database#exec waits no response from the database.
  2. Database#scalar reads a single value of the response.
  3. Database#query returns a ResultSet that allows iteration over the rows in the response and column information.
+ +

All of the above methods allows parametrised query. Either positional or named arguments.

+ +

Check a full working version:

+ +

The following example uses SQLite where ? indicates the arguments. If PostgreSQL is used $1, $2, etc. should be used. crystal-db does not interpret the statements.

+ +
require "db"
+require "sqlite3"
+
+DB.open "sqlite3:./file.db" do |db|
+  # When using the pg driver, use $1, $2, etc. instead of ?
+  db.exec "create table contacts (name text, age integer)"
+  db.exec "insert into contacts values (?, ?)", "John Doe", 30
+
+  args = [] of DB::Any
+  args << "Sarah"
+  args << 33
+  db.exec "insert into contacts values (?, ?)", args
+
+  puts "max age:"
+  puts db.scalar "select max(age) from contacts" # => 33
+
+  puts "contacts:"
+  db.query "select name, age from contacts order by age desc" do |rs|
+    puts "#{rs.column_name(0)} (#{rs.column_name(1)})"
+    # => name (age)
+    rs.each do
+      puts "#{rs.read(String)} (#{rs.read(Int32)})"
+      # => Sarah (33)
+      # => John Doe (30)
+    end
+  end
+end
+ + + + + + + + + + + + + + +

Defined in:

+ + + + db.cr + + +
+ + + + db/pool.cr + + +
+ + + + db/string_key_cache.cr + + +
+ + + + db/query_methods.cr + + +
+ + + + db/session_methods.cr + + +
+ + + + db/disposable.cr + + +
+ + + + db/driver.cr + + +
+ + + + db/statement.cr + + +
+ + + + db/begin_transaction.cr + + +
+ + + + db/connection_context.cr + + +
+ + + + db/connection.cr + + +
+ + + + db/transaction.cr + + +
+ + + + db/pool_statement.cr + + +
+ + + + db/database.cr + + +
+ + + + db/pool_prepared_statement.cr + + +
+ + + + db/pool_unprepared_statement.cr + + +
+ + + + db/result_set.cr + + +
+ + + + db/error.cr + + +
+ + + + db/mapping.cr + + +
+ + + + spec.cr + + +
+ + + + db/version.cr + + +
+ + + + + +

Constant Summary

+ +
+ +
+ TYPES = [Nil, String, Bool, Int32, Int64, Float32, Float64, Time, Bytes] +
+ +
+

Types supported to interface with database driver. +These can be used in any ResultSet#read or any Database#query related +method to be used as query parameters

+
+ + +
+ VERSION = "0.6.0" +
+ + +
+ + + + + +

Class Method Summary

+ + + + + + +

Macro Summary

+ + + + +
+ +
+ + + + +

Class Method Detail

+ +
+
+ + def self.connect(uri : URI | String) + + # +
+ +

Opens a connection using the specified uri. +The scheme of the uri determines the driver to use. +Returned connection must be closed by Connection#close. +If a block is used the connection is yielded and closed automatically.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def self.connect(uri : URI | String, &block) + + # +
+ +

Opens a connection using the specified uri. +The scheme of the uri determines the driver to use. +Returned connection must be closed by Connection#close. +If a block is used the connection is yielded and closed automatically.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def self.open(uri : URI | String) + + # +
+ +

Creates a Database pool and opens initial connection(s) as specified in the connection uri. +Use DB#connect to open a single connection.

+ +

The scheme of the uri determines the driver to use. +Connection parameters such as hostname, user, database name, etc. are specified according +to each database driver's specific format.

+ +

The returned database must be closed by Database#close.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def self.open(uri : URI | String, &block) + + # +
+ +

Same as #open but the database is yielded and closed automatically at the end of the block.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def self.register_driver(driver_name, driver_class : Driver.class) + + # +
+ +

Registers a driver class for a given driver_name. +Should be called by drivers implementors only.

+ +
+
+ + [View source] + +
+
+ + + + + + +

Macro Detail

+ +
+
+ + macro mapping(properties, strict = true) + + # +
+ +

The DB.mapping macro defines how an object is built from a ResultSet.

+ +

It takes hash literal as argument, in which attributes and types are defined. +Once defined, ResultSet#read(t) populates properties of the class from the +ResultSet.

+ +
require "db"
+
+class Employee
+  DB.mapping({
+    title: String,
+    name:  String,
+  })
+end
+
+employees = Employee.from_rs(db.query("SELECT title, name FROM employees"))
+employees[0].title # => "Manager"
+employees[0].name  # => "John"
+ +

Attributes not mapped with DB.mapping are not defined as properties. +Also, missing attributes raise a DB::MappingException.

+ +

You can also define attributes for each property.

+ +
class Employee
+  DB.mapping({
+    title: String,
+    name:  {
+      type:    String,
+      nilable: true,
+      key:     "firstname",
+    },
+  })
+end
+ +

Available attributes:

+ +
  • type (required) defines its type. In the example above, title: String is a shortcut to title: {type: String}.
  • nilable defines if a property can be a Nil.
  • default: value to use if the property is missing in the result set, or if it's null and nilable was not set to true. If the default value creates a new instance of an object (for example [1, 2, 3] or SomeObject.new), a different instance will be used each time a row is parsed.
  • key defines which column to read from a ResultSet. It defaults to the name of the property.
  • converter takes an alternate type for parsing. It requires a #from_rs method in that class, and returns an instance of the given type.
+ +

The mapping also automatically defines Crystal properties (getters and setters) for each +of the keys. It doesn't define a constructor accepting those arguments, but you can provide +an overload.

+ +

The macro basically defines a constructor accepting a ResultSet that reads from +it and initializes this type's instance variables.

+ +

This macro also declares instance variables of the types given in the mapping.

+ +
+
+ + [View source] + +
+
+ +
+
+ + macro mapping(**properties) + + # +
+ +
+
+ + [View source] + +
+
+ + + +
+ + + diff --git a/api/0.6.0/DB/Any.html b/api/0.6.0/DB/Any.html new file mode 100644 index 0000000..de7fdb9 --- /dev/null +++ b/api/0.6.0/DB/Any.html @@ -0,0 +1,304 @@ + + + + + + + + + + + + + + + DB::Any - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + alias DB::Any + +

+ + + + + + + +

Alias Definition

+ Bool | Float32 | Float64 | Int32 | Int64 | Slice(UInt8) | String | Time | Nil + + + + + + + + + + + + +

Defined in:

+ + + + db.cr + + +
+ + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/BeginTransaction.html b/api/0.6.0/DB/BeginTransaction.html new file mode 100644 index 0000000..7b084f3 --- /dev/null +++ b/api/0.6.0/DB/BeginTransaction.html @@ -0,0 +1,375 @@ + + + + + + + + + + + + + + + DB::BeginTransaction - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + module DB::BeginTransaction + +

+ + + + + + + + + + + + + + + +

Direct including types

+ + + + + +

Defined in:

+ + + + db/begin_transaction.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ +
+ + + + + + +

Instance Method Detail

+ +
+
+ abstract + def begin_transaction : Transaction + + # +
+ +

Creates a transaction from the current context. +If is expected that either Transaction#commit or Transaction#rollback +are called explicitly to release the context.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def transaction(&block) + + # +
+ +

yields a transaction from the current context. +Query the database through Transaction#connection object. +If an exception is thrown within the block a rollback is performed. +The exception thrown is bubbled unless it is a DB::Rollback. +From the yielded object Transaction#commit or Transaction#rollback +can be called explicitly.

+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/Connection.html b/api/0.6.0/DB/Connection.html new file mode 100644 index 0000000..4bd7648 --- /dev/null +++ b/api/0.6.0/DB/Connection.html @@ -0,0 +1,602 @@ + + + + + + + + + + + + + + + DB::Connection - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + abstract class DB::Connection + +

+ + + + + + + +

Overview

+ +

Database driver implementors must subclass Connection.

+ +

Represents one active connection to a database.

+ +

Users should never instantiate a Connection manually. Use DB#open or Database#connection.

+ +

Refer to QueryMethods for documentation about querying the database through this connection.

+ +

Note to implementors

+ +

The connection must be initialized in #initialize and closed in #do_close.

+ +

Override #build_prepared_statement method in order to return a prepared Statement to allow querying. +Override #build_unprepared_statement method in order to return a unprepared Statement to allow querying. +See also Statement to define how the statements are executed.

+ +

If at any give moment the connection is lost a DB::ConnectionLost should be raised. This will +allow the connection pool to try to reconnect or use another connection if available.

+ + + + + +

Included Modules

+ + + + + + + + + + + +

Defined in:

+ + + + db/connection.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::BeginTransaction

+ + + + begin_transaction : Transaction + begin_transaction, + + + + transaction(&block) + transaction + + + + + + + + + + + + + +

Instance methods inherited from module DB::SessionMethods(DB::Connection, DB::Statement)

+ + + + build(query) : Stmt + build, + + + + build_unprepared_statement(query) : Stmt + build_unprepared_statement, + + + + fetch_or_build_prepared_statement(query) : Stmt + fetch_or_build_prepared_statement, + + + + prepared(query)
prepared
+ prepared
, + + + + prepared_statements? : Bool + prepared_statements?, + + + + unprepared(query)
unprepared
+ unprepared
+ + + + + + + + + + + + + +

Instance methods inherited from module DB::QueryMethods(DB::Statement)

+ + + + exec(query, *args) + exec, + + + + query(query, *args)
query(query, *args, &block)
+ query
, + + + + query_all(query, *args, as type : Class)
query_all(query, *args, as types : NamedTuple)
query_all(query, *args, &block : ResultSet -> U) : Array(U) forall U
query_all(query, *args, as types : Tuple)
+ query_all
, + + + + query_each(query, *args, &block) + query_each, + + + + query_one(query, *args, &block : ResultSet -> U) : U forall U
query_one(query, *args, as types : Tuple)
query_one(query, *args, as types : NamedTuple)
query_one(query, *args, as type : Class)
+ query_one
, + + + + query_one?(query, *args, as type : Class)
query_one?(query, *args, as types : NamedTuple)
query_one?(query, *args, as types : Tuple)
query_one?(query, *args, &block : ResultSet -> U) : U? forall U
+ query_one?
, + + + + scalar(query, *args) + scalar + + + + + + + + + + + + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(context : ConnectionContext) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def begin_transaction : Transaction + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def prepared_statements? : Bool + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def release + + # +
+ +

return this connection to the pool +managed by the database. Should be used +only if the connection was obtained by Database#checkout.

+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/ConnectionContext.html b/api/0.6.0/DB/ConnectionContext.html new file mode 100644 index 0000000..f3c2786 --- /dev/null +++ b/api/0.6.0/DB/ConnectionContext.html @@ -0,0 +1,418 @@ + + + + + + + + + + + + + + + DB::ConnectionContext - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + module DB::ConnectionContext + +

+ + + + + + + + + + + + + + + +

Direct including types

+ + + + + +

Defined in:

+ + + + db/connection_context.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ +
+ + + + + + +

Instance Method Detail

+ +
+
+ abstract + def discard(connection : Connection) + + # +
+ +

Indicates that the connection was permanently closed +and should not be used in the future.

+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def prepared_statements? : Bool + + # +
+ +

Return whether the statements should be prepared by default

+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def release(connection : Connection) + + # +
+ +

Indicates that the connection is no longer needed +and can be reused in the future.

+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def uri : URI + + # +
+ +

Returns the uri with the connection settings to the database

+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/ConnectionLost.html b/api/0.6.0/DB/ConnectionLost.html new file mode 100644 index 0000000..52dfbb5 --- /dev/null +++ b/api/0.6.0/DB/ConnectionLost.html @@ -0,0 +1,407 @@ + + + + + + + + + + + + + + + DB::ConnectionLost - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::ConnectionLost + +

+ + + + + + + +

Overview

+ +

Raised when an established connection is lost +probably due to socket/network issues. +It is used by the connection pool retry logic.

+ + + + + + + + + + + + + + +

Defined in:

+ + + + db/error.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(connection) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def connection : Connection + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/ConnectionRefused.html b/api/0.6.0/DB/ConnectionRefused.html new file mode 100644 index 0000000..c59b9b7 --- /dev/null +++ b/api/0.6.0/DB/ConnectionRefused.html @@ -0,0 +1,349 @@ + + + + + + + + + + + + + + + DB::ConnectionRefused - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::ConnectionRefused + +

+ + + + + + + +

Overview

+ +

Raised when a connection is unable to be established +probably due to socket/network or configuration issues. +It is used by the connection pool retry logic.

+ + + + + + + + + + + + + + +

Defined in:

+ + + + db/error.cr + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/Database.html b/api/0.6.0/DB/Database.html new file mode 100644 index 0000000..c7a8929 --- /dev/null +++ b/api/0.6.0/DB/Database.html @@ -0,0 +1,661 @@ + + + + + + + + + + + + + + + DB::Database - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::Database + +

+ + + + + + + +

Overview

+ +

Acts as an entry point for database access. +Connections are managed by a pool. +Use DB#open to create a Database instance.

+ +

Refer to QueryMethods and SessionMethods for documentation about querying the database.

+ +

Database URI

+ +

Connection parameters are configured in a URI. The format is specified by the individual +database drivers. See the reference book for examples.

+ +

The connection pool can be configured from URI parameters:

+ + + +

When querying a database, prepared statements are used by default. +This can be changed from the prepared_statements URI parameter:

+ + + + + + + +

Included Modules

+ + + + + + + + + + + +

Defined in:

+ + + + db/database.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::ConnectionContext

+ + + + discard(connection : Connection) + discard, + + + + prepared_statements? : Bool + prepared_statements?, + + + + release(connection : Connection) + release, + + + + uri : URI + uri + + + + + + + + + + + + + +

Instance methods inherited from module DB::SessionMethods(DB::Database, DB::PoolStatement)

+ + + + build(query) : Stmt + build, + + + + build_unprepared_statement(query) : Stmt + build_unprepared_statement, + + + + fetch_or_build_prepared_statement(query) : Stmt + fetch_or_build_prepared_statement, + + + + prepared(query)
prepared
+ prepared
, + + + + prepared_statements? : Bool + prepared_statements?, + + + + unprepared(query)
unprepared
+ unprepared
+ + + + + + + + + + + + + +

Instance methods inherited from module DB::QueryMethods(DB::PoolStatement)

+ + + + exec(query, *args) + exec, + + + + query(query, *args)
query(query, *args, &block)
+ query
, + + + + query_all(query, *args, as type : Class)
query_all(query, *args, as types : NamedTuple)
query_all(query, *args, &block : ResultSet -> U) : Array(U) forall U
query_all(query, *args, as types : Tuple)
+ query_all
, + + + + query_each(query, *args, &block) + query_each, + + + + query_one(query, *args, &block : ResultSet -> U) : U forall U
query_one(query, *args, as types : Tuple)
query_one(query, *args, as types : NamedTuple)
query_one(query, *args, as type : Class)
+ query_one
, + + + + query_one?(query, *args, as type : Class)
query_one?(query, *args, as types : NamedTuple)
query_one?(query, *args, as types : Tuple)
query_one?(query, *args, &block : ResultSet -> U) : U? forall U
+ query_one?
, + + + + scalar(query, *args) + scalar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Instance Method Detail

+ +
+
+ + def checkout + + # +
+ +

returns a connection from the pool +the returned connection must be returned +to the pool by explictly calling Connection#release

+ +
+
+ + [View source] + +
+
+ +
+
+ + def close + + # +
+ +

Closes all connection to the database.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def prepared_statements? : Bool + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def setup_connection(&proc : Connection -> Nil) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def transaction(&block) + + # +
+ +

yields a Transaction from a connection of the pool +Refer to BeginTransaction#transaction for documentation.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def uri : URI + + # +
+ +

Returns the uri with the connection settings to the database

+ +
+
+ + [View source] + +
+
+ +
+
+ + def using_connection(&block) + + # +
+ +

yields a connection from the pool +the connection is returned to the pool +when the block ends

+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/Disposable.html b/api/0.6.0/DB/Disposable.html new file mode 100644 index 0000000..11a2d2f --- /dev/null +++ b/api/0.6.0/DB/Disposable.html @@ -0,0 +1,376 @@ + + + + + + + + + + + + + + + DB::Disposable - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + module DB::Disposable + +

+ + + + + +

Overview

+ +

Generic module to encapsulate disposable db resources.

+ + + + + + + + + + + +

Direct including types

+ + + + + +

Defined in:

+ + + + db/disposable.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ +
+ + + + + + +

Instance Method Detail

+ +
+
+ + def close + + # +
+ +

Closes this object.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def closed? + + # +
+ +

Returns true if this object is closed. See #close.

+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/Driver.html b/api/0.6.0/DB/Driver.html new file mode 100644 index 0000000..731630e --- /dev/null +++ b/api/0.6.0/DB/Driver.html @@ -0,0 +1,398 @@ + + + + + + + + + + + + + + + DB::Driver - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + abstract class DB::Driver + +

+ + + + + + + +

Overview

+ +

Database driver implementors must subclass Driver, +register with a driver_name using DB#register_driver and +override the factory method #build_connection.

+ +
require "db"
+
+class FakeDriver < DB::Driver
+  def build_connection(context : DB::ConnectionContext)
+    FakeConnection.new context
+  end
+end
+
+DB.register_driver "fake", FakeDriver
+ +

Access to this fake datbase will be available with

+ +
DB.open "fake://..." do |db|
+  # ... use db ...
+end
+ +

Refer to Connection, Statement and ResultSet for further +driver implementation instructions.

+ + + + + + + + + + + + + + +

Defined in:

+ + + + db/driver.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Instance Method Detail

+ +
+
+ abstract + def build_connection(context : ConnectionContext) : Connection + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def connection_pool_options(params : HTTP::Params) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/DriverSpecs.html b/api/0.6.0/DB/DriverSpecs.html new file mode 100644 index 0000000..68309ba --- /dev/null +++ b/api/0.6.0/DB/DriverSpecs.html @@ -0,0 +1,815 @@ + + + + + + + + + + + + + + + DB::DriverSpecs(DBAnyType) - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::DriverSpecs(DBAnyType) + +

+ + + + + + + +

Overview

+ +

Helper class to ensure behaviour of custom drivers

+ +
require "db/spec"
+
+DB::DriverSpecs(DB::Any).run do
+  # How to connect to database
+  connection_string "scheme://database_url"
+
+  # Clean up database if needed using before/after callbacks
+  before do
+    # ...
+  end
+
+  after do
+    # ...
+  end
+
+  # Sample values that will be stored, retrieved across many specs
+  sample_value "hello", "varchar(25)", "'hello'"
+
+  it "custom spec with a db initialized" do |db|
+    # assert something using *db*
+  end
+
+  # Configure the appropiate syntax for different commands needed to run the specs
+  binding_syntax do |index|
+    "?"
+  end
+
+  create_table_1column_syntax do |table_name, col1|
+    "create table #{table_name} (#{col1.name} #{col1.sql_type} #{col1.null ? "NULL" : "NOT NULL"})"
+  end
+end
+ +

The following methods needs to be called to configure the appropiate syntax +for different commands and allow all the specs to run: #binding_syntax, #create_table_1column_syntax, +#create_table_2columns_syntax, #select_1column_syntax, #select_2columns_syntax, #select_count_syntax, +#select_scalar_syntax, #insert_1column_syntax, #insert_2columns_syntax, #drop_table_if_exists_syntax.

+ + + + + + + + + + + + + + +

Defined in:

+ + + + spec.cr + + +
+ + + + + + + + +

Class Method Summary

+ + + + +

Instance Method Summary

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + +

Class Method Detail

+ +
+
+ + def self.run(description = "as a db", &block) + + # +
+ +
+
+ + [View source] + +
+
+ + + + +

Instance Method Detail

+ +
+
+ + def after(&after : -> Nil) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def before(&before : -> Nil) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def binding_syntax(&binding_syntax : Proc(Int32, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def connection_string(connection_string : String) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def create_table_1column_syntax(&create_table_1column_syntax : Proc(String, ColumnDef, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def create_table_2columns_syntax(&create_table_2columns_syntax : Proc(String, ColumnDef, ColumnDef, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def drop_table_if_exists_syntax(&drop_table_if_exists_syntax : Proc(String, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def encode_null(encode_null : String) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def insert_1column_syntax(&insert_1column_syntax : Proc(String, ColumnDef, String, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def insert_2columns_syntax(&insert_2columns_syntax : Proc(String, ColumnDef, String, ColumnDef, String, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def it(description = "assert", prepared = :default, file = __FILE__, line = __LINE__, end_line = __END_LINE__, &block : DB::Database -> ) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def its + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def sample_value(value, sql_type, value_encoded, *, type_safe_value = true) + + # +
+ +

Use value as sample value that should be stored in columns of type sql_type. +value_encoded is driver specific expression that should generate that value in the database. +type_safe_value indicates whether value_encoded is expected to generate the value even without +been stored in a table (default true).

+ +
+
+ + [View source] + +
+
+ +
+
+ + def select_1column_syntax(&select_1column_syntax : Proc(String, ColumnDef, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def select_2columns_syntax(&select_2columns_syntax : Proc(String, ColumnDef, ColumnDef, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def select_count_syntax(&select_count_syntax : Proc(String, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def select_scalar_syntax(&select_scalar_syntax : Proc(String, String?, String)) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def support_prepared(support_prepared : Bool) + + # +
+ +

Allow specs that uses prepared statements (default true)

+ +
+
+ + [View source] + +
+
+ +
+
+ + def support_unprepared(support_unprepared : Bool) + + # +
+ +

Allow specs that uses unprepared statements (default true)

+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/DriverSpecs/ColumnDef.html b/api/0.6.0/DB/DriverSpecs/ColumnDef.html new file mode 100644 index 0000000..c96172f --- /dev/null +++ b/api/0.6.0/DB/DriverSpecs/ColumnDef.html @@ -0,0 +1,469 @@ + + + + + + + + + + + + + + + DB::DriverSpecs::ColumnDef - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + struct DB::DriverSpecs::ColumnDef + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + spec.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(name : String, sql_type : String, null : Bool) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def clone + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def copy_with(name _name = @name, sql_type _sql_type = @sql_type, null _null = @null) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def name : String + + # +
+ +
+
+ +
+
+ +
+
+ + def null : Bool + + # +
+ +
+
+ +
+
+ +
+
+ + def sql_type : String + + # +
+ +
+
+ +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/Error.html b/api/0.6.0/DB/Error.html new file mode 100644 index 0000000..10063c2 --- /dev/null +++ b/api/0.6.0/DB/Error.html @@ -0,0 +1,350 @@ + + + + + + + + + + + + + + + DB::Error - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::Error + +

+ + + + + + + + + + + + + + + +

Direct Known Subclasses

+ + + + + + + +

Defined in:

+ + + + db/error.cr + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/ExecResult.html b/api/0.6.0/DB/ExecResult.html new file mode 100644 index 0000000..b785453 --- /dev/null +++ b/api/0.6.0/DB/ExecResult.html @@ -0,0 +1,454 @@ + + + + + + + + + + + + + + + DB::ExecResult - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + struct DB::ExecResult + +

+ + + + + + + +

Overview

+ +

Result of a #exec statement.

+ + + + + + + + + + + + + + +

Defined in:

+ + + + db.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(rows_affected : Int64, last_insert_id : Int64) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def clone + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def copy_with(rows_affected _rows_affected = @rows_affected, last_insert_id _last_insert_id = @last_insert_id) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def last_insert_id : Int64 + + # +
+ +
+
+ +
+
+ +
+
+ + def rows_affected : Int64 + + # +
+ +
+
+ +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/Mappable.html b/api/0.6.0/DB/Mappable.html new file mode 100644 index 0000000..dea7965 --- /dev/null +++ b/api/0.6.0/DB/Mappable.html @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + DB::Mappable - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + module DB::Mappable + +

+ + + + + +

Overview

+ +

Empty module used for marking a class as supporting DB:Mapping

+ + + + + + + + + + + + + + +

Defined in:

+ + + + db/mapping.cr + + +
+ + + + + + + + + + + + + + +
+ +
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/MappingException.html b/api/0.6.0/DB/MappingException.html new file mode 100644 index 0000000..ebf0c05 --- /dev/null +++ b/api/0.6.0/DB/MappingException.html @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + DB::MappingException - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::MappingException + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + db/error.cr + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/Pool.html b/api/0.6.0/DB/Pool.html new file mode 100644 index 0000000..cc29796 --- /dev/null +++ b/api/0.6.0/DB/Pool.html @@ -0,0 +1,455 @@ + + + + + + + + + + + + + + + DB::Pool(T) - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::Pool(T) + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + db/pool.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(initial_pool_size = 1, max_pool_size = 0, max_idle_pool_size = 1, checkout_timeout = 5.0, retry_attempts = 1, retry_delay = 0.2, &factory : -> T) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def checkout : T + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def checkout_some(candidates : Enumerable(WeakRef(T))) : ::Tuple(T, Bool) + + # +
+ +
selected, is_candidate = pool.checkout_some(candidates)
+ +

selected be a resource from the candidates list and is_candidate == true +or selected will be a new resource and is_candidate == false

+ +
+
+ + [View source] + +
+
+ +
+
+ + def close : Nil + + # +
+ +

close all resources in the pool

+ +
+
+ + [View source] + +
+
+ +
+
+ + def release(resource : T) : Nil + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/Pool/TimeoutHelper.html b/api/0.6.0/DB/Pool/TimeoutHelper.html new file mode 100644 index 0000000..10bf12b --- /dev/null +++ b/api/0.6.0/DB/Pool/TimeoutHelper.html @@ -0,0 +1,423 @@ + + + + + + + + + + + + + + + DB::Pool::TimeoutHelper - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::Pool::TimeoutHelper + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + db/pool.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(timeout : Float64) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def cancel + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def receive_select_action + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def start + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/PoolPreparedStatement.html b/api/0.6.0/DB/PoolPreparedStatement.html new file mode 100644 index 0000000..5755a37 --- /dev/null +++ b/api/0.6.0/DB/PoolPreparedStatement.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + DB::PoolPreparedStatement - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::PoolPreparedStatement + +

+ + + + + + + +

Overview

+ +

Represents a statement to be executed in any of the connections +of the pool. The statement is not be executed in a prepared fashion. +The execution of the statement is retried according to the pool configuration.

+ +

See PoolStatement

+ + + + + + + + + + + + + + +

Defined in:

+ + + + db/pool_prepared_statement.cr + + +
+ + + + + + +

Constructors

+ + + + + + + + + + +
+ + + +

Instance methods inherited from class DB::PoolStatement

+ + + + exec(args : Array) : ExecResult
exec : ExecResult
exec(*args) : ExecResult
+ exec
, + + + + query(args : Array) : ResultSet
query : ResultSet
query(*args) : ResultSet
+ query
, + + + + scalar(*args) + scalar + + + + + + +

Constructor methods inherited from class DB::PoolStatement

+ + + + new(db : Database, query : String) + new + + + + + + + + + + +

Instance methods inherited from module DB::StatementMethods

+ + + + exec(args : Array) : ExecResult
exec : ExecResult
exec(*args) : ExecResult
+ exec
, + + + + query(*args, &block)
query(args : Array) : ResultSet
query : ResultSet
query(*args) : ResultSet
+ query
, + + + + scalar(*args) + scalar + + + + + + + + + + + + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(db : Database, query : String) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/PoolRetryAttemptsExceeded.html b/api/0.6.0/DB/PoolRetryAttemptsExceeded.html new file mode 100644 index 0000000..f53483c --- /dev/null +++ b/api/0.6.0/DB/PoolRetryAttemptsExceeded.html @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + DB::PoolRetryAttemptsExceeded - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::PoolRetryAttemptsExceeded + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + db/error.cr + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/PoolStatement.html b/api/0.6.0/DB/PoolStatement.html new file mode 100644 index 0000000..5aa1216 --- /dev/null +++ b/api/0.6.0/DB/PoolStatement.html @@ -0,0 +1,611 @@ + + + + + + + + + + + + + + + DB::PoolStatement - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + abstract class DB::PoolStatement + +

+ + + + + + + +

Overview

+ +

When a statement is to be executed in a DB that has a connection pool +a statement from the DB needs to be able to represent a statement in any +of the connections of the pool. Otherwise the user will need to deal with +actual connections in some point.

+ + + + + +

Included Modules

+ + + + + + +

Direct Known Subclasses

+ + + + + + + +

Defined in:

+ + + + db/pool_statement.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::StatementMethods

+ + + + exec(args : Array) : ExecResult
exec : ExecResult
exec(*args) : ExecResult
+ exec
, + + + + query(*args, &block)
query(args : Array) : ResultSet
query : ResultSet
query(*args) : ResultSet
+ query
, + + + + scalar(*args) + scalar + + + + + + + + + + + + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(db : Database, query : String) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def exec(args : Array) : ExecResult + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def exec : ExecResult + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def exec(*args) : ExecResult + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def query(args : Array) : ResultSet + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def query : ResultSet + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def query(*args) : ResultSet + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def scalar(*args) + + # +
+ + + +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/PoolTimeout.html b/api/0.6.0/DB/PoolTimeout.html new file mode 100644 index 0000000..665bee2 --- /dev/null +++ b/api/0.6.0/DB/PoolTimeout.html @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + DB::PoolTimeout - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::PoolTimeout + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + db/error.cr + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/PoolUnpreparedStatement.html b/api/0.6.0/DB/PoolUnpreparedStatement.html new file mode 100644 index 0000000..3e11843 --- /dev/null +++ b/api/0.6.0/DB/PoolUnpreparedStatement.html @@ -0,0 +1,451 @@ + + + + + + + + + + + + + + + DB::PoolUnpreparedStatement - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::PoolUnpreparedStatement + +

+ + + + + + + +

Overview

+ +

Represents a statement to be executed in any of the connections +of the pool. The statement is not be executed in a non prepared fashion. +The execution of the statement is retried according to the pool configuration.

+ +

See PoolStatement

+ + + + + + + + + + + + + + +

Defined in:

+ + + + db/pool_unprepared_statement.cr + + +
+ + + + + + +

Constructors

+ + + + + + + + + + +
+ + + +

Instance methods inherited from class DB::PoolStatement

+ + + + exec(args : Array) : ExecResult
exec : ExecResult
exec(*args) : ExecResult
+ exec
, + + + + query(args : Array) : ResultSet
query : ResultSet
query(*args) : ResultSet
+ query
, + + + + scalar(*args) + scalar + + + + + + +

Constructor methods inherited from class DB::PoolStatement

+ + + + new(db : Database, query : String) + new + + + + + + + + + + +

Instance methods inherited from module DB::StatementMethods

+ + + + exec(args : Array) : ExecResult
exec : ExecResult
exec(*args) : ExecResult
+ exec
, + + + + query(*args, &block)
query(args : Array) : ResultSet
query : ResultSet
query(*args) : ResultSet
+ query
, + + + + scalar(*args) + scalar + + + + + + + + + + + + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(db : Database, query : String) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/QueryMethods.html b/api/0.6.0/DB/QueryMethods.html new file mode 100644 index 0000000..4d32f51 --- /dev/null +++ b/api/0.6.0/DB/QueryMethods.html @@ -0,0 +1,857 @@ + + + + + + + + + + + + + + + DB::QueryMethods(Stmt) - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + module DB::QueryMethods(Stmt) + +

+ + + + + +

Overview

+ +

Methods to allow querying a database. +All methods accepts a query : String and a set arguments.

+ +

Three kind of statements can be performed:

+ +
  1. #exec waits no record response from the database. An ExecResult is returned.
  2. #scalar reads a single value of the response. A union of possible values is returned.
  3. #query returns a ResultSet that allows iteration over the rows in the response and column information.
+ +

Arguments can be passed by position

+ +
db.query("SELECT name FROM ... WHERE age > ?", age)
+ +

Convention of mapping how arguments are mapped to the query depends on each driver.

+ +

Including QueryMethods requires a build(query) : Statement method that is not expected +to be called directly.

+ + + + + + + + + + + +

Direct including types

+ + + + + +

Defined in:

+ + + + db/query_methods.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ +
+ + + + + + +

Instance Method Detail

+ +
+
+ + def exec(query, *args) + + # +
+ +

Performs the #query and returns an ExecResult

+ +
+
+ + [View source] + +
+
+ +
+
+ + def query(query, *args) + + # +
+ +

Executes a query and returns a ResultSet with the results. +The ResultSet must be closed manually.

+ +
result = db.query "select name from contacts where id = ?", 10
+begin
+  if result.move_next
+    id = result.read(Int32)
+  end
+ensure
+  result.close
+end
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query(query, *args, &block) + + # +
+ +

Executes a query and yields a ResultSet with the results. +The ResultSet is closed automatically.

+ +
db.query("select name from contacts where age > ?", 18) do |rs|
+  rs.each do
+    name = rs.read(String)
+  end
+end
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_all(query, *args, as type : Class) + + # +
+ +

Executes a query and returns an array where the +value of each row is read as the given type.

+ +
names = db.query_all "select name from contacts", as: String
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_all(query, *args, as types : NamedTuple) + + # +
+ +

Executes a query and returns an array where each row is +read as a named tuple of the given types (the keys of the named tuple +are not necessarily the column names).

+ +
contacts = db.query_all "select name, age from contacts", as: {name: String, age: Int32}
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_all(query, *args, &block : ResultSet -> U) : Array(U) forall U + + # +
+ +

Executes a query and yield a ResultSet positioned at the beginning +of each row, returning an array of the values of the blocks.

+ +
names = db.query_all "select name from contacts", &.read(String)
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_all(query, *args, as types : Tuple) + + # +
+ +

Executes a query and returns an array where each row is +read as a tuple of the given types.

+ +
contacts = db.query_all "select name, age from contacts", as: {String, Int32}
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_each(query, *args, &block) + + # +
+ +

Executes a query and yields the ResultSet once per each row. +The ResultSet is closed automatically.

+ +
db.query_each "select name from contacts" do |rs|
+  puts rs.read(String)
+end
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_one(query, *args, &block : ResultSet -> U) : U forall U + + # +
+ +

Executes a query that expects a single row and yields a ResultSet +positioned at that first row.

+ +

The given block must not invoke move_next on the yielded result set.

+ +

Raises DB::Error if there were no rows, or if there were more than one row.

+ +
name = db.query_one "select name from contacts where id = ?", 18, &.read(String)
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_one(query, *args, as types : Tuple) + + # +
+ +

Executes a query that expects a single row and returns it +as a tuple of the given types.

+ +

Raises DB::Error if there were no rows, or if there were more than one row.

+ +
db.query_one "select name, age from contacts where id = ?", 1, as: {String, Int32}
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_one(query, *args, as types : NamedTuple) + + # +
+ +

Executes a query that expects a single row and returns it +as a named tuple of the given types (the keys of the named tuple +are not necessarily the column names).

+ +

Raises DB::Error if there were no rows, or if there were more than one row.

+ +
db.query_one "select name, age from contacts where id = ?", 1, as: {name: String, age: Int32}
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_one(query, *args, as type : Class) + + # +
+ +

Executes a query that expects a single row +and returns the first column's value as the given type.

+ +

Raises DB::Error if there were no rows, or if there were more than one row.

+ +
db.query_one "select name from contacts where id = ?", 1, as: String
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_one?(query, *args, as type : Class) + + # +
+ +

Executes a query that expects a single row +and returns the first column's value as the given type.

+ +

Returns nil if there were no rows.

+ +

Raises DB::Error if there were more than one row.

+ +
name = db.query_one? "select name from contacts where id = ?", 1, as: String
+typeof(name) # => String?
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_one?(query, *args, as types : NamedTuple) + + # +
+ +

Executes a query that expects a single row and returns it +as a named tuple of the given types (the keys of the named tuple +are not necessarily the column names).

+ +

Returns nil if there were no rows.

+ +

Raises DB::Error if there were more than one row.

+ +
result = db.query_one? "select name, age from contacts where id = ?", 1, as: {age: String, name: Int32}
+typeof(result) # => NamedTuple(age: String, name: Int32) | Nil
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_one?(query, *args, as types : Tuple) + + # +
+ +

Executes a query that expects a single row and returns it +as a tuple of the given types.

+ +

Returns nil if there were no rows.

+ +

Raises DB::Error if there were more than one row.

+ +
result = db.query_one? "select name, age from contacts where id = ?", 1, as: {String, Int32}
+typeof(result) # => Tuple(String, Int32) | Nil
+ +
+
+ + [View source] + +
+
+ +
+
+ + def query_one?(query, *args, &block : ResultSet -> U) : U? forall U + + # +
+ +

Executes a query that expects at most a single row and yields a ResultSet +positioned at that first row.

+ +

Returns nil, not invoking the block, if there were no rows.

+ +

Raises DB::Error if there were more than one row +(this ends up invoking the block once).

+ +
name = db.query_one? "select name from contacts where id = ?", 18, &.read(String)
+typeof(name) # => String | Nil
+ +
+
+ + [View source] + +
+
+ +
+
+ + def scalar(query, *args) + + # +
+ +

Performs the #query and returns a single scalar value

+ +
puts db.scalar("SELECT MAX(name)").as(String) # => (a String)
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/ResultSet.html b/api/0.6.0/DB/ResultSet.html new file mode 100644 index 0000000..e184c4c --- /dev/null +++ b/api/0.6.0/DB/ResultSet.html @@ -0,0 +1,688 @@ + + + + + + + + + + + + + + + DB::ResultSet - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + abstract class DB::ResultSet + +

+ + + + + + + +

Overview

+ +

The response of a query performed on a Database.

+ +

See DB for a complete sample.

+ +

Each #read call consumes the result and moves to the next column. +Each column must be read in order. +At any moment a #move_next can be invoked, meaning to skip the +remaining, or even all the columns, in the current row. +Also it is not mandatory to consume the whole ResultSet, hence an iteration +through #each or #move_next can be stopped.

+ +

Note: depending on how the ResultSet was obtained it might be mandatory an +explicit call to #close. Check QueryMethods#query.

+ +

Note to implementors

+ +
  1. Override #move_next to move to the next row.
  2. Override #read returning the next value in the row.
  3. (Optional) Override #read(t) for some types t for which custom logic other than a simple cast is needed.
  4. Override #column_count, #column_name.
+ + + + + +

Included Modules

+ + + + + + + + + + + +

Defined in:

+ + + + db/result_set.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(statement : DB::Statement) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ abstract + def column_count : Int32 + + # +
+ +

Returns the number of columns in the result

+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def column_name(index : Int32) : String + + # +
+ +

Returns the name of the column in index 0-based position.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def column_names + + # +
+ +

Returns the name of the columns.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def each(&block) + + # +
+ +

Iterates over all the rows

+ +
+
+ + [View source] + +
+
+ +
+
+ + def each_column(&block) + + # +
+ +

Iterates over all the columns

+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def move_next : Bool + + # +
+ +

Move the next row in the result. +Return false if no more rows are available. +See #each

+ +
+
+ + [View source] + +
+
+ +
+
+ + def read(type : DB::Mappable.class) + + # +
+ +

Reads the next columns and maps them to a class

+ +
+
+ + [View source] + +
+
+ +
+
+ + def read(type : T.class) : T forall T + + # +
+ +

Reads the next column value as a type

+ +
+
+ + [View source] + +
+
+ +
+
+ + def read(**types : Class) + + # +
+ +

Reads the next columns and returns a named tuple of the values.

+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def read + + # +
+ +

Reads the next column value

+ +
+
+ + [View source] + +
+
+ +
+
+ + def read(*types : Class) + + # +
+ +

Reads the next columns and returns a tuple of the values.

+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/Rollback.html b/api/0.6.0/DB/Rollback.html new file mode 100644 index 0000000..663296e --- /dev/null +++ b/api/0.6.0/DB/Rollback.html @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + DB::Rollback - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::Rollback + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + db/error.cr + + +
+ + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + diff --git a/api/0.6.0/DB/SavePointTransaction.html b/api/0.6.0/DB/SavePointTransaction.html new file mode 100644 index 0000000..57bf826 --- /dev/null +++ b/api/0.6.0/DB/SavePointTransaction.html @@ -0,0 +1,568 @@ + + + + + + + + + + + + + + + DB::SavePointTransaction - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::SavePointTransaction + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + db/transaction.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from class DB::Transaction

+ + + + commit + commit, + + + + connection : Connection + connection, + + + + release_from_nested_transaction + release_from_nested_transaction, + + + + rollback + rollback + + + + + + + + + + + + + +

Instance methods inherited from module DB::BeginTransaction

+ + + + begin_transaction : Transaction + begin_transaction, + + + + transaction(&block) + transaction + + + + + + + + + + + + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(parent : Transaction, savepoint_name : String) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def begin_transaction : Transaction + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def commit + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def connection : Connection + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def create_save_point_transaction(parent : Transaction) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def release_from_nested_transaction + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def rollback + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/SessionMethods.html b/api/0.6.0/DB/SessionMethods.html new file mode 100644 index 0000000..d7facd9 --- /dev/null +++ b/api/0.6.0/DB/SessionMethods.html @@ -0,0 +1,576 @@ + + + + + + + + + + + + + + + DB::SessionMethods(Session, Stmt) - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + module DB::SessionMethods(Session, Stmt) + +

+ + + + + +

Overview

+ +

Methods that are shared accross session like objects:

+ + + +

Classes that includes this module are able to execute +queries and statements in both prepared and unprepared fashion.

+ +

This module serves for dsl reuse over session like objects.

+ + + + + +

Included Modules

+ + + + + + + + +

Direct including types

+ + + + + +

Defined in:

+ + + + db/session_methods.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::QueryMethods(Stmt)

+ + + + exec(query, *args) + exec, + + + + query(query, *args)
query(query, *args, &block)
+ query
, + + + + query_all(query, *args, as type : Class)
query_all(query, *args, as types : NamedTuple)
query_all(query, *args, &block : ResultSet -> U) : Array(U) forall U
query_all(query, *args, as types : Tuple)
+ query_all
, + + + + query_each(query, *args, &block) + query_each, + + + + query_one(query, *args, &block : ResultSet -> U) : U forall U
query_one(query, *args, as types : Tuple)
query_one(query, *args, as types : NamedTuple)
query_one(query, *args, as type : Class)
+ query_one
, + + + + query_one?(query, *args, as type : Class)
query_one?(query, *args, as types : NamedTuple)
query_one?(query, *args, as types : Tuple)
query_one?(query, *args, &block : ResultSet -> U) : U? forall U
+ query_one?
, + + + + scalar(query, *args) + scalar + + + + + + + + + + + +
+ + + + + + +

Instance Method Detail

+ +
+
+ + def build(query) : Stmt + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def build_unprepared_statement(query) : Stmt + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def fetch_or_build_prepared_statement(query) : Stmt + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def prepared(query) + + # +
+ +

Returns a prepared Statement that has not been executed yet.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def prepared + + # +
+ +

dsl helper to build prepared statements +returns a value that includes QueryMethods

+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def prepared_statements? : Bool + + # +
+ +

Returns whether by default the statements should +be prepared or not.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def unprepared(query) + + # +
+ +

Returns an unprepared Statement that has not been executed yet.

+ +
+
+ + [View source] + +
+
+ +
+
+ + def unprepared + + # +
+ +

dsl helper to build unprepared statements +returns a value that includes QueryMethods

+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/SessionMethods/PreparedQuery.html b/api/0.6.0/DB/SessionMethods/PreparedQuery.html new file mode 100644 index 0000000..9951d2a --- /dev/null +++ b/api/0.6.0/DB/SessionMethods/PreparedQuery.html @@ -0,0 +1,447 @@ + + + + + + + + + + + + + + + DB::SessionMethods::PreparedQuery(Session, Stmt) - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + struct DB::SessionMethods::PreparedQuery(Session, Stmt) + +

+ + + + + + + + + + + +

Included Modules

+ + + + + + + + + + + +

Defined in:

+ + + + db/session_methods.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::QueryMethods(Stmt)

+ + + + exec(query, *args) + exec, + + + + query(query, *args)
query(query, *args, &block)
+ query
, + + + + query_all(query, *args, as type : Class)
query_all(query, *args, as types : NamedTuple)
query_all(query, *args, &block : ResultSet -> U) : Array(U) forall U
query_all(query, *args, as types : Tuple)
+ query_all
, + + + + query_each(query, *args, &block) + query_each, + + + + query_one(query, *args, &block : ResultSet -> U) : U forall U
query_one(query, *args, as types : Tuple)
query_one(query, *args, as types : NamedTuple)
query_one(query, *args, as type : Class)
+ query_one
, + + + + query_one?(query, *args, as type : Class)
query_one?(query, *args, as types : NamedTuple)
query_one?(query, *args, as types : Tuple)
query_one?(query, *args, &block : ResultSet -> U) : U? forall U
+ query_one?
, + + + + scalar(query, *args) + scalar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(session : Session) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def build(query) : Stmt + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/SessionMethods/UnpreparedQuery.html b/api/0.6.0/DB/SessionMethods/UnpreparedQuery.html new file mode 100644 index 0000000..ce5e73d --- /dev/null +++ b/api/0.6.0/DB/SessionMethods/UnpreparedQuery.html @@ -0,0 +1,447 @@ + + + + + + + + + + + + + + + DB::SessionMethods::UnpreparedQuery(Session, Stmt) - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + struct DB::SessionMethods::UnpreparedQuery(Session, Stmt) + +

+ + + + + + + + + + + +

Included Modules

+ + + + + + + + + + + +

Defined in:

+ + + + db/session_methods.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::QueryMethods(Stmt)

+ + + + exec(query, *args) + exec, + + + + query(query, *args)
query(query, *args, &block)
+ query
, + + + + query_all(query, *args, as type : Class)
query_all(query, *args, as types : NamedTuple)
query_all(query, *args, &block : ResultSet -> U) : Array(U) forall U
query_all(query, *args, as types : Tuple)
+ query_all
, + + + + query_each(query, *args, &block) + query_each, + + + + query_one(query, *args, &block : ResultSet -> U) : U forall U
query_one(query, *args, as types : Tuple)
query_one(query, *args, as types : NamedTuple)
query_one(query, *args, as type : Class)
+ query_one
, + + + + query_one?(query, *args, as type : Class)
query_one?(query, *args, as types : NamedTuple)
query_one?(query, *args, as types : Tuple)
query_one?(query, *args, &block : ResultSet -> U) : U? forall U
+ query_one?
, + + + + scalar(query, *args) + scalar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(session : Session) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def build(query) : Stmt + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/Statement.html b/api/0.6.0/DB/Statement.html new file mode 100644 index 0000000..19ba5eb --- /dev/null +++ b/api/0.6.0/DB/Statement.html @@ -0,0 +1,600 @@ + + + + + + + + + + + + + + + DB::Statement - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + abstract class DB::Statement + +

+ + + + + + + +

Overview

+ +

Represents a query in a Connection. +It should be created by QueryMethods.

+ +

Note to implementors

+ +
  1. Subclass Statements
  2. Statements are created from a custom driver Connection#prepare method.
  3. #perform_query executes a query that is expected to return a ResultSet
  4. #perform_exec executes a query that is expected to return an ExecResult
  5. #do_close is called to release the statement resources.
+ + + + + +

Included Modules

+ + + + + + + + + + + +

Defined in:

+ + + + db/statement.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::StatementMethods

+ + + + exec(args : Array) : ExecResult
exec : ExecResult
exec(*args) : ExecResult
+ exec
, + + + + query(*args, &block)
query(args : Array) : ResultSet
query : ResultSet
query(*args) : ResultSet
+ query
, + + + + scalar(*args) + scalar + + + + + + + + + + + + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(connection : Connection) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def exec(args : Array) : DB::ExecResult + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def exec : DB::ExecResult + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def exec(*args) + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def query(args : Array) : DB::ResultSet + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def query : DB::ResultSet + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def query(*args) + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def release_connection + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/StatementMethods.html b/api/0.6.0/DB/StatementMethods.html new file mode 100644 index 0000000..2e7e487 --- /dev/null +++ b/api/0.6.0/DB/StatementMethods.html @@ -0,0 +1,554 @@ + + + + + + + + + + + + + + + DB::StatementMethods - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + module DB::StatementMethods + +

+ + + + + +

Overview

+ +

Common interface for connection based statements +and for connection pool statements.

+ + + + + +

Included Modules

+ + + + + + + + +

Direct including types

+ + + + + +

Defined in:

+ + + + db/statement.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + +
+ + + + + + +

Instance Method Detail

+ +
+
+ abstract + def exec(args : Array) : ExecResult + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ abstract + def exec : ExecResult + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ abstract + def exec(*args) : ExecResult + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def query(*args, &block) + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ abstract + def query(args : Array) : ResultSet + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ abstract + def query : ResultSet + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ abstract + def query(*args) : ResultSet + + # +
+ + + +
+
+ + [View source] + +
+
+ +
+
+ + def scalar(*args) + + # +
+ + + +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/StringKeyCache.html b/api/0.6.0/DB/StringKeyCache.html new file mode 100644 index 0000000..14993c7 --- /dev/null +++ b/api/0.6.0/DB/StringKeyCache.html @@ -0,0 +1,394 @@ + + + + + + + + + + + + + + + DB::StringKeyCache(T) - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::StringKeyCache(T) + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + db/string_key_cache.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Instance Method Detail

+ +
+
+ + def clear + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def each_value(&block) + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def fetch(key : String, &block) : T + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/TopLevelTransaction.html b/api/0.6.0/DB/TopLevelTransaction.html new file mode 100644 index 0000000..aea0c9b --- /dev/null +++ b/api/0.6.0/DB/TopLevelTransaction.html @@ -0,0 +1,526 @@ + + + + + + + + + + + + + + + DB::TopLevelTransaction - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + class DB::TopLevelTransaction + +

+ + + + + + + + + + + + + + + + + + + + +

Defined in:

+ + + + db/transaction.cr + + +
+ + + + + + +

Constructors

+ + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from class DB::Transaction

+ + + + commit + commit, + + + + connection : Connection + connection, + + + + release_from_nested_transaction + release_from_nested_transaction, + + + + rollback + rollback + + + + + + + + + + + + + +

Instance methods inherited from module DB::BeginTransaction

+ + + + begin_transaction : Transaction + begin_transaction, + + + + transaction(&block) + transaction + + + + + + + + + + + + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +

Constructor Detail

+ +
+
+ + def self.new(connection : Connection) + + # +
+ +
+
+ + [View source] + +
+
+ + + + + + +

Instance Method Detail

+ +
+
+ + def begin_transaction : Transaction + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def commit + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def connection : Connection + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def rollback + + # +
+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/DB/Transaction.html b/api/0.6.0/DB/Transaction.html new file mode 100644 index 0000000..61a702e --- /dev/null +++ b/api/0.6.0/DB/Transaction.html @@ -0,0 +1,503 @@ + + + + + + + + + + + + + + + DB::Transaction - github.com/crystal-lang/crystal-db + + + + + + +
+

+ + abstract class DB::Transaction + +

+ + + + + + + +

Overview

+ +

Transactions should be started from DB#transaction, Connection#transaction +or Connection#begin_transaction.

+ +

Use Transaction#connection to submit statements to the database.

+ +

Use Transaction#commit or Transaction#rollback to close the ongoing transaction +explicitly. Or refer to BeginTransaction#transaction for documentation on how to +use #transaction(&block) methods in DB and Connection.

+ +

Nested transactions are supported by using sql SAVEPOINT. To start a nested +transaction use Transaction#transaction or Transaction#begin_transaction.

+ + + + + +

Included Modules

+ + + + + + +

Direct Known Subclasses

+ + + + + + + +

Defined in:

+ + + + db/transaction.cr + + +
+ + + + + + + + + + +

Instance Method Summary

+ + + + + + +
+ + + +

Instance methods inherited from module DB::BeginTransaction

+ + + + begin_transaction : Transaction + begin_transaction, + + + + transaction(&block) + transaction + + + + + + + + + + + + + +

Instance methods inherited from module DB::Disposable

+ + + + close + close, + + + + closed? + closed? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +

Instance Method Detail

+ +
+
+ + def commit + + # +
+ +

commits the current transaction

+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def connection : Connection + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ abstract + def release_from_nested_transaction + + # +
+ +
+
+ + [View source] + +
+
+ +
+
+ + def rollback + + # +
+ +

rollbacks the current transaction

+ +
+
+ + [View source] + +
+
+ + + + + +
+ + + diff --git a/api/0.6.0/css/style.css b/api/0.6.0/css/style.css new file mode 100644 index 0000000..7295c3f --- /dev/null +++ b/api/0.6.0/css/style.css @@ -0,0 +1,629 @@ +html, body { + background: #FFFFFF; + position: relative; + margin: 0; + padding: 0; + width: 100%; + height: 100%; + overflow: hidden; +} + +body { + font-family: "Avenir", "Tahoma", "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; + color: #333; + line-height: 1.5; +} + +a { + color: #263F6C; +} + +a:visited { + color: #112750; +} + +h1, h2, h3, h4, h5, h6 { + margin: 35px 0 25px; + color: #444444; +} + +h1.type-name { + color: #47266E; + margin: 20px 0 30px; + background-color: #F8F8F8; + padding: 10px 12px; + border: 1px solid #EBEBEB; + border-radius: 2px; +} + +h2 { + border-bottom: 1px solid #E6E6E6; + padding-bottom: 5px; +} + +body { + display: flex; +} + +.sidebar, .main-content { + overflow: auto; +} + +.sidebar { + width: 30em; + color: #F8F4FD; + background-color: #2E1052; + padding: 0 0 30px; + box-shadow: inset -3px 0 4px rgba(0,0,0,.35); + line-height: 1.2; +} + +.sidebar .search-box { + padding: 8px 9px; +} + +.sidebar input { + display: block; + box-sizing: border-box; + margin: 0; + padding: 5px; + font: inherit; + font-family: inherit; + line-height: 1.2; + width: 100%; + border: 0; + outline: 0; + border-radius: 2px; + box-shadow: 0px 3px 5px rgba(0,0,0,.25); + transition: box-shadow .12s; +} + +.sidebar input:focus { + box-shadow: 0px 5px 6px rgba(0,0,0,.5); +} + +.sidebar input::-webkit-input-placeholder { /* Chrome/Opera/Safari */ + color: #C8C8C8; + font-size: 14px; + text-indent: 2px; +} + +.sidebar input::-moz-placeholder { /* Firefox 19+ */ + color: #C8C8C8; + font-size: 14px; + text-indent: 2px; +} + +.sidebar input:-ms-input-placeholder { /* IE 10+ */ + color: #C8C8C8; + font-size: 14px; + text-indent: 2px; +} + +.sidebar input:-moz-placeholder { /* Firefox 18- */ + color: #C8C8C8; + font-size: 14px; + text-indent: 2px; +} + +.sidebar ul { + margin: 0; + padding: 0; + list-style: none outside; +} + +.sidebar li { + display: block; + position: relative; +} + +.types-list li.hide { + display: none; +} + +.sidebar a { + text-decoration: none; + color: inherit; + transition: color .14s; +} +.types-list a { + display: block; + padding: 5px 15px 5px 30px; +} + +.types-list { + display: block; +} + +.sidebar a:focus { + outline: 1px solid #D1B7F1; +} + +.types-list a { + padding: 5px 15px 5px 30px; +} + +.sidebar .current > a, +.sidebar a:hover { + color: #866BA6; +} + +.repository-links { + padding: 5px 15px 5px 30px; +} + +.types-list li ul { + overflow: hidden; + height: 0; + max-height: 0; + transition: 1s ease-in-out; +} + +.types-list li.parent { + padding-left: 30px; +} + +.types-list li.parent::before { + box-sizing: border-box; + content: "â–¼"; + display: block; + width: 30px; + height: 30px; + position: absolute; + top: 0; + left: 0; + text-align: center; + color: white; + font-size: 8px; + line-height: 30px; + transform: rotateZ(-90deg); + cursor: pointer; + transition: .2s linear; +} + + +.types-list li.parent > a { + padding-left: 0; +} + +.types-list li.parent.open::before { + transform: rotateZ(0); +} + +.types-list li.open > ul { + height: auto; + max-height: 1000em; +} + +.main-content { + padding: 0 30px 30px 30px; + width: 100%; +} + +.kind { + font-size: 60%; + color: #866BA6; +} + +.superclass-hierarchy { + margin: -15px 0 30px 0; + padding: 0; + list-style: none outside; + font-size: 80%; +} + +.superclass-hierarchy .superclass { + display: inline-block; + margin: 0 7px 0 0; + padding: 0; +} + +.superclass-hierarchy .superclass + .superclass::before { + content: "<"; + margin-right: 7px; +} + +.other-types-list li { + display: inline-block; +} + +.other-types-list, +.list-summary { + margin: 0 0 30px 0; + padding: 0; + list-style: none outside; +} + +.entry-const { + font-family: Menlo, Monaco, Consolas, 'Courier New', Courier, monospace; +} + +.entry-const code { + white-space: pre-wrap; +} + +.entry-summary { + padding-bottom: 4px; +} + +.superclass-hierarchy .superclass a, +.other-type a, +.entry-summary .signature { + padding: 4px 8px; + margin-bottom: 4px; + display: inline-block; + background-color: #f8f8f8; + color: #47266E; + border: 1px solid #f0f0f0; + text-decoration: none; + border-radius: 3px; + font-family: Menlo, Monaco, Consolas, 'Courier New', Courier, monospace; + transition: background .15s, border-color .15s; +} + +.superclass-hierarchy .superclass a:hover, +.other-type a:hover, +.entry-summary .signature:hover { + background: #D5CAE3; + border-color: #624288; +} + +.entry-summary .summary { + padding-left: 32px; +} + +.entry-summary .summary p { + margin: 12px 0 16px; +} + +.entry-summary a { + text-decoration: none; +} + +.entry-detail { + padding: 30px 0; +} + +.entry-detail .signature { + position: relative; + padding: 5px 15px; + margin-bottom: 10px; + display: block; + border-radius: 5px; + background-color: #f8f8f8; + color: #47266E; + border: 1px solid #f0f0f0; + font-family: Menlo, Monaco, Consolas, 'Courier New', Courier, monospace; + transition: .2s ease-in-out; +} + +.entry-detail:target .signature { + background-color: #D5CAE3; + border: 1px solid #624288; +} + +.entry-detail .signature .method-permalink { + position: absolute; + top: 0; + left: -35px; + padding: 5px 15px; + text-decoration: none; + font-weight: bold; + color: #624288; + opacity: .4; + transition: opacity .2s; +} + +.entry-detail .signature .method-permalink:hover { + opacity: 1; +} + +.entry-detail:target .signature .method-permalink { + opacity: 1; +} + +.methods-inherited { + padding-right: 10%; + line-height: 1.5em; +} + +.methods-inherited h3 { + margin-bottom: 4px; +} + +.methods-inherited a { + display: inline-block; + text-decoration: none; + color: #47266E; +} + +.methods-inherited a:hover { + text-decoration: underline; + color: #6C518B; +} + +.methods-inherited .tooltip>span { + background: #D5CAE3; + padding: 4px 8px; + border-radius: 3px; + margin: -4px -8px; +} + +.methods-inherited .tooltip * { + color: #47266E; +} + +pre { + padding: 10px 20px; + margin-top: 4px; + border-radius: 3px; + line-height: 1.45; + overflow: auto; + color: #333; + background: #fdfdfd; + font-size: 14px; + border: 1px solid #eee; +} + +code { + font-family: Menlo, Monaco, Consolas, 'Courier New', Courier, monospace; +} + +:not(pre) > code { + background-color: rgba(40,35,30,0.05); + padding: 0.2em 0.4em; + font-size: 85%; + border-radius: 3px; +} + +span.flag { + padding: 2px 4px 1px; + border-radius: 3px; + margin-right: 3px; + font-size: 11px; + border: 1px solid transparent; +} + +span.flag.orange { + background-color: #EE8737; + color: #FCEBDD; + border-color: #EB7317; +} + +span.flag.yellow { + background-color: #E4B91C; + color: #FCF8E8; + border-color: #B69115; +} + +span.flag.green { + background-color: #469C14; + color: #E2F9D3; + border-color: #34700E; +} + +span.flag.red { + background-color: #BF1919; + color: #F9ECEC; + border-color: #822C2C; +} + +span.flag.purple { + background-color: #2E1052; + color: #ECE1F9; + border-color: #1F0B37; +} + +.tooltip>span { + position: absolute; + opacity: 0; + display: none; + pointer-events: none; +} + +.tooltip:hover>span { + display: inline-block; + opacity: 1; +} + +.c { + color: #969896; +} + +.n { + color: #0086b3; +} + +.t { + color: #0086b3; +} + +.s { + color: #183691; +} + +.i { + color: #7f5030; +} + +.k { + color: #a71d5d; +} + +.o { + color: #a71d5d; +} + +.m { + color: #795da3; +} + +.hidden { + display: none; +} +.search-results { + font-size: 90%; + line-height: 1.3; +} + +.search-results mark { + color: inherit; + background: transparent; + font-weight: bold; +} +.search-result { + padding: 5px 8px 5px 5px; + cursor: pointer; + border-left: 5px solid transparent; + transform: translateX(-3px); + transition: all .2s, background-color 0s, border .02s; + min-height: 3.2em; +} +.search-result.current { + border-left-color: #ddd; + background-color: rgba(200,200,200,0.4); + transform: translateX(0); + transition: all .2s, background-color .5s, border 0s; +} +.search-result.current:hover, +.search-result.current:focus { + border-left-color: #866BA6; +} +.search-result:not(.current):nth-child(2n) { + background-color: rgba(255,255,255,.06); +} +.search-result__title { + font-size: 105%; + word-break: break-all; + line-height: 1.1; + padding: 3px 0; +} +.search-result__title strong { + font-weight: normal; +} +.search-results .search-result__title > a { + padding: 0; + display: block; +} +.search-result__title > a > .args { + color: #dddddd; + font-weight: 300; + transition: inherit; + font-size: 88%; + line-height: 1.2; + letter-spacing: -.02em; +} +.search-result__title > a > .args * { + color: inherit; +} + +.search-result a, +.search-result a:hover { + color: inherit; +} +.search-result:not(.current):hover .search-result__title > a, +.search-result:not(.current):focus .search-result__title > a, +.search-result__title > a:focus { + color: #866BA6; +} +.search-result:not(.current):hover .args, +.search-result:not(.current):focus .args { + color: #6a5a7d; +} + +.search-result__type { + color: #e8e8e8; + font-weight: 300; +} +.search-result__doc { + color: #bbbbbb; + font-size: 90%; +} +.search-result__doc p { + margin: 0; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + line-height: 1.2em; + max-height: 2.4em; +} + +.js-modal-visible .modal-background { + display: flex; +} +.main-content { + position: relative; +} +.modal-background { + position: absolute; + display: none; + height: 100%; + width: 100%; + background: rgba(120,120,120,.4); + z-index: 100; + align-items: center; + justify-content: center; +} +.usage-modal { + max-width: 90%; + background: #fff; + border: 2px solid #ccc; + border-radius: 9px; + padding: 5px 15px 20px; + min-width: 50%; + color: #555; + position: relative; + transform: scale(.5); + transition: transform 200ms; +} +.js-modal-visible .usage-modal { + transform: scale(1); +} +.usage-modal > .close-button { + position: absolute; + right: 15px; + top: 8px; + color: #aaa; + font-size: 27px; + cursor: pointer; +} +.usage-modal > .close-button:hover { + text-shadow: 2px 2px 2px #ccc; + color: #999; +} +.modal-title { + margin: 0; + text-align: center; + font-weight: normal; + color: #666; + border-bottom: 2px solid #ddd; + padding: 10px; +} +.usage-list { + padding: 0; + margin: 13px; +} +.usage-list > li { + padding: 5px 2px; + overflow: auto; + padding-left: 100px; + min-width: 12em; +} +.usage-modal kbd { + background: #eee; + border: 1px solid #ccc; + border-bottom-width: 2px; + border-radius: 3px; + padding: 3px 8px; + font-family: monospace; + margin-right: 2px; + display: inline-block; +} +.usage-key { + float: left; + clear: left; + margin-left: -100px; + margin-right: 12px; +} diff --git a/api/0.6.0/index.html b/api/0.6.0/index.html new file mode 100644 index 0000000..f17ccae --- /dev/null +++ b/api/0.6.0/index.html @@ -0,0 +1,320 @@ + + + + + + + + + + + + + + + README - github.com/crystal-lang/crystal-db + + + + + + +
+

Build Status

+ +

crystal-db

+ +

Common db api for crystal. You will need to have a specific driver to access a database.

+ + + +

Installation

+ +

If you are creating a shard that will work with any driver, then add crystal-db as a dependency in shard.yml:

+ +
dependencies:
+  db:
+    github: crystal-lang/crystal-db
+ +

If you are creating an application that will work with some specific driver(s), then add them in shard.yml:

+ +
dependencies:
+  sqlite3:
+    github: crystal-lang/crystal-sqlite3
+ +

crystal-db itself will be a nested dependency if drivers are included.

+ +

Note: Multiple drivers can be included in the same application.

+ +

Documentation

+ + + +

Usage

+ +

This shard only provides an abstract database API. In order to use it, a specific driver for the intended database has to be required as well:

+ +

The following example uses SQLite where ? indicates the arguments. If PostgreSQL is used $1, $2, etc. should be used. crystal-db does not interpret the statements.

+ +
require "db"
+require "sqlite3"
+
+DB.open "sqlite3:./file.db" do |db|
+  # When using the pg driver, use $1, $2, etc. instead of ?
+  db.exec "create table contacts (name text, age integer)"
+  db.exec "insert into contacts values (?, ?)", "John Doe", 30
+
+  args = [] of DB::Any
+  args << "Sarah"
+  args << 33
+  db.exec "insert into contacts values (?, ?)", args
+
+  puts "max age:"
+  puts db.scalar "select max(age) from contacts" # => 33
+
+  puts "contacts:"
+  db.query "select name, age from contacts order by age desc" do |rs|
+    puts "#{rs.column_name(0)} (#{rs.column_name(1)})"
+    # => name (age)
+    rs.each do
+      puts "#{rs.read(String)} (#{rs.read(Int32)})"
+      # => Sarah (33)
+      # => John Doe (30)
+    end
+  end
+end
+ +

Roadmap

+ +

Issues not yet addressed:

+ + + +

Contributing

+ +
  1. Fork it ( https://github.com/crystal-lang/crystal-db/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request
+ +

Contributors

+ + +
+ + diff --git a/api/0.6.0/index.json b/api/0.6.0/index.json new file mode 100644 index 0000000..875fabf --- /dev/null +++ b/api/0.6.0/index.json @@ -0,0 +1 @@ +{"repository_name":"github.com/crystal-lang/crystal-db","body":"[![Build Status](https://travis-ci.org/crystal-lang/crystal-db.svg?branch=master)](https://travis-ci.org/crystal-lang/crystal-db)\n\n# crystal-db\n\nCommon db api for crystal. You will need to have a specific driver to access a database.\n\n* [SQLite](https://github.com/crystal-lang/crystal-sqlite3)\n* [MySQL](https://github.com/crystal-lang/crystal-mysql)\n* [PostgreSQL](https://github.com/will/crystal-pg)\n* [Cassandra](https://github.com/kaukas/crystal-cassandra)\n\n## Installation\n\nIf you are creating a shard that will work with _any_ driver, then add `crystal-db` as a dependency in `shard.yml`:\n\n```yaml\ndependencies:\n db:\n github: crystal-lang/crystal-db\n```\n\nIf you are creating an application that will work with _some specific_ driver(s), then add them in `shard.yml`:\n\n```yaml\ndependencies:\n sqlite3:\n github: crystal-lang/crystal-sqlite3\n```\n\n`crystal-db` itself will be a nested dependency if drivers are included.\n\nNote: Multiple drivers can be included in the same application.\n\n## Documentation\n\n* [Latest API](http://crystal-lang.github.io/crystal-db/api/latest/)\n* [Crystal book](https://crystal-lang.org/docs/database/)\n\n## Usage\n\nThis shard only provides an abstract database API. In order to use it, a specific driver for the intended database has to be required as well:\n\nThe following example uses SQLite where `?` indicates the arguments. If PostgreSQL is used `$1`, `$2`, etc. should be used. `crystal-db` does not interpret the statements.\n\n```crystal\nrequire \"db\"\nrequire \"sqlite3\"\n\nDB.open \"sqlite3:./file.db\" do |db|\n # When using the pg driver, use $1, $2, etc. instead of ?\n db.exec \"create table contacts (name text, age integer)\"\n db.exec \"insert into contacts values (?, ?)\", \"John Doe\", 30\n\n args = [] of DB::Any\n args << \"Sarah\"\n args << 33\n db.exec \"insert into contacts values (?, ?)\", args\n\n puts \"max age:\"\n puts db.scalar \"select max(age) from contacts\" # => 33\n\n puts \"contacts:\"\n db.query \"select name, age from contacts order by age desc\" do |rs|\n puts \"#{rs.column_name(0)} (#{rs.column_name(1)})\"\n # => name (age)\n rs.each do\n puts \"#{rs.read(String)} (#{rs.read(Int32)})\"\n # => Sarah (33)\n # => John Doe (30)\n end\n end\nend\n```\n\n## Roadmap\n\nIssues not yet addressed:\n\n- [x] Support non prepared statements. [#25](https://github.com/crystal-lang/crystal-db/pull/25)\n- [x] Time data type. (implementation details depends on actual drivers)\n- [x] Data type extensibility. Allow each driver to extend the data types allowed.\n- [x] Transactions & nested transactions. [#27](https://github.com/crystal-lang/crystal-db/pull/27)\n- [x] Connection pool.\n- [ ] Logging\n- [ ] Direct access to `IO` to avoid memory allocation for blobs.\n\n## Contributing\n\n1. Fork it ( https://github.com/crystal-lang/crystal-db/fork )\n2. Create your feature branch (git checkout -b my-new-feature)\n3. Commit your changes (git commit -am 'Add some feature')\n4. Push to the branch (git push origin my-new-feature)\n5. Create a new Pull Request\n\n## Contributors\n\n- [bcardiff](https://github.com/bcardiff) Brian J. Cardiff - creator, maintainer\n","program":{"html_id":"github.com/crystal-lang/crystal-db/toplevel","path":"toplevel.html","kind":"module","full_name":"Top Level Namespace","name":"Top Level Namespace","abstract":false,"superclass":null,"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Spec/Methods","kind":"module","full_name":"Spec::Methods","name":"Methods"},{"html_id":"github.com/crystal-lang/crystal-db/Spec/Expectations","kind":"module","full_name":"Spec::Expectations","name":"Expectations"}],"locations":[],"repository_name":"github.com/crystal-lang/crystal-db","program":true,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/Spec/Expectations","kind":"module","full_name":"Spec::Expectations","name":"Expectations"},{"html_id":"github.com/crystal-lang/crystal-db/Spec/Methods","kind":"module","full_name":"Spec::Methods","name":"Methods"}],"extended_modules":[{"html_id":"github.com/crystal-lang/crystal-db/Spec/Expectations","kind":"module","full_name":"Spec::Expectations","name":"Expectations"},{"html_id":"github.com/crystal-lang/crystal-db/Spec/Methods","kind":"module","full_name":"Spec::Methods","name":"Methods"}],"subclasses":[],"including_types":[],"namespace":null,"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB","path":"DB.html","kind":"module","full_name":"DB","name":"DB","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db.cr","line_number":77,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr"},{"filename":"db/pool.cr","line_number":3,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr"},{"filename":"db/string_key_cache.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr"},{"filename":"db/query_methods.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr"},{"filename":"db/session_methods.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr"},{"filename":"db/disposable.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/disposable.cr"},{"filename":"db/driver.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/driver.cr"},{"filename":"db/statement.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr"},{"filename":"db/begin_transaction.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/begin_transaction.cr"},{"filename":"db/connection_context.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr"},{"filename":"db/connection.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr"},{"filename":"db/transaction.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr"},{"filename":"db/pool_statement.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr"},{"filename":"db/database.cr","line_number":4,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr"},{"filename":"db/pool_prepared_statement.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_prepared_statement.cr"},{"filename":"db/pool_unprepared_statement.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_unprepared_statement.cr"},{"filename":"db/result_set.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr"},{"filename":"db/error.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"},{"filename":"db/mapping.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/mapping.cr"},{"filename":"spec.cr","line_number":9,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr"},{"filename":"db/version.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/version.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"TYPES","name":"TYPES","value":"[Nil, String, Bool, Int32, Int64, Float32, Float64, Time, Bytes]","doc":"Types supported to interface with database driver.\nThese can be used in any `ResultSet#read` or any `Database#query` related\nmethod to be used as query parameters","summary":"

Types supported to interface with database driver.

"},{"id":"VERSION","name":"VERSION","value":"\"0.6.0\"","doc":null,"summary":null}],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":null,"doc":"The DB module is a unified interface for database access.\nIndividual database systems are supported by specific database driver shards.\n\nAvailable drivers include:\n* [crystal-lang/crystal-sqlite3](https://github.com/crystal-lang/crystal-sqlite3) for SQLite\n* [crystal-lang/crystal-mysql](https://github.com/crystal-lang/crystal-mysql) for MySQL and MariaDB\n* [will/crystal-pg](https://github.com/will/crystal-pg) for PostgreSQL\n* [kaukas/crystal-cassandra](https://github.com/kaukas/crystal-cassandra) for Cassandra\n\nFor basic instructions on implementing a new database driver, check `Driver` and the existing drivers.\n\nDB manages a connection pool. The connection pool can be configured by query parameters to the\nconnection `URI` as described in `Database`.\n\n### Usage\n\nAssuming `crystal-sqlite3` is included a SQLite3 database can be opened with `#open`.\n\n```\ndb = DB.open \"sqlite3:./path/to/db/file.db\"\ndb.close\n```\n\nIf a block is given to `#open` the database is closed automatically\n\n```\nDB.open \"sqlite3:./file.db\" do |db|\n # work with db\nend # db is closed\n```\n\nIn the code above `db` is a `Database`. Methods available for querying it are described in `QueryMethods`.\n\nThree kind of statements can be performed:\n1. `Database#exec` waits no response from the database.\n2. `Database#scalar` reads a single value of the response.\n3. `Database#query` returns a ResultSet that allows iteration over the rows in the response and column information.\n\nAll of the above methods allows parametrised query. Either positional or named arguments.\n\nCheck a full working version:\n\nThe following example uses SQLite where `?` indicates the arguments. If PostgreSQL is used `$1`, `$2`, etc. should be used. `crystal-db` does not interpret the statements.\n\n```\nrequire \"db\"\nrequire \"sqlite3\"\n\nDB.open \"sqlite3:./file.db\" do |db|\n # When using the pg driver, use $1, $2, etc. instead of ?\n db.exec \"create table contacts (name text, age integer)\"\n db.exec \"insert into contacts values (?, ?)\", \"John Doe\", 30\n\n args = [] of DB::Any\n args << \"Sarah\"\n args << 33\n db.exec \"insert into contacts values (?, ?)\", args\n\n puts \"max age:\"\n puts db.scalar \"select max(age) from contacts\" # => 33\n\n puts \"contacts:\"\n db.query \"select name, age from contacts order by age desc\" do |rs|\n puts \"#{rs.column_name(0)} (#{rs.column_name(1)})\"\n # => name (age)\n rs.each do\n puts \"#{rs.read(String)} (#{rs.read(Int32)})\"\n # => Sarah (33)\n # => John Doe (30)\n end\n end\nend\n```\n","summary":"

The DB module is a unified interface for database access.

","class_methods":[{"id":"connect(uri:URI|String)-class-method","html_id":"connect(uri:URI|String)-class-method","name":"connect","doc":"Opens a connection using the specified *uri*.\nThe scheme of the *uri* determines the driver to use.\nReturned connection must be closed by `Connection#close`.\nIf a block is used the connection is yielded and closed automatically.","summary":"

Opens a connection using the specified uri.

","abstract":false,"args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"args_string":"(uri : URI | String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L133","def":{"name":"connect","args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"build_connection(uri)"}},{"id":"connect(uri:URI|String,&block)-class-method","html_id":"connect(uri:URI|String,&block)-class-method","name":"connect","doc":"Opens a connection using the specified *uri*.\nThe scheme of the *uri* determines the driver to use.\nReturned connection must be closed by `Connection#close`.\nIf a block is used the connection is yielded and closed automatically.","summary":"

Opens a connection using the specified uri.

","abstract":false,"args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"args_string":"(uri : URI | String, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L138","def":{"name":"connect","args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"cnn = build_connection(uri)\nbegin\n yield cnn\nensure\n cnn.close\nend\n"}},{"id":"open(uri:URI|String)-class-method","html_id":"open(uri:URI|String)-class-method","name":"open","doc":"Creates a `Database` pool and opens initial connection(s) as specified in the connection *uri*.\nUse `DB#connect` to open a single connection.\n\nThe scheme of the *uri* determines the driver to use.\nConnection parameters such as hostname, user, database name, etc. are specified according\nto each database driver's specific format.\n\nThe returned database must be closed by `Database#close`.","summary":"

Creates a Database pool and opens initial connection(s) as specified in the connection uri.

","abstract":false,"args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"args_string":"(uri : URI | String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L115","def":{"name":"open","args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"build_database(uri)"}},{"id":"open(uri:URI|String,&block)-class-method","html_id":"open(uri:URI|String,&block)-class-method","name":"open","doc":"Same as `#open` but the database is yielded and closed automatically at the end of the block.","summary":"

Same as #open but the database is yielded and closed automatically at the end of the block.

","abstract":false,"args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"args_string":"(uri : URI | String, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L120","def":{"name":"open","args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"db = build_database(uri)\nbegin\n yield db\nensure\n db.close\nend\n"}},{"id":"register_driver(driver_name,driver_class:Driver.class)-class-method","html_id":"register_driver(driver_name,driver_class:Driver.class)-class-method","name":"register_driver","doc":"Registers a driver class for a given *driver_name*.\nShould be called by drivers implementors only.","summary":"

Registers a driver class for a given driver_name.

","abstract":false,"args":[{"name":"driver_name","doc":null,"default_value":"","external_name":"driver_name","restriction":""},{"name":"driver_class","doc":null,"default_value":"","external_name":"driver_class","restriction":"Driver.class"}],"args_string":"(driver_name, driver_class : Driver.class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L99","def":{"name":"register_driver","args":[{"name":"driver_name","doc":null,"default_value":"","external_name":"driver_name","restriction":""},{"name":"driver_class","doc":null,"default_value":"","external_name":"driver_class","restriction":"Driver.class"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"drivers[driver_name] = driver_class"}}],"constructors":[],"instance_methods":[],"macros":[{"id":"mapping(properties,strict=true)-macro","html_id":"mapping(properties,strict=true)-macro","name":"mapping","doc":"The `DB.mapping` macro defines how an object is built from a `ResultSet`.\n\nIt takes hash literal as argument, in which attributes and types are defined.\nOnce defined, `ResultSet#read(t)` populates properties of the class from the\n`ResultSet`.\n\n```crystal\nrequire \"db\"\n\nclass Employee\n DB.mapping({\n title: String,\n name: String,\n })\nend\n\nemployees = Employee.from_rs(db.query(\"SELECT title, name FROM employees\"))\nemployees[0].title # => \"Manager\"\nemployees[0].name # => \"John\"\n```\n\nAttributes not mapped with `DB.mapping` are not defined as properties.\nAlso, missing attributes raise a `DB::MappingException`.\n\nYou can also define attributes for each property.\n\n```crystal\nclass Employee\n DB.mapping({\n title: String,\n name: {\n type: String,\n nilable: true,\n key: \"firstname\",\n },\n })\nend\n```\n\nAvailable attributes:\n\n* *type* (required) defines its type. In the example above, *title: String* is a shortcut to *title: {type: String}*.\n* *nilable* defines if a property can be a `Nil`.\n* **default**: value to use if the property is missing in the result set, or if it's `null` and `nilable` was not set to `true`. If the default value creates a new instance of an object (for example `[1, 2, 3]` or `SomeObject.new`), a different instance will be used each time a row is parsed.\n* *key* defines which column to read from a `ResultSet`. It defaults to the name of the property.\n* *converter* takes an alternate type for parsing. It requires a `#from_rs` method in that class, and returns an instance of the given type.\n\nThe mapping also automatically defines Crystal properties (getters and setters) for each\nof the keys. It doesn't define a constructor accepting those arguments, but you can provide\nan overload.\n\nThe macro basically defines a constructor accepting a `ResultSet` that reads from\nit and initializes this type's instance variables.\n\nThis macro also declares instance variables of the types given in the mapping.","summary":"

The DB.mapping macro defines how an object is built from a ResultSet.

","abstract":false,"args":[{"name":"properties","doc":null,"default_value":"","external_name":"properties","restriction":""},{"name":"strict","doc":null,"default_value":"true","external_name":"strict","restriction":""}],"args_string":"(properties, strict = true)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/mapping.cr#L60","def":{"name":"mapping","args":[{"name":"properties","doc":null,"default_value":"","external_name":"properties","restriction":""},{"name":"strict","doc":null,"default_value":"true","external_name":"strict","restriction":""}],"double_splat":null,"splat_index":null,"block_arg":null,"visibility":"Public","body":" include ::DB::Mappable\n\n \n{% for key, value in properties %}\n {% unless value.is_a?(HashLiteral) || value.is_a?(NamedTupleLiteral)\n properties[key] = {type: value}\nend %}\n {% end %}\n\n\n \n{% for key, value in properties %}\n {% if value[:type].is_a?(Generic) && (value[:type].type_vars.map(&.resolve).includes?(Nil))\n value[:nilable] = true\nend %}\n\n {% if (value[:type].is_a?(Call) && (value[:type].name == \"|\")) && ((value[:type].receiver.resolve == Nil) || value[:type].args.map(&.resolve).any?(&.==(Nil))) %}\n {% value[:nilable] = true %}\n {% end %}\n {% end %}\n\n\n \n{% for key, value in properties %}\n @{{ key.id }} : {{ value[:type] }} {{ (value[:nilable] ? \"?\" : \"\").id }}\n\n def {{ key.id }}=(_{{ key.id }} : {{ value[:type] }} {{ (value[:nilable] ? \"?\" : \"\").id }})\n @{{ key.id }} = _{{ key.id }}\n end\n\n def {{ key.id }}\n @{{ key.id }}\n end\n {% end %}\n\n\n def self.from_rs(\n%rs\n : ::DB::ResultSet)\n \n%objs\n = Array(self).new\n \n%rs\n.each do\n \n%objs\n << self.new(\n%rs\n)\n \nend\n \n%objs\n\n \nensure\n \n%rs\n.close\n \nend\n\n def initialize(\n%rs\n : ::DB::ResultSet)\n \n{% for key, value in properties %}\n %var{key.id} = nil\n %found{key.id} = false\n {% end %}\n\n\n \n%rs\n.each_column do |col_name|\n case col_name\n \n{% for key, value in properties %}\n when {{ value[:key] || key.id.stringify }}\n %found{key.id} = true\n %var{key.id} =\n {% if value[:converter] %}\n {{ value[:converter] }}.from_rs(%rs)\n {% else %}{% if value[:nilable] || (value[:default] != nil) %}\n %rs.read(::Union({{ value[:type] }} | Nil))\n {% else %}\n %rs.read({{ value[:type] }})\n {% end %}{% end %}\n {% end %}\n\n \nelse\n \n{% if strict %}\n raise ::DB::MappingException.new(\"unknown result set attribute: #{col_name}\")\n {% else %}\n %rs.read\n {% end %}\n\n \nend\n \nend\n\n \n{% for key, value in properties %}\n {% if value[:nilable] || (value[:default] != nil) %}{% else %}\n if %var{key.id}.is_a?(Nil) && !%found{key.id}\n raise ::DB::MappingException.new(\"missing result set attribute: {{ (value[:key] || key).id }}\")\n end\n {% end %}\n {% end %}\n\n\n \n{% for key, value in properties %}\n {% if value[:nilable] %}\n {% if value[:default] != nil %}\n @{{ key.id }} = %found{key.id} ? %var{key.id} : {{ value[:default] }}\n {% else %}\n @{{ key.id }} = %var{key.id}\n {% end %}\n {% else %}{% if value[:default] != nil %}\n @{{ key.id }} = %var{key.id}.is_a?(Nil) ? {{ value[:default] }} : %var{key.id}\n {% else %}\n @{{ key.id }} = %var{key.id}.as({{ value[:type] }})\n {% end %}{% end %}\n {% end %}\n\n \nend\n \n"}},{"id":"mapping(**properties)-macro","html_id":"mapping(**properties)-macro","name":"mapping","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(**properties)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/mapping.cr#L151","def":{"name":"mapping","args":[],"double_splat":{"name":"properties","doc":null,"default_value":"","external_name":"properties","restriction":""},"splat_index":null,"block_arg":null,"visibility":"Public","body":" ::DB.mapping(\n{{ properties }}\n)\n \n"}}],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Any","path":"DB/Any.html","kind":"alias","full_name":"DB::Any","name":"Any","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db.cr","line_number":84,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":true,"aliased":"(Bool | Float32 | Float64 | Int32 | Int64 | Slice(UInt8) | String | Time | Nil)","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","path":"DB/BeginTransaction.html","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/begin_transaction.cr","line_number":2,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/begin_transaction.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Connection","kind":"class","full_name":"DB::Connection","name":"Connection"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"begin_transaction:Transaction-instance-method","html_id":"begin_transaction:Transaction-instance-method","name":"begin_transaction","doc":"Creates a transaction from the current context.\nIf is expected that either `Transaction#commit` or `Transaction#rollback`\nare called explicitly to release the context.","summary":"

Creates a transaction from the current context.

","abstract":true,"args":[],"args_string":" : Transaction","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/begin_transaction.cr#L6","def":{"name":"begin_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Transaction","visibility":"Public","body":""}},{"id":"transaction(&block)-instance-method","html_id":"transaction(&block)-instance-method","name":"transaction","doc":"yields a transaction from the current context.\nQuery the database through `Transaction#connection` object.\nIf an exception is thrown within the block a rollback is performed.\nThe exception thrown is bubbled unless it is a `DB::Rollback`.\nFrom the yielded object `Transaction#commit` or `Transaction#rollback`\ncan be called explicitly.","summary":"

yields a transaction from the current context.

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/begin_transaction.cr#L14","def":{"name":"transaction","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"tx = begin_transaction\nbegin\n yield tx\nrescue DB::Rollback\n if tx.closed?\n else\n tx.rollback\n end\nrescue e\n if tx.closed?\n else\n begin\n tx.rollback\n rescue\n nil\n end\n end\n raise(e)\nelse\n if tx.closed?\n else\n tx.commit\n end\nend\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Connection","path":"DB/Connection.html","kind":"class","full_name":"DB::Connection","name":"Connection","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods","name":"SessionMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/connection.cr","line_number":21,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods","name":"SessionMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Database driver implementors must subclass `Connection`.\n\nRepresents one active connection to a database.\n\nUsers should never instantiate a `Connection` manually. Use `DB#open` or `Database#connection`.\n\nRefer to `QueryMethods` for documentation about querying the database through this connection.\n\n### Note to implementors\n\nThe connection must be initialized in `#initialize` and closed in `#do_close`.\n\nOverride `#build_prepared_statement` method in order to return a prepared `Statement` to allow querying.\nOverride `#build_unprepared_statement` method in order to return a unprepared `Statement` to allow querying.\nSee also `Statement` to define how the statements are executed.\n\nIf at any give moment the connection is lost a DB::ConnectionLost should be raised. This will\nallow the connection pool to try to reconnect or use another connection if available.\n","summary":"

Database driver implementors must subclass Connection.

","class_methods":[],"constructors":[{"id":"new(context:ConnectionContext)-class-method","html_id":"new(context:ConnectionContext)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"context","doc":null,"default_value":"","external_name":"context","restriction":"ConnectionContext"}],"args_string":"(context : ConnectionContext)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr#L34","def":{"name":"new","args":[{"name":"context","doc":null,"default_value":"","external_name":"context","restriction":"ConnectionContext"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(context)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"begin_transaction:Transaction-instance-method","html_id":"begin_transaction:Transaction-instance-method","name":"begin_transaction","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Transaction","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr#L49","def":{"name":"begin_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Transaction","visibility":"Public","body":"if @transaction\n raise(DB::Error.new(\"There is an existing transaction in this connection\"))\nend\n@transaction = true\ncreate_transaction\n"}},{"id":"prepared_statements?:Bool-instance-method","html_id":"prepared_statements?:Bool-instance-method","name":"prepared_statements?","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr#L32","def":{"name":"prepared_statements?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":"@prepared_statements"}},{"id":"release-instance-method","html_id":"release-instance-method","name":"release","doc":"return this connection to the pool\nmanaged by the database. Should be used\nonly if the connection was obtained by `Database#checkout`.","summary":"

return this connection to the pool managed by the database.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr#L77","def":{"name":"release","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@context.release(self)"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionContext","path":"DB/ConnectionContext.html","kind":"module","full_name":"DB::ConnectionContext","name":"ConnectionContext","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/connection_context.cr","line_number":2,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Database","kind":"class","full_name":"DB::Database","name":"Database"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"discard(connection:Connection)-instance-method","html_id":"discard(connection:Connection)-instance-method","name":"discard","doc":"Indicates that the *connection* was permanently closed\nand should not be used in the future.","summary":"

Indicates that the connection was permanently closed and should not be used in the future.

","abstract":true,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"args_string":"(connection : Connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr#L11","def":{"name":"discard","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":""}},{"id":"prepared_statements?:Bool-instance-method","html_id":"prepared_statements?:Bool-instance-method","name":"prepared_statements?","doc":"Return whether the statements should be prepared by default","summary":"

Return whether the statements should be prepared by default

","abstract":true,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr#L7","def":{"name":"prepared_statements?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":""}},{"id":"release(connection:Connection)-instance-method","html_id":"release(connection:Connection)-instance-method","name":"release","doc":"Indicates that the *connection* is no longer needed\nand can be reused in the future.","summary":"

Indicates that the connection is no longer needed and can be reused in the future.

","abstract":true,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"args_string":"(connection : Connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr#L15","def":{"name":"release","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":""}},{"id":"uri:URI-instance-method","html_id":"uri:URI-instance-method","name":"uri","doc":"Returns the uri with the connection settings to the database","summary":"

Returns the uri with the connection settings to the database

","abstract":true,"args":[],"args_string":" : URI","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr#L4","def":{"name":"uri","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"URI","visibility":"Public","body":""}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionLost","path":"DB/ConnectionLost.html","kind":"class","full_name":"DB::ConnectionLost","name":"ConnectionLost","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":17,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Raised when an established connection is lost\nprobably due to socket/network issues.\nIt is used by the connection pool retry logic.","summary":"

Raised when an established connection is lost probably due to socket/network issues.

","class_methods":[],"constructors":[{"id":"new(connection)-class-method","html_id":"new(connection)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":""}],"args_string":"(connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr#L20","def":{"name":"new","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(connection)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"connection:Connection-instance-method","html_id":"connection:Connection-instance-method","name":"connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr#L20","def":{"name":"connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":"@connection"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionRefused","path":"DB/ConnectionRefused.html","kind":"class","full_name":"DB::ConnectionRefused","name":"ConnectionRefused","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":27,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Raised when a connection is unable to be established\nprobably due to socket/network or configuration issues.\nIt is used by the connection pool retry logic.","summary":"

Raised when a connection is unable to be established probably due to socket/network or configuration issues.

","class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Database","path":"DB/Database.html","kind":"class","full_name":"DB::Database","name":"Database","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionContext","kind":"module","full_name":"DB::ConnectionContext","name":"ConnectionContext"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods","name":"SessionMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/database.cr","line_number":30,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionContext","kind":"module","full_name":"DB::ConnectionContext","name":"ConnectionContext"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods","name":"SessionMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Acts as an entry point for database access.\nConnections are managed by a pool.\nUse `DB#open` to create a `Database` instance.\n\nRefer to `QueryMethods` and `SessionMethods` for documentation about querying the database.\n\n## Database URI\n\nConnection parameters are configured in a URI. The format is specified by the individual\ndatabase drivers. See the [reference book](https://crystal-lang.org/reference/database/) for examples.\n\nThe connection pool can be configured from URI parameters:\n\n - `initial_pool_size` (default 1)\n - `max_pool_size` (default 0 = unlimited)\n - `max_idle_pool_size` (default 1)\n - `checkout_timeout` (default 5.0)\n - `retry_attempts` (default 1)\n - `retry_delay` (in seconds, default 1.0)\n\nWhen querying a database, prepared statements are used by default.\nThis can be changed from the `prepared_statements` URI parameter:\n\n - `prepared_statements` (true, or false, default true)\n","summary":"

Acts as an entry point for database access.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"checkout-instance-method","html_id":"checkout-instance-method","name":"checkout","doc":"returns a connection from the pool\nthe returned connection must be returned\nto the pool by explictly calling `Connection#release`","summary":"

returns a connection from the pool the returned connection must be returned to the pool by explictly calling Connection#release

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L123","def":{"name":"checkout","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"connection = @pool.checkout\nconnection.auto_release = false\nconnection\n"}},{"id":"close-instance-method","html_id":"close-instance-method","name":"close","doc":"Closes all connection to the database.","summary":"

Closes all connection to the database.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L71","def":{"name":"close","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@statements_cache.each_value(&.close)\n@statements_cache.clear\n@pool.close\n"}},{"id":"prepared_statements?:Bool-instance-method","html_id":"prepared_statements?:Bool-instance-method","name":"prepared_statements?","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L44","def":{"name":"prepared_statements?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":"@prepared_statements"}},{"id":"setup_connection(&proc:Connection->Nil)-instance-method","html_id":"setup_connection(&proc:Connection->Nil)-instance-method","name":"setup_connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&proc : Connection -> Nil)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L63","def":{"name":"setup_connection","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":{"name":"proc","doc":null,"default_value":"","external_name":"proc","restriction":"(Connection -> Nil)"},"return_type":"","visibility":"Public","body":"@setup_connection = proc\n@pool.each_resource do |conn|\n @setup_connection.call(conn)\nend\n"}},{"id":"transaction(&block)-instance-method","html_id":"transaction(&block)-instance-method","name":"transaction","doc":"yields a `Transaction` from a connection of the pool\nRefer to `BeginTransaction#transaction` for documentation.","summary":"

yields a Transaction from a connection of the pool Refer to BeginTransaction#transaction for documentation.

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L131","def":{"name":"transaction","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"using_connection do |cnn|\n cnn.transaction do |tx|\n yield tx\n end\nend"}},{"id":"uri:URI-instance-method","html_id":"uri:URI-instance-method","name":"uri","doc":"Returns the uri with the connection settings to the database","summary":"

Returns the uri with the connection settings to the database

","abstract":false,"args":[],"args_string":" : URI","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L42","def":{"name":"uri","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"URI","visibility":"Public","body":"@uri"}},{"id":"using_connection(&block)-instance-method","html_id":"using_connection(&block)-instance-method","name":"using_connection","doc":"yields a connection from the pool\nthe connection is returned to the pool\nwhen the block ends","summary":"

yields a connection from the pool the connection is returned to the pool when the block ends

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L111","def":{"name":"using_connection","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"connection = self.checkout\nbegin\n yield connection\nensure\n connection.release\nend\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","path":"DB/Disposable.html","kind":"module","full_name":"DB::Disposable","name":"Disposable","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/disposable.cr","line_number":3,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/disposable.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Connection","kind":"class","full_name":"DB::Connection","name":"Connection"},{"html_id":"github.com/crystal-lang/crystal-db/DB/ResultSet","kind":"class","full_name":"DB::ResultSet","name":"ResultSet"},{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Generic module to encapsulate disposable db resources.","summary":"

Generic module to encapsulate disposable db resources.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"close-instance-method","html_id":"close-instance-method","name":"close","doc":"Closes this object.","summary":"

Closes this object.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/disposable.cr#L9","def":{"name":"close","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"if @closed\n return\nend\ndo_close\n@closed = true\n"}},{"id":"closed?-instance-method","html_id":"closed?-instance-method","name":"closed?","doc":"Returns `true` if this object is closed. See `#close`.","summary":"

Returns true if this object is closed.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/disposable.cr#L16","def":{"name":"closed?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@closed"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Driver","path":"DB/Driver.html","kind":"class","full_name":"DB::Driver","name":"Driver","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/driver.cr","line_number":28,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/driver.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Database driver implementors must subclass `Driver`,\nregister with a driver_name using `DB#register_driver` and\noverride the factory method `#build_connection`.\n\n```\nrequire \"db\"\n\nclass FakeDriver < DB::Driver\n def build_connection(context : DB::ConnectionContext)\n FakeConnection.new context\n end\nend\n\nDB.register_driver \"fake\", FakeDriver\n```\n\nAccess to this fake datbase will be available with\n\n```\nDB.open \"fake://...\" do |db|\n # ... use db ...\nend\n```\n\nRefer to `Connection`, `Statement` and `ResultSet` for further\ndriver implementation instructions.","summary":"

Database driver implementors must subclass Driver, register with a driver_name using DB#register_driver and override the factory method #build_connection.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"build_connection(context:ConnectionContext):Connection-instance-method","html_id":"build_connection(context:ConnectionContext):Connection-instance-method","name":"build_connection","doc":null,"summary":null,"abstract":true,"args":[{"name":"context","doc":null,"default_value":"","external_name":"context","restriction":"ConnectionContext"}],"args_string":"(context : ConnectionContext) : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/driver.cr#L29","def":{"name":"build_connection","args":[{"name":"context","doc":null,"default_value":"","external_name":"context","restriction":"ConnectionContext"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":""}},{"id":"connection_pool_options(params:HTTP::Params)-instance-method","html_id":"connection_pool_options(params:HTTP::Params)-instance-method","name":"connection_pool_options","doc":null,"summary":null,"abstract":false,"args":[{"name":"params","doc":null,"default_value":"","external_name":"params","restriction":"HTTP::Params"}],"args_string":"(params : HTTP::Params)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/driver.cr#L31","def":{"name":"connection_pool_options","args":[{"name":"params","doc":null,"default_value":"","external_name":"params","restriction":"HTTP::Params"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"{initial_pool_size: (params.fetch(\"initial_pool_size\", 1)).to_i, max_pool_size: (params.fetch(\"max_pool_size\", 0)).to_i, max_idle_pool_size: (params.fetch(\"max_idle_pool_size\", 1)).to_i, checkout_timeout: (params.fetch(\"checkout_timeout\", 5.0)).to_f, retry_attempts: (params.fetch(\"retry_attempts\", 1)).to_i, retry_delay: (params.fetch(\"retry_delay\", 1.0)).to_f}"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/DriverSpecs","path":"DB/DriverSpecs.html","kind":"class","full_name":"DB::DriverSpecs(DBAnyType)","name":"DriverSpecs","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"spec.cr","line_number":51,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Helper class to ensure behaviour of custom drivers\n\n```\nrequire \"db/spec\"\n\nDB::DriverSpecs(DB::Any).run do\n # How to connect to database\n connection_string \"scheme://database_url\"\n\n # Clean up database if needed using before/after callbacks\n before do\n # ...\n end\n\n after do\n # ...\n end\n\n # Sample values that will be stored, retrieved across many specs\n sample_value \"hello\", \"varchar(25)\", \"'hello'\"\n\n it \"custom spec with a db initialized\" do |db|\n # assert something using *db*\n end\n\n # Configure the appropiate syntax for different commands needed to run the specs\n binding_syntax do |index|\n \"?\"\n end\n\n create_table_1column_syntax do |table_name, col1|\n \"create table #{table_name} (#{col1.name} #{col1.sql_type} #{col1.null ? \"NULL\" : \"NOT NULL\"})\"\n end\nend\n```\n\nThe following methods needs to be called to configure the appropiate syntax\nfor different commands and allow all the specs to run: `binding_syntax`, `create_table_1column_syntax`,\n`create_table_2columns_syntax`, `select_1column_syntax`, `select_2columns_syntax`, `select_count_syntax`,\n`select_scalar_syntax`, `insert_1column_syntax`, `insert_2columns_syntax`, `drop_table_if_exists_syntax`.\n","summary":"

Helper class to ensure behaviour of custom drivers

","class_methods":[{"id":"run(description="asadb",&block)-class-method","html_id":"run(description=&quot;asadb&quot;,&block)-class-method","name":"run","doc":null,"summary":null,"abstract":false,"args":[{"name":"description","doc":null,"default_value":"\"as a db\"","external_name":"description","restriction":""}],"args_string":"(description = "as a db", &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L469","def":{"name":"run","args":[{"name":"description","doc":null,"default_value":"\"as a db\"","external_name":"description","restriction":""}],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"ctx = self.new\nwith ctx yield\ndescribe(description) do\n ctx.include_shared_specs\n ctx.its.each do |db_it|\n case db_it.prepared\n when :default\n it(db_it.description, db_it.file, db_it.line, db_it.end_line) do\n ctx.with_db do |db|\n db_it.block.call(db)\n nil\n end\n end\n when :both\n values = [] of Bool\n if ctx.support_prepared\n values << true\n end\n if ctx.support_unprepared\n values << false\n end\n case values.size\n when 0\n raise(\"Neither prepared non unprepared statements allowed\")\n when 1\n it(db_it.description, db_it.file, db_it.line, db_it.end_line) do\n ctx.with_db do |db|\n db_it.block.call(db)\n nil\n end\n end\n else\n values.each do |prepared_statements|\n it(\"#{db_it.description} (prepared_statements=#{prepared_statements})\", db_it.file, db_it.line, db_it.end_line) do\n ctx.with_db(\"prepared_statements=#{prepared_statements}\") do |db|\n db_it.block.call(db)\n nil\n end\n end\n end\n end\n end\n end\nend\n"}}],"constructors":[],"instance_methods":[{"id":"after(&after:->Nil)-instance-method","html_id":"after(&after:->Nil)-instance-method","name":"after","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&after : -> Nil)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L63","def":{"name":"after","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"after","doc":null,"default_value":"","external_name":"after","restriction":"(-> Nil)"},"return_type":"","visibility":"Public","body":"@after = after"}},{"id":"before(&before:->Nil)-instance-method","html_id":"before(&before:->Nil)-instance-method","name":"before","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&before : -> Nil)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L60","def":{"name":"before","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"before","doc":null,"default_value":"","external_name":"before","restriction":"(-> Nil)"},"return_type":"","visibility":"Public","body":"@before = before"}},{"id":"binding_syntax(&binding_syntax:Proc(Int32,String))-instance-method","html_id":"binding_syntax(&binding_syntax:Proc(Int32,String))-instance-method","name":"binding_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&binding_syntax : Proc(Int32, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L110","def":{"name":"binding_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"binding_syntax","doc":null,"default_value":"","external_name":"binding_syntax","restriction":"Proc(Int32, String)"},"return_type":"","visibility":"Public","body":"@binding_syntax = binding_syntax"}},{"id":"connection_string(connection_string:String)-instance-method","html_id":"connection_string(connection_string:String)-instance-method","name":"connection_string","doc":null,"summary":null,"abstract":false,"args":[{"name":"connection_string","doc":null,"default_value":"","external_name":"connection_string","restriction":"String"}],"args_string":"(connection_string : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L109","def":{"name":"connection_string","args":[{"name":"connection_string","doc":null,"default_value":"","external_name":"connection_string","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection_string = connection_string"}},{"id":"create_table_1column_syntax(&create_table_1column_syntax:Proc(String,ColumnDef,String))-instance-method","html_id":"create_table_1column_syntax(&create_table_1column_syntax:Proc(String,ColumnDef,String))-instance-method","name":"create_table_1column_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&create_table_1column_syntax : Proc(String, ColumnDef, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L112","def":{"name":"create_table_1column_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"create_table_1column_syntax","doc":null,"default_value":"","external_name":"create_table_1column_syntax","restriction":"Proc(String, ColumnDef, String)"},"return_type":"","visibility":"Public","body":"@create_table_1column_syntax = create_table_1column_syntax"}},{"id":"create_table_2columns_syntax(&create_table_2columns_syntax:Proc(String,ColumnDef,ColumnDef,String))-instance-method","html_id":"create_table_2columns_syntax(&create_table_2columns_syntax:Proc(String,ColumnDef,ColumnDef,String))-instance-method","name":"create_table_2columns_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&create_table_2columns_syntax : Proc(String, ColumnDef, ColumnDef, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L113","def":{"name":"create_table_2columns_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"create_table_2columns_syntax","doc":null,"default_value":"","external_name":"create_table_2columns_syntax","restriction":"Proc(String, ColumnDef, ColumnDef, String)"},"return_type":"","visibility":"Public","body":"@create_table_2columns_syntax = create_table_2columns_syntax"}},{"id":"drop_table_if_exists_syntax(&drop_table_if_exists_syntax:Proc(String,String))-instance-method","html_id":"drop_table_if_exists_syntax(&drop_table_if_exists_syntax:Proc(String,String))-instance-method","name":"drop_table_if_exists_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&drop_table_if_exists_syntax : Proc(String, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L119","def":{"name":"drop_table_if_exists_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"drop_table_if_exists_syntax","doc":null,"default_value":"","external_name":"drop_table_if_exists_syntax","restriction":"Proc(String, String)"},"return_type":"","visibility":"Public","body":"@drop_table_if_exists_syntax = drop_table_if_exists_syntax"}},{"id":"encode_null(encode_null:String)-instance-method","html_id":"encode_null(encode_null:String)-instance-method","name":"encode_null","doc":null,"summary":null,"abstract":false,"args":[{"name":"encode_null","doc":null,"default_value":"","external_name":"encode_null","restriction":"String"}],"args_string":"(encode_null : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L66","def":{"name":"encode_null","args":[{"name":"encode_null","doc":null,"default_value":"","external_name":"encode_null","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@encode_null = encode_null"}},{"id":"insert_1column_syntax(&insert_1column_syntax:Proc(String,ColumnDef,String,String))-instance-method","html_id":"insert_1column_syntax(&insert_1column_syntax:Proc(String,ColumnDef,String,String))-instance-method","name":"insert_1column_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&insert_1column_syntax : Proc(String, ColumnDef, String, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L114","def":{"name":"insert_1column_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"insert_1column_syntax","doc":null,"default_value":"","external_name":"insert_1column_syntax","restriction":"Proc(String, ColumnDef, String, String)"},"return_type":"","visibility":"Public","body":"@insert_1column_syntax = insert_1column_syntax"}},{"id":"insert_2columns_syntax(&insert_2columns_syntax:Proc(String,ColumnDef,String,ColumnDef,String,String))-instance-method","html_id":"insert_2columns_syntax(&insert_2columns_syntax:Proc(String,ColumnDef,String,ColumnDef,String,String))-instance-method","name":"insert_2columns_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&insert_2columns_syntax : Proc(String, ColumnDef, String, ColumnDef, String, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L115","def":{"name":"insert_2columns_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"insert_2columns_syntax","doc":null,"default_value":"","external_name":"insert_2columns_syntax","restriction":"Proc(String, ColumnDef, String, ColumnDef, String, String)"},"return_type":"","visibility":"Public","body":"@insert_2columns_syntax = insert_2columns_syntax"}},{"id":"it(description="assert",prepared=:default,file=__FILE__,line=__LINE__,end_line=__END_LINE__,&block:DB::Database->)-instance-method","html_id":"it(description=&quot;assert&quot;,prepared=:default,file=__FILE__,line=__LINE__,end_line=__END_LINE__,&block:DB::Database->)-instance-method","name":"it","doc":null,"summary":null,"abstract":false,"args":[{"name":"description","doc":null,"default_value":"\"assert\"","external_name":"description","restriction":""},{"name":"prepared","doc":null,"default_value":":default","external_name":"prepared","restriction":""},{"name":"file","doc":null,"default_value":"__FILE__","external_name":"file","restriction":""},{"name":"line","doc":null,"default_value":"__LINE__","external_name":"line","restriction":""},{"name":"end_line","doc":null,"default_value":"__END_LINE__","external_name":"end_line","restriction":""}],"args_string":"(description = "assert", prepared = :default, file = __FILE__, line = __LINE__, end_line = __END_LINE__, &block : DB::Database -> )","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L125","def":{"name":"it","args":[{"name":"description","doc":null,"default_value":"\"assert\"","external_name":"description","restriction":""},{"name":"prepared","doc":null,"default_value":":default","external_name":"prepared","restriction":""},{"name":"file","doc":null,"default_value":"__FILE__","external_name":"file","restriction":""},{"name":"line","doc":null,"default_value":"__LINE__","external_name":"line","restriction":""},{"name":"end_line","doc":null,"default_value":"__END_LINE__","external_name":"end_line","restriction":""}],"double_splat":null,"splat_index":null,"yields":1,"block_arg":{"name":"block","doc":null,"default_value":"","external_name":"block","restriction":"(DB::Database -> )"},"return_type":"","visibility":"Public","body":"if Spec.matches?(description, file, line, end_line)\nelse\n return\nend\n@its << (SpecIt.new(description, prepared, file, line, end_line, block))\n"}},{"id":"its-instance-method","html_id":"its-instance-method","name":"its","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L125","def":{"name":"its","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@its"}},{"id":"sample_value(value,sql_type,value_encoded,*,type_safe_value=true)-instance-method","html_id":"sample_value(value,sql_type,value_encoded,*,type_safe_value=true)-instance-method","name":"sample_value","doc":"Use *value* as sample value that should be stored in columns of type *sql_type*.\n*value_encoded* is driver specific expression that should generate that value in the database.\n*type_safe_value* indicates whether *value_encoded* is expected to generate the *value* even without\nbeen stored in a table (default `true`).","summary":"

Use value as sample value that should be stored in columns of type sql_type.

","abstract":false,"args":[{"name":"value","doc":null,"default_value":"","external_name":"value","restriction":""},{"name":"sql_type","doc":null,"default_value":"","external_name":"sql_type","restriction":""},{"name":"value_encoded","doc":null,"default_value":"","external_name":"value_encoded","restriction":""},{"name":"","doc":null,"default_value":"","external_name":"","restriction":""},{"name":"type_safe_value","doc":null,"default_value":"true","external_name":"type_safe_value","restriction":""}],"args_string":"(value, sql_type, value_encoded, *, type_safe_value = true)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L139","def":{"name":"sample_value","args":[{"name":"value","doc":null,"default_value":"","external_name":"value","restriction":""},{"name":"sql_type","doc":null,"default_value":"","external_name":"sql_type","restriction":""},{"name":"value_encoded","doc":null,"default_value":"","external_name":"value_encoded","restriction":""},{"name":"","doc":null,"default_value":"","external_name":"","restriction":""},{"name":"type_safe_value","doc":null,"default_value":"true","external_name":"type_safe_value","restriction":""}],"double_splat":null,"splat_index":3,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@values << (ValueDef(DBAnyType).new(value, sql_type, value_encoded))\nit(\"select nil as (#{typeof(value)} | Nil)\", prepared: :both) do |db|\n db.query(select_scalar(encode_null, nil)) do |rs|\n assert_single_read(rs, typeof(value || nil), nil)\n end\nend\nvalue_desc = value.to_s\nif value_desc.size > 25\n value_desc = \"#{value_desc[0..25]}...(#{value_desc.size})\"\nend\nvalue_desc = \"#{value_desc} as #{sql_type}\"\nif type_safe_value\n it(\"executes with bind #{value_desc}\") do |db|\n (db.scalar(select_scalar(param(1), sql_type), value)).should(eq(value))\n end\n it(\"executes with bind #{value_desc} as array\") do |db|\n (db.scalar(select_scalar(param(1), sql_type), [value])).should(eq(value))\n end\n it(\"select #{value_desc} as literal\") do |db|\n (db.scalar(select_scalar(value_encoded, sql_type))).should(eq(value))\n db.query(select_scalar(value_encoded, sql_type)) do |rs|\n assert_single_read(rs, typeof(value), value)\n end\n end\nend\nit(\"insert/get value #{value_desc} from table\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type)))\n db.exec(sql_insert_table1(c1, value_encoded))\n (db.query_one(sql_select_table1(c1), as: typeof(value))).should(eq(value))\nend\nit(\"insert/get value #{value_desc} from table as nillable\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type)))\n db.exec(sql_insert_table1(c1, value_encoded))\n (db.query_one(sql_select_table1(c1), as: ::Union(typeof(value) | Nil))).should(eq(value))\nend\nit(\"insert/get value nil from table as nillable #{sql_type}\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type, null: true)))\n db.exec(sql_insert_table1(c1, encode_null))\n (db.query_one(sql_select_table1(c1), as: ::Union(typeof(value) | Nil))).should(eq(nil))\nend\nit(\"insert/get value #{value_desc} from table with binding\") do |db|\n db.exec(sql_create_table_table2(c1 = col1(sql_type_for(String)), c2 = col2(sql_type)))\n db.exec(sql_insert_table2(c1, param(1), c2, param(2)), value_for(String), value)\n (db.query_one(sql_select_table2(c2), as: typeof(value))).should(eq(value))\nend\nit(\"insert/get value #{value_desc} from table as nillable with binding\") do |db|\n db.exec(sql_create_table_table2(c1 = col1(sql_type_for(String)), c2 = col2(sql_type)))\n db.exec(sql_insert_table2(c1, param(1), c2, param(2)), value_for(String), value)\n (db.query_one(sql_select_table2(c2), as: ::Union(typeof(value) | Nil))).should(eq(value))\nend\nit(\"insert/get value nil from table as nillable #{sql_type} with binding\") do |db|\n db.exec(sql_create_table_table2(c1 = col1(sql_type_for(String)), c2 = col2(sql_type, null: true)))\n db.exec(sql_insert_table2(c1, param(1), c2, param(2)), value_for(String), nil)\n (db.query_one(sql_select_table2(c2), as: ::Union(typeof(value) | Nil))).should(eq(nil))\nend\nit(\"can use read(#{typeof(value)}) with DB::ResultSet\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type)))\n db.exec(sql_insert_table1(c1, value_encoded))\n db.query(sql_select_table1(c1)) do |rs|\n assert_single_read(rs.as(DB::ResultSet), typeof(value), value)\n end\nend\nit(\"can use read(#{typeof(value)}?) with DB::ResultSet\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type)))\n db.exec(sql_insert_table1(c1, value_encoded))\n db.query(sql_select_table1(c1)) do |rs|\n assert_single_read(rs.as(DB::ResultSet), ::Union(typeof(value) | Nil), value)\n end\nend\nit(\"can use read(#{typeof(value)}?) with DB::ResultSet for nil\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type, null: true)))\n db.exec(sql_insert_table1(c1, encode_null))\n db.query(sql_select_table1(c1)) do |rs|\n assert_single_read(rs.as(DB::ResultSet), ::Union(typeof(value) | Nil), nil)\n end\nend\n"}},{"id":"select_1column_syntax(&select_1column_syntax:Proc(String,ColumnDef,String))-instance-method","html_id":"select_1column_syntax(&select_1column_syntax:Proc(String,ColumnDef,String))-instance-method","name":"select_1column_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&select_1column_syntax : Proc(String, ColumnDef, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L116","def":{"name":"select_1column_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"select_1column_syntax","doc":null,"default_value":"","external_name":"select_1column_syntax","restriction":"Proc(String, ColumnDef, String)"},"return_type":"","visibility":"Public","body":"@select_1column_syntax = select_1column_syntax"}},{"id":"select_2columns_syntax(&select_2columns_syntax:Proc(String,ColumnDef,ColumnDef,String))-instance-method","html_id":"select_2columns_syntax(&select_2columns_syntax:Proc(String,ColumnDef,ColumnDef,String))-instance-method","name":"select_2columns_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&select_2columns_syntax : Proc(String, ColumnDef, ColumnDef, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L117","def":{"name":"select_2columns_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"select_2columns_syntax","doc":null,"default_value":"","external_name":"select_2columns_syntax","restriction":"Proc(String, ColumnDef, ColumnDef, String)"},"return_type":"","visibility":"Public","body":"@select_2columns_syntax = select_2columns_syntax"}},{"id":"select_count_syntax(&select_count_syntax:Proc(String,String))-instance-method","html_id":"select_count_syntax(&select_count_syntax:Proc(String,String))-instance-method","name":"select_count_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&select_count_syntax : Proc(String, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L118","def":{"name":"select_count_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"select_count_syntax","doc":null,"default_value":"","external_name":"select_count_syntax","restriction":"Proc(String, String)"},"return_type":"","visibility":"Public","body":"@select_count_syntax = select_count_syntax"}},{"id":"select_scalar_syntax(&select_scalar_syntax:Proc(String,String?,String))-instance-method","html_id":"select_scalar_syntax(&select_scalar_syntax:Proc(String,String?,String))-instance-method","name":"select_scalar_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&select_scalar_syntax : Proc(String, String?, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L111","def":{"name":"select_scalar_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"select_scalar_syntax","doc":null,"default_value":"","external_name":"select_scalar_syntax","restriction":"Proc(String, String | ::Nil, String)"},"return_type":"","visibility":"Public","body":"@select_scalar_syntax = select_scalar_syntax"}},{"id":"support_prepared(support_prepared:Bool)-instance-method","html_id":"support_prepared(support_prepared:Bool)-instance-method","name":"support_prepared","doc":"Allow specs that uses prepared statements (default `true`)","summary":"

Allow specs that uses prepared statements (default true)

","abstract":false,"args":[{"name":"support_prepared","doc":null,"default_value":"","external_name":"support_prepared","restriction":"Bool"}],"args_string":"(support_prepared : Bool)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L70","def":{"name":"support_prepared","args":[{"name":"support_prepared","doc":null,"default_value":"","external_name":"support_prepared","restriction":"Bool"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@support_prepared = support_prepared"}},{"id":"support_unprepared(support_unprepared:Bool)-instance-method","html_id":"support_unprepared(support_unprepared:Bool)-instance-method","name":"support_unprepared","doc":"Allow specs that uses unprepared statements (default `true`)","summary":"

Allow specs that uses unprepared statements (default true)

","abstract":false,"args":[{"name":"support_unprepared","doc":null,"default_value":"","external_name":"support_unprepared","restriction":"Bool"}],"args_string":"(support_unprepared : Bool)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L79","def":{"name":"support_unprepared","args":[{"name":"support_unprepared","doc":null,"default_value":"","external_name":"support_unprepared","restriction":"Bool"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@support_unprepared = support_unprepared"}}],"macros":[],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/DriverSpecs/ColumnDef","path":"DB/DriverSpecs/ColumnDef.html","kind":"struct","full_name":"DB::DriverSpecs::ColumnDef","name":"ColumnDef","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},{"html_id":"github.com/crystal-lang/crystal-db/Value","kind":"struct","full_name":"Value","name":"Value"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"spec.cr","line_number":52,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB/DriverSpecs","kind":"class","full_name":"DB::DriverSpecs(DBAnyType)","name":"DriverSpecs"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(name:String,sql_type:String,null:Bool)-class-method","html_id":"new(name:String,sql_type:String,null:Bool)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"name","doc":null,"default_value":"","external_name":"name","restriction":"String"},{"name":"sql_type","doc":null,"default_value":"","external_name":"sql_type","restriction":"String"},{"name":"null","doc":null,"default_value":"","external_name":"null","restriction":"Bool"}],"args_string":"(name : String, sql_type : String, null : Bool)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L52","def":{"name":"new","args":[{"name":"name","doc":null,"default_value":"","external_name":"name","restriction":"String"},{"name":"sql_type","doc":null,"default_value":"","external_name":"sql_type","restriction":"String"},{"name":"null","doc":null,"default_value":"","external_name":"null","restriction":"Bool"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(name, sql_type, null)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"clone-instance-method","html_id":"clone-instance-method","name":"clone","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L52","def":{"name":"clone","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"self.class.new(@name.clone, @sql_type.clone, @null.clone)"}},{"id":"copy_with(name_name=@name,sql_type_sql_type=@sql_type,null_null=@null)-instance-method","html_id":"copy_with(name_name=@name,sql_type_sql_type=@sql_type,null_null=@null)-instance-method","name":"copy_with","doc":null,"summary":null,"abstract":false,"args":[{"name":"_name","doc":null,"default_value":"@name","external_name":"name","restriction":""},{"name":"_sql_type","doc":null,"default_value":"@sql_type","external_name":"sql_type","restriction":""},{"name":"_null","doc":null,"default_value":"@null","external_name":"null","restriction":""}],"args_string":"(name _name = @name, sql_type _sql_type = @sql_type, null _null = @null)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L52","def":{"name":"copy_with","args":[{"name":"_name","doc":null,"default_value":"@name","external_name":"name","restriction":""},{"name":"_sql_type","doc":null,"default_value":"@sql_type","external_name":"sql_type","restriction":""},{"name":"_null","doc":null,"default_value":"@null","external_name":"null","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"self.class.new(_name, _sql_type, _null)"}},{"id":"name:String-instance-method","html_id":"name:String-instance-method","name":"name","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : String","source_link":null,"def":{"name":"name","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"String","visibility":"Public","body":"@name"}},{"id":"null:Bool-instance-method","html_id":"null:Bool-instance-method","name":"null","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Bool","source_link":null,"def":{"name":"null","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":"@null"}},{"id":"sql_type:String-instance-method","html_id":"sql_type:String-instance-method","name":"sql_type","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : String","source_link":null,"def":{"name":"sql_type","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"String","visibility":"Public","body":"@sql_type"}}],"macros":[],"types":[]}]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","path":"DB/Error.html","kind":"class","full_name":"DB::Error","name":"Error","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":2,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionLost","kind":"class","full_name":"DB::ConnectionLost","name":"ConnectionLost"},{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionRefused","kind":"class","full_name":"DB::ConnectionRefused","name":"ConnectionRefused"},{"html_id":"github.com/crystal-lang/crystal-db/DB/MappingException","kind":"class","full_name":"DB::MappingException","name":"MappingException"},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolRetryAttemptsExceeded","kind":"class","full_name":"DB::PoolRetryAttemptsExceeded","name":"PoolRetryAttemptsExceeded"},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolTimeout","kind":"class","full_name":"DB::PoolTimeout","name":"PoolTimeout"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Rollback","kind":"class","full_name":"DB::Rollback","name":"Rollback"}],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ExecResult","path":"DB/ExecResult.html","kind":"struct","full_name":"DB::ExecResult","name":"ExecResult","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},{"html_id":"github.com/crystal-lang/crystal-db/Value","kind":"struct","full_name":"Value","name":"Value"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db.cr","line_number":89,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Result of a `#exec` statement.","summary":"

Result of a #exec statement.

","class_methods":[],"constructors":[{"id":"new(rows_affected:Int64,last_insert_id:Int64)-class-method","html_id":"new(rows_affected:Int64,last_insert_id:Int64)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"rows_affected","doc":null,"default_value":"","external_name":"rows_affected","restriction":"Int64"},{"name":"last_insert_id","doc":null,"default_value":"","external_name":"last_insert_id","restriction":"Int64"}],"args_string":"(rows_affected : Int64, last_insert_id : Int64)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L89","def":{"name":"new","args":[{"name":"rows_affected","doc":null,"default_value":"","external_name":"rows_affected","restriction":"Int64"},{"name":"last_insert_id","doc":null,"default_value":"","external_name":"last_insert_id","restriction":"Int64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(rows_affected, last_insert_id)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"clone-instance-method","html_id":"clone-instance-method","name":"clone","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L89","def":{"name":"clone","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"self.class.new(@rows_affected.clone, @last_insert_id.clone)"}},{"id":"copy_with(rows_affected_rows_affected=@rows_affected,last_insert_id_last_insert_id=@last_insert_id)-instance-method","html_id":"copy_with(rows_affected_rows_affected=@rows_affected,last_insert_id_last_insert_id=@last_insert_id)-instance-method","name":"copy_with","doc":null,"summary":null,"abstract":false,"args":[{"name":"_rows_affected","doc":null,"default_value":"@rows_affected","external_name":"rows_affected","restriction":""},{"name":"_last_insert_id","doc":null,"default_value":"@last_insert_id","external_name":"last_insert_id","restriction":""}],"args_string":"(rows_affected _rows_affected = @rows_affected, last_insert_id _last_insert_id = @last_insert_id)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L89","def":{"name":"copy_with","args":[{"name":"_rows_affected","doc":null,"default_value":"@rows_affected","external_name":"rows_affected","restriction":""},{"name":"_last_insert_id","doc":null,"default_value":"@last_insert_id","external_name":"last_insert_id","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"self.class.new(_rows_affected, _last_insert_id)"}},{"id":"last_insert_id:Int64-instance-method","html_id":"last_insert_id:Int64-instance-method","name":"last_insert_id","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Int64","source_link":null,"def":{"name":"last_insert_id","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int64","visibility":"Public","body":"@last_insert_id"}},{"id":"rows_affected:Int64-instance-method","html_id":"rows_affected:Int64-instance-method","name":"rows_affected","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Int64","source_link":null,"def":{"name":"rows_affected","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int64","visibility":"Public","body":"@rows_affected"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Mappable","path":"DB/Mappable.html","kind":"module","full_name":"DB::Mappable","name":"Mappable","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/mapping.cr","line_number":3,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/mapping.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Empty module used for marking a class as supporting DB:Mapping","summary":"

Empty module used for marking a class as supporting DB:Mapping

","class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/MappingException","path":"DB/MappingException.html","kind":"class","full_name":"DB::MappingException","name":"MappingException","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":5,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Pool","path":"DB/Pool.html","kind":"class","full_name":"DB::Pool(T)","name":"Pool","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool.cr","line_number":4,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(initial_pool_size=1,max_pool_size=0,max_idle_pool_size=1,checkout_timeout=5.0,retry_attempts=1,retry_delay=0.2,&factory:->T)-class-method","html_id":"new(initial_pool_size=1,max_pool_size=0,max_idle_pool_size=1,checkout_timeout=5.0,retry_attempts=1,retry_delay=0.2,&factory:->T)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"initial_pool_size","doc":null,"default_value":"1","external_name":"initial_pool_size","restriction":""},{"name":"max_pool_size","doc":null,"default_value":"0","external_name":"max_pool_size","restriction":""},{"name":"max_idle_pool_size","doc":null,"default_value":"1","external_name":"max_idle_pool_size","restriction":""},{"name":"checkout_timeout","doc":null,"default_value":"5.0","external_name":"checkout_timeout","restriction":""},{"name":"retry_attempts","doc":null,"default_value":"1","external_name":"retry_attempts","restriction":""},{"name":"retry_delay","doc":null,"default_value":"0.2","external_name":"retry_delay","restriction":""}],"args_string":"(initial_pool_size = 1, max_pool_size = 0, max_idle_pool_size = 1, checkout_timeout = 5.0, retry_attempts = 1, retry_delay = 0.2, &factory : -> T)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L15","def":{"name":"new","args":[{"name":"initial_pool_size","doc":null,"default_value":"1","external_name":"initial_pool_size","restriction":""},{"name":"max_pool_size","doc":null,"default_value":"0","external_name":"max_pool_size","restriction":""},{"name":"max_idle_pool_size","doc":null,"default_value":"1","external_name":"max_idle_pool_size","restriction":""},{"name":"checkout_timeout","doc":null,"default_value":"5.0","external_name":"checkout_timeout","restriction":""},{"name":"retry_attempts","doc":null,"default_value":"1","external_name":"retry_attempts","restriction":""},{"name":"retry_delay","doc":null,"default_value":"0.2","external_name":"retry_delay","restriction":""}],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"factory","doc":null,"default_value":"","external_name":"factory","restriction":"(-> T)"},"return_type":"","visibility":"Public","body":"_ = Pool(T).allocate\n_.initialize(initial_pool_size, max_pool_size, max_idle_pool_size, checkout_timeout, retry_attempts, retry_delay, &factory) do\n yield\nend\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"checkout:T-instance-method","html_id":"checkout:T-instance-method","name":"checkout","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : T","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L31","def":{"name":"checkout","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"T","visibility":"Public","body":"resource = if @available.empty?\n if can_increase_pool\n build_resource\n else\n wait_for_available\n pick_available\n end\nelse\n pick_available\nend\n@available.delete(resource)\nresource.before_checkout\nresource\n"}},{"id":"checkout_some(candidates:Enumerable(WeakRef(T))):::Tuple(T,Bool)-instance-method","html_id":"checkout_some(candidates:Enumerable(WeakRef(T))):::Tuple(T,Bool)-instance-method","name":"checkout_some","doc":"```\nselected, is_candidate = pool.checkout_some(candidates)\n```\n`selected` be a resource from the `candidates` list and `is_candidate` == `true`\nor `selected` will be a new resource and `is_candidate` == `false`","summary":"

` selected, is_candidate = pool.checkout_some(candidates) ` selected be a resource from the candidates list and is_candidate == true or selected will be a new resource and is_candidate == false

","abstract":false,"args":[{"name":"candidates","doc":null,"default_value":"","external_name":"candidates","restriction":"Enumerable(WeakRef(T))"}],"args_string":"(candidates : Enumerable(WeakRef(T))) : ::Tuple(T, Bool)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L53","def":{"name":"checkout_some","args":[{"name":"candidates","doc":null,"default_value":"","external_name":"candidates","restriction":"Enumerable(WeakRef(T))"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"::Tuple(T, Bool)","visibility":"Public","body":"candidates.each do |ref|\n resource = ref.value\n if resource && (is_available?(resource))\n @available.delete(resource)\n resource.before_checkout\n return {resource, true}\n end\nend\nresource = checkout\n{resource, candidates.any? do |ref|\n ref.value == resource\nend}\n"}},{"id":"close:Nil-instance-method","html_id":"close:Nil-instance-method","name":"close","doc":"close all resources in the pool","summary":"

close all resources in the pool

","abstract":false,"args":[],"args_string":" : Nil","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L25","def":{"name":"close","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Nil","visibility":"Public","body":"@total.each(&.close)\n@total.clear\n@available.clear\n"}},{"id":"release(resource:T):Nil-instance-method","html_id":"release(resource:T):Nil-instance-method","name":"release","doc":null,"summary":null,"abstract":false,"args":[{"name":"resource","doc":null,"default_value":"","external_name":"resource","restriction":"T"}],"args_string":"(resource : T) : Nil","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L69","def":{"name":"release","args":[{"name":"resource","doc":null,"default_value":"","external_name":"resource","restriction":"T"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Nil","visibility":"Public","body":"if can_increase_idle_pool\n @available << resource\n resource.after_release\n if are_waiting_for_resource?\n @availability_channel.send(nil)\n end\nelse\n resource.close\n @total.delete(resource)\nend"}}],"macros":[],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Pool/TimeoutHelper","path":"DB/Pool/TimeoutHelper.html","kind":"class","full_name":"DB::Pool::TimeoutHelper","name":"TimeoutHelper","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool.cr","line_number":183,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB/Pool","kind":"class","full_name":"DB::Pool(T)","name":"Pool"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(timeout:Float64)-class-method","html_id":"new(timeout:Float64)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"timeout","doc":null,"default_value":"","external_name":"timeout","restriction":"Float64"}],"args_string":"(timeout : Float64)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L184","def":{"name":"new","args":[{"name":"timeout","doc":null,"default_value":"","external_name":"timeout","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(timeout)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"cancel-instance-method","html_id":"cancel-instance-method","name":"cancel","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L202","def":{"name":"cancel","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@abort_timeout = true"}},{"id":"receive_select_action-instance-method","html_id":"receive_select_action-instance-method","name":"receive_select_action","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L189","def":{"name":"receive_select_action","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@timeout_channel.receive_select_action"}},{"id":"start-instance-method","html_id":"start-instance-method","name":"start","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L193","def":{"name":"start","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"spawn do\n sleep(@timeout)\n if @abort_timeout\n else\n @timeout_channel.send(nil)\n end\nend"}}],"macros":[],"types":[]}]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolPreparedStatement","path":"DB/PoolPreparedStatement.html","kind":"class","full_name":"DB::PoolPreparedStatement","name":"PoolPreparedStatement","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool_prepared_statement.cr","line_number":7,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_prepared_statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Represents a statement to be executed in any of the connections\nof the pool. The statement is not be executed in a prepared fashion.\nThe execution of the statement is retried according to the pool configuration.\n\nSee `PoolStatement`","summary":"

Represents a statement to be executed in any of the connections of the pool.

","class_methods":[],"constructors":[{"id":"new(db:Database,query:String)-class-method","html_id":"new(db:Database,query:String)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"args_string":"(db : Database, query : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_prepared_statement.cr#L11","def":{"name":"new","args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(db, query)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolRetryAttemptsExceeded","path":"DB/PoolRetryAttemptsExceeded.html","kind":"class","full_name":"DB::PoolRetryAttemptsExceeded","name":"PoolRetryAttemptsExceeded","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":11,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","path":"DB/PoolStatement.html","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool_statement.cr","line_number":6,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"}],"extended_modules":[],"subclasses":[{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolPreparedStatement","kind":"class","full_name":"DB::PoolPreparedStatement","name":"PoolPreparedStatement"},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolUnpreparedStatement","kind":"class","full_name":"DB::PoolUnpreparedStatement","name":"PoolUnpreparedStatement"}],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"When a statement is to be executed in a DB that has a connection pool\na statement from the DB needs to be able to represent a statement in any\nof the connections of the pool. Otherwise the user will need to deal with\nactual connections in some point.","summary":"

When a statement is to be executed in a DB that has a connection pool a statement from the DB needs to be able to represent a statement in any of the connections of the pool.

","class_methods":[],"constructors":[{"id":"new(db:Database,query:String)-class-method","html_id":"new(db:Database,query:String)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"args_string":"(db : Database, query : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L9","def":{"name":"new","args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(db, query)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"exec(args:Array):ExecResult-instance-method","html_id":"exec(args:Array):ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L23","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":"statement_with_retry(&.exec(args))"}},{"id":"exec:ExecResult-instance-method","html_id":"exec:ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[],"args_string":" : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L13","def":{"name":"exec","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":"statement_with_retry(&.exec)"}},{"id":"exec(*args):ExecResult-instance-method","html_id":"exec(*args):ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args) : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L18","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":"statement_with_retry(&.exec(*args))"}},{"id":"query(args:Array):ResultSet-instance-method","html_id":"query(args:Array):ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L38","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":"statement_with_retry(&.query(args))"}},{"id":"query:ResultSet-instance-method","html_id":"query:ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[],"args_string":" : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L28","def":{"name":"query","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":"statement_with_retry(&.query)"}},{"id":"query(*args):ResultSet-instance-method","html_id":"query(*args):ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args) : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L33","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":"statement_with_retry(&.query(*args))"}},{"id":"scalar(*args)-instance-method","html_id":"scalar(*args)-instance-method","name":"scalar","doc":"See `QueryMethods#scalar`","summary":"

See QueryMethods#scalar

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L43","def":{"name":"scalar","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"statement_with_retry(&.scalar(*args))"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolTimeout","path":"DB/PoolTimeout.html","kind":"class","full_name":"DB::PoolTimeout","name":"PoolTimeout","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":8,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolUnpreparedStatement","path":"DB/PoolUnpreparedStatement.html","kind":"class","full_name":"DB::PoolUnpreparedStatement","name":"PoolUnpreparedStatement","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool_unprepared_statement.cr","line_number":7,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_unprepared_statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Represents a statement to be executed in any of the connections\nof the pool. The statement is not be executed in a non prepared fashion.\nThe execution of the statement is retried according to the pool configuration.\n\nSee `PoolStatement`","summary":"

Represents a statement to be executed in any of the connections of the pool.

","class_methods":[],"constructors":[{"id":"new(db:Database,query:String)-class-method","html_id":"new(db:Database,query:String)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"args_string":"(db : Database, query : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_unprepared_statement.cr#L8","def":{"name":"new","args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(db, query)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","path":"DB/QueryMethods.html","kind":"module","full_name":"DB::QueryMethods(Stmt)","name":"QueryMethods","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/query_methods.cr","line_number":20,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods(Session, Stmt)","name":"SessionMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods/PreparedQuery","kind":"struct","full_name":"DB::SessionMethods::PreparedQuery(Session, Stmt)","name":"PreparedQuery"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods/UnpreparedQuery","kind":"struct","full_name":"DB::SessionMethods::UnpreparedQuery(Session, Stmt)","name":"UnpreparedQuery"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Methods to allow querying a database.\nAll methods accepts a `query : String` and a set arguments.\n\nThree kind of statements can be performed:\n 1. `#exec` waits no record response from the database. An `ExecResult` is returned.\n 2. `#scalar` reads a single value of the response. A union of possible values is returned.\n 3. `#query` returns a `ResultSet` that allows iteration over the rows in the response and column information.\n\nArguments can be passed by position\n\n```\ndb.query(\"SELECT name FROM ... WHERE age > ?\", age)\n```\n\nConvention of mapping how arguments are mapped to the query depends on each driver.\n\nIncluding `QueryMethods` requires a `build(query) : Statement` method that is not expected\nto be called directly.","summary":"

Methods to allow querying a database.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"exec(query,*args)-instance-method","html_id":"exec(query,*args)-instance-method","name":"exec","doc":"Performs the `query` and returns an `ExecResult`","summary":"

Performs the #query and returns an ExecResult

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L262","def":{"name":"exec","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(build(query)).exec(*args)"}},{"id":"query(query,*args)-instance-method","html_id":"query(query,*args)-instance-method","name":"query","doc":"Executes a *query* and returns a `ResultSet` with the results.\nThe `ResultSet` must be closed manually.\n\n```\nresult = db.query \"select name from contacts where id = ?\", 10\nbegin\n if result.move_next\n id = result.read(Int32)\n end\nensure\n result.close\nend\n```","summary":"

Executes a query and returns a ResultSet with the results.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L37","def":{"name":"query","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(build(query)).query(*args)"}},{"id":"query(query,*args,&block)-instance-method","html_id":"query(query,*args,&block)-instance-method","name":"query","doc":"Executes a *query* and yields a `ResultSet` with the results.\nThe `ResultSet` is closed automatically.\n\n```\ndb.query(\"select name from contacts where age > ?\", 18) do |rs|\n rs.each do\n name = rs.read(String)\n end\nend\n```","summary":"

Executes a query and yields a ResultSet with the results.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L51","def":{"name":"query","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"rs = query(query, *args)\nbegin\n yield rs\nensure\n rs.close\nend\n"}},{"id":"query_all(query,*args,astype:Class)-instance-method","html_id":"query_all(query,*args,astype:Class)-instance-method","name":"query_all","doc":"Executes a *query* and returns an array where the\nvalue of each row is read as the given *type*.\n\n```\nnames = db.query_all \"select name from contacts\", as: String\n```","summary":"

Executes a query and returns an array where the value of each row is read as the given type.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"args_string":"(query, *args, as type : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L239","def":{"name":"query_all","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_all(query, *args) do |rs|\n rs.read(type)\nend"}},{"id":"query_all(query,*args,astypes:NamedTuple)-instance-method","html_id":"query_all(query,*args,astypes:NamedTuple)-instance-method","name":"query_all","doc":"Executes a *query* and returns an array where each row is\nread as a named tuple of the given *types* (the keys of the named tuple\nare not necessarily the column names).\n\n```\ncontacts = db.query_all \"select name, age from contacts\", as: {name: String, age: Int32}\n```","summary":"

Executes a query and returns an array where each row is read as a named tuple of the given types (the keys of the named tuple are not necessarily the column names).

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"args_string":"(query, *args, as types : NamedTuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L227","def":{"name":"query_all","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_all(query, *args) do |rs|\n rs.read(**types)\nend"}},{"id":"query_all(query,*args,&block:ResultSet->U):Array(U)forallU-instance-method","html_id":"query_all(query,*args,&block:ResultSet->U):Array(U)forallU-instance-method","name":"query_all","doc":"Executes a *query* and yield a `ResultSet` positioned at the beginning\nof each row, returning an array of the values of the blocks.\n\n```\nnames = db.query_all \"select name from contacts\", &.read(String)\n```","summary":"

Executes a query and yield a ResultSet positioned at the beginning of each row, returning an array of the values of the blocks.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block : ResultSet -> U) : Array(U) forall U","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L200","def":{"name":"query_all","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":{"name":"block","doc":null,"default_value":"","external_name":"block","restriction":"(ResultSet -> U)"},"return_type":"Array(U)","visibility":"Public","body":"ary = [] of U\nquery_each(query, *args) do |rs|\n ary.push(yield rs)\nend\nary\n"}},{"id":"query_all(query,*args,astypes:Tuple)-instance-method","html_id":"query_all(query,*args,astypes:Tuple)-instance-method","name":"query_all","doc":"Executes a *query* and returns an array where each row is\nread as a tuple of the given *types*.\n\n```\ncontacts = db.query_all \"select name, age from contacts\", as: {String, Int32}\n```","summary":"

Executes a query and returns an array where each row is read as a tuple of the given types.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"args_string":"(query, *args, as types : Tuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L214","def":{"name":"query_all","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_all(query, *args) do |rs|\n rs.read(*types)\nend"}},{"id":"query_each(query,*args,&block)-instance-method","html_id":"query_each(query,*args,&block)-instance-method","name":"query_each","doc":"Executes a *query* and yields the `ResultSet` once per each row.\nThe `ResultSet` is closed automatically.\n\n```\ndb.query_each \"select name from contacts\" do |rs|\n puts rs.read(String)\nend\n```","summary":"

Executes a query and yields the ResultSet once per each row.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L253","def":{"name":"query_each","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"query(query, *args) do |rs|\n rs.each do\n yield rs\n end\nend"}},{"id":"query_one(query,*args,&block:ResultSet->U):UforallU-instance-method","html_id":"query_one(query,*args,&block:ResultSet->U):UforallU-instance-method","name":"query_one","doc":"Executes a *query* that expects a single row and yields a `ResultSet`\npositioned at that first row.\n\nThe given block must not invoke `move_next` on the yielded result set.\n\nRaises `DB::Error` if there were no rows, or if there were more than one row.\n\n```\nname = db.query_one \"select name from contacts where id = ?\", 18, &.read(String)\n```","summary":"

Executes a query that expects a single row and yields a ResultSet positioned at that first row.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block : ResultSet -> U) : U forall U","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L67","def":{"name":"query_one","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":{"name":"block","doc":null,"default_value":"","external_name":"block","restriction":"(ResultSet -> U)"},"return_type":"U","visibility":"Public","body":"query(query, *args) do |rs|\n if rs.move_next\n else\n raise(DB::Error.new(\"no rows\"))\n end\n value = yield rs\n if rs.move_next\n raise(DB::Error.new(\"more than one row\"))\n end\n return value\nend"}},{"id":"query_one(query,*args,astypes:Tuple)-instance-method","html_id":"query_one(query,*args,astypes:Tuple)-instance-method","name":"query_one","doc":"Executes a *query* that expects a single row and returns it\nas a tuple of the given *types*.\n\nRaises `DB::Error` if there were no rows, or if there were more than one row.\n\n```\ndb.query_one \"select name, age from contacts where id = ?\", 1, as: {String, Int32}\n```","summary":"

Executes a query that expects a single row and returns it as a tuple of the given types.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"args_string":"(query, *args, as types : Tuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L85","def":{"name":"query_one","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one(query, *args) do |rs|\n rs.read(*types)\nend"}},{"id":"query_one(query,*args,astypes:NamedTuple)-instance-method","html_id":"query_one(query,*args,astypes:NamedTuple)-instance-method","name":"query_one","doc":"Executes a *query* that expects a single row and returns it\nas a named tuple of the given *types* (the keys of the named tuple\nare not necessarily the column names).\n\nRaises `DB::Error` if there were no rows, or if there were more than one row.\n\n```\ndb.query_one \"select name, age from contacts where id = ?\", 1, as: {name: String, age: Int32}\n```","summary":"

Executes a query that expects a single row and returns it as a named tuple of the given types (the keys of the named tuple are not necessarily the column names).

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"args_string":"(query, *args, as types : NamedTuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L100","def":{"name":"query_one","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one(query, *args) do |rs|\n rs.read(**types)\nend"}},{"id":"query_one(query,*args,astype:Class)-instance-method","html_id":"query_one(query,*args,astype:Class)-instance-method","name":"query_one","doc":"Executes a *query* that expects a single row\nand returns the first column's value as the given *type*.\n\nRaises `DB::Error` if there were no rows, or if there were more than one row.\n\n```\ndb.query_one \"select name from contacts where id = ?\", 1, as: String\n```","summary":"

Executes a query that expects a single row and returns the first column's value as the given type.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"args_string":"(query, *args, as type : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L114","def":{"name":"query_one","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one(query, *args) do |rs|\n rs.read(type)\nend"}},{"id":"query_one?(query,*args,astype:Class)-instance-method","html_id":"query_one?(query,*args,astype:Class)-instance-method","name":"query_one?","doc":"Executes a *query* that expects a single row\nand returns the first column's value as the given *type*.\n\nReturns `nil` if there were no rows.\n\nRaises `DB::Error` if there were more than one row.\n\n```\nname = db.query_one? \"select name from contacts where id = ?\", 1, as: String\ntypeof(name) # => String?\n```","summary":"

Executes a query that expects a single row and returns the first column's value as the given type.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"args_string":"(query, *args, as type : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L188","def":{"name":"query_one?","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one?(query, *args) do |rs|\n rs.read(type)\nend"}},{"id":"query_one?(query,*args,astypes:NamedTuple)-instance-method","html_id":"query_one?(query,*args,astypes:NamedTuple)-instance-method","name":"query_one?","doc":"Executes a *query* that expects a single row and returns it\nas a named tuple of the given *types* (the keys of the named tuple\nare not necessarily the column names).\n\nReturns `nil` if there were no rows.\n\nRaises `DB::Error` if there were more than one row.\n\n```\nresult = db.query_one? \"select name, age from contacts where id = ?\", 1, as: {age: String, name: Int32}\ntypeof(result) # => NamedTuple(age: String, name: Int32) | Nil\n```","summary":"

Executes a query that expects a single row and returns it as a named tuple of the given types (the keys of the named tuple are not necessarily the column names).

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"args_string":"(query, *args, as types : NamedTuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L171","def":{"name":"query_one?","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one?(query, *args) do |rs|\n rs.read(**types)\nend"}},{"id":"query_one?(query,*args,astypes:Tuple)-instance-method","html_id":"query_one?(query,*args,astypes:Tuple)-instance-method","name":"query_one?","doc":"Executes a *query* that expects a single row and returns it\nas a tuple of the given *types*.\n\nReturns `nil` if there were no rows.\n\nRaises `DB::Error` if there were more than one row.\n\n```\nresult = db.query_one? \"select name, age from contacts where id = ?\", 1, as: {String, Int32}\ntypeof(result) # => Tuple(String, Int32) | Nil\n```","summary":"

Executes a query that expects a single row and returns it as a tuple of the given types.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"args_string":"(query, *args, as types : Tuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L153","def":{"name":"query_one?","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one?(query, *args) do |rs|\n rs.read(*types)\nend"}},{"id":"query_one?(query,*args,&block:ResultSet->U):U?forallU-instance-method","html_id":"query_one?(query,*args,&block:ResultSet->U):U?forallU-instance-method","name":"query_one?","doc":"Executes a *query* that expects at most a single row and yields a `ResultSet`\npositioned at that first row.\n\nReturns `nil`, not invoking the block, if there were no rows.\n\nRaises `DB::Error` if there were more than one row\n(this ends up invoking the block once).\n\n```\nname = db.query_one? \"select name from contacts where id = ?\", 18, &.read(String)\ntypeof(name) # => String | Nil\n```","summary":"

Executes a query that expects at most a single row and yields a ResultSet positioned at that first row.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block : ResultSet -> U) : U? forall U","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L132","def":{"name":"query_one?","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":{"name":"block","doc":null,"default_value":"","external_name":"block","restriction":"(ResultSet -> U)"},"return_type":"U | ::Nil","visibility":"Public","body":"query(query, *args) do |rs|\n if rs.move_next\n else\n return nil\n end\n value = yield rs\n if rs.move_next\n raise(DB::Error.new(\"more than one row\"))\n end\n return value\nend"}},{"id":"scalar(query,*args)-instance-method","html_id":"scalar(query,*args)-instance-method","name":"scalar","doc":"Performs the `query` and returns a single scalar value\n\n```\nputs db.scalar(\"SELECT MAX(name)\").as(String) # => (a String)\n```","summary":"

Performs the #query and returns a single scalar value

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L271","def":{"name":"scalar","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(build(query)).scalar(*args)"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ResultSet","path":"DB/ResultSet.html","kind":"class","full_name":"DB::ResultSet","name":"ResultSet","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/result_set.cr","line_number":22,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"The response of a query performed on a `Database`.\n\nSee `DB` for a complete sample.\n\nEach `#read` call consumes the result and moves to the next column.\nEach column must be read in order.\nAt any moment a `#move_next` can be invoked, meaning to skip the\nremaining, or even all the columns, in the current row.\nAlso it is not mandatory to consume the whole `ResultSet`, hence an iteration\nthrough `#each` or `#move_next` can be stopped.\n\n**Note:** depending on how the `ResultSet` was obtained it might be mandatory an\nexplicit call to `#close`. Check `QueryMethods#query`.\n\n### Note to implementors\n\n1. Override `#move_next` to move to the next row.\n2. Override `#read` returning the next value in the row.\n3. (Optional) Override `#read(t)` for some types `t` for which custom logic other than a simple cast is needed.\n4. Override `#column_count`, `#column_name`.","summary":"

The response of a query performed on a Database.

","class_methods":[],"constructors":[{"id":"new(statement:DB::Statement)-class-method","html_id":"new(statement:DB::Statement)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"statement","doc":null,"default_value":"","external_name":"statement","restriction":"DB::Statement"}],"args_string":"(statement : DB::Statement)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L28","def":{"name":"new","args":[{"name":"statement","doc":null,"default_value":"","external_name":"statement","restriction":"DB::Statement"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(statement)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"column_count:Int32-instance-method","html_id":"column_count:Int32-instance-method","name":"column_count","doc":"Returns the number of columns in the result","summary":"

Returns the number of columns in the result

","abstract":true,"args":[],"args_string":" : Int32","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L59","def":{"name":"column_count","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int32","visibility":"Public","body":""}},{"id":"column_name(index:Int32):String-instance-method","html_id":"column_name(index:Int32):String-instance-method","name":"column_name","doc":"Returns the name of the column in `index` 0-based position.","summary":"

Returns the name of the column in index 0-based position.

","abstract":true,"args":[{"name":"index","doc":null,"default_value":"","external_name":"index","restriction":"Int32"}],"args_string":"(index : Int32) : String","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L62","def":{"name":"column_name","args":[{"name":"index","doc":null,"default_value":"","external_name":"index","restriction":"Int32"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"String","visibility":"Public","body":""}},{"id":"column_names-instance-method","html_id":"column_names-instance-method","name":"column_names","doc":"Returns the name of the columns.","summary":"

Returns the name of the columns.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L65","def":{"name":"column_names","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"Array(String).new(column_count) do |i|\n column_name(i)\nend"}},{"id":"each(&block)-instance-method","html_id":"each(&block)-instance-method","name":"each","doc":"Iterates over all the rows","summary":"

Iterates over all the rows

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L38","def":{"name":"each","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":null,"return_type":"","visibility":"Public","body":"while move_next\n yield\nend"}},{"id":"each_column(&block)-instance-method","html_id":"each_column(&block)-instance-method","name":"each_column","doc":"Iterates over all the columns","summary":"

Iterates over all the columns

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L45","def":{"name":"each_column","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"column_count.times do |x|\n yield column_name(x)\nend"}},{"id":"move_next:Bool-instance-method","html_id":"move_next:Bool-instance-method","name":"move_next","doc":"Move the next row in the result.\nReturn `false` if no more rows are available.\nSee `#each`","summary":"

Move the next row in the result.

","abstract":true,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L54","def":{"name":"move_next","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":""}},{"id":"read(type:DB::Mappable.class)-instance-method","html_id":"read(type:DB::Mappable.class)-instance-method","name":"read","doc":"Reads the next columns and maps them to a class","summary":"

Reads the next columns and maps them to a class

","abstract":false,"args":[{"name":"type","doc":null,"default_value":"","external_name":"type","restriction":"DB::Mappable.class"}],"args_string":"(type : DB::Mappable.class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L73","def":{"name":"read","args":[{"name":"type","doc":null,"default_value":"","external_name":"type","restriction":"DB::Mappable.class"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"type.new(self)"}},{"id":"read(type:T.class):TforallT-instance-method","html_id":"read(type:T.class):TforallT-instance-method","name":"read","doc":"Reads the next column value as a **type**","summary":"

Reads the next column value as a type

","abstract":false,"args":[{"name":"type","doc":null,"default_value":"","external_name":"type","restriction":"T.class"}],"args_string":"(type : T.class) : T forall T","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L78","def":{"name":"read","args":[{"name":"type","doc":null,"default_value":"","external_name":"type","restriction":"T.class"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"T","visibility":"Public","body":"value = read\nif value.is_a?(T)\n value\nelse\n raise(\"#{self.class}#read returned a #{value.class}. A #{T} was expected.\")\nend\n"}},{"id":"read(**types:Class)-instance-method","html_id":"read(**types:Class)-instance-method","name":"read","doc":"Reads the next columns and returns a named tuple of the values.","summary":"

Reads the next columns and returns a named tuple of the values.

","abstract":false,"args":[],"args_string":"(**types : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L93","def":{"name":"read","args":[],"double_splat":{"name":"types","doc":null,"default_value":"","external_name":"types","restriction":"Class"},"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"internal_read(**types)"}},{"id":"read-instance-method","html_id":"read-instance-method","name":"read","doc":"Reads the next column value","summary":"

Reads the next column value

","abstract":true,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L70","def":{"name":"read","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":""}},{"id":"read(*types:Class)-instance-method","html_id":"read(*types:Class)-instance-method","name":"read","doc":"Reads the next columns and returns a tuple of the values.","summary":"

Reads the next columns and returns a tuple of the values.

","abstract":false,"args":[{"name":"types","doc":null,"default_value":"","external_name":"types","restriction":"Class"}],"args_string":"(*types : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L88","def":{"name":"read","args":[{"name":"types","doc":null,"default_value":"","external_name":"types","restriction":"Class"}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"internal_read(*types)"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Rollback","path":"DB/Rollback.html","kind":"class","full_name":"DB::Rollback","name":"Rollback","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":30,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/SavePointTransaction","path":"DB/SavePointTransaction.html","kind":"class","full_name":"DB::SavePointTransaction","name":"SavePointTransaction","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/transaction.cr","line_number":94,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(parent:Transaction,savepoint_name:String)-class-method","html_id":"new(parent:Transaction,savepoint_name:String)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"parent","doc":null,"default_value":"","external_name":"parent","restriction":"Transaction"},{"name":"savepoint_name","doc":null,"default_value":"","external_name":"savepoint_name","restriction":"String"}],"args_string":"(parent : Transaction, savepoint_name : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L97","def":{"name":"new","args":[{"name":"parent","doc":null,"default_value":"","external_name":"parent","restriction":"Transaction"},{"name":"savepoint_name","doc":null,"default_value":"","external_name":"savepoint_name","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(parent, savepoint_name)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"begin_transaction:Transaction-instance-method","html_id":"begin_transaction:Transaction-instance-method","name":"begin_transaction","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Transaction","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L117","def":{"name":"begin_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Transaction","visibility":"Public","body":"if @nested_transaction\n raise(DB::Error.new(\"There is an existing nested transaction in this transaction\"))\nend\n@nested_transaction = true\ncreate_save_point_transaction(self)\n"}},{"id":"commit-instance-method","html_id":"commit-instance-method","name":"commit","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L103","def":{"name":"commit","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.perform_release_savepoint(@savepoint_name)\nsuper()\n"}},{"id":"connection:Connection-instance-method","html_id":"connection:Connection-instance-method","name":"connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L97","def":{"name":"connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":"@connection"}},{"id":"create_save_point_transaction(parent:Transaction)-instance-method","html_id":"create_save_point_transaction(parent:Transaction)-instance-method","name":"create_save_point_transaction","doc":null,"summary":null,"abstract":false,"args":[{"name":"parent","doc":null,"default_value":"","external_name":"parent","restriction":"Transaction"}],"args_string":"(parent : Transaction)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L123","def":{"name":"create_save_point_transaction","args":[{"name":"parent","doc":null,"default_value":"","external_name":"parent","restriction":"Transaction"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@parent.create_save_point_transaction(parent)"}},{"id":"release_from_nested_transaction-instance-method","html_id":"release_from_nested_transaction-instance-method","name":"release_from_nested_transaction","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L127","def":{"name":"release_from_nested_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@nested_transaction = false"}},{"id":"rollback-instance-method","html_id":"rollback-instance-method","name":"rollback","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L108","def":{"name":"rollback","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.perform_rollback_savepoint(@savepoint_name)\nsuper()\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","path":"DB/SessionMethods.html","kind":"module","full_name":"DB::SessionMethods(Session, Stmt)","name":"SessionMethods","abstract":false,"superclass":null,"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"}],"locations":[{"filename":"db/session_methods.cr","line_number":10,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"}],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Connection","kind":"class","full_name":"DB::Connection","name":"Connection"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Database","kind":"class","full_name":"DB::Database","name":"Database"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Methods that are shared accross session like objects:\n - Database\n - Connection\n\nClasses that includes this module are able to execute\nqueries and statements in both prepared and unprepared fashion.\n\nThis module serves for dsl reuse over session like objects.","summary":"

Methods that are shared accross session like objects: - Database - Connection

","class_methods":[],"constructors":[],"instance_methods":[{"id":"build(query):Stmt-instance-method","html_id":"build(query):Stmt-instance-method","name":"build","doc":null,"summary":null,"abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L21","def":{"name":"build","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":"if prepared_statements?\n fetch_or_build_prepared_statement(query)\nelse\n build_unprepared_statement(query)\nend"}},{"id":"build_unprepared_statement(query):Stmt-instance-method","html_id":"build_unprepared_statement(query):Stmt-instance-method","name":"build_unprepared_statement","doc":null,"summary":null,"abstract":true,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L19","def":{"name":"build_unprepared_statement","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":""}},{"id":"fetch_or_build_prepared_statement(query):Stmt-instance-method","html_id":"fetch_or_build_prepared_statement(query):Stmt-instance-method","name":"fetch_or_build_prepared_statement","doc":null,"summary":null,"abstract":true,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L17","def":{"name":"fetch_or_build_prepared_statement","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":""}},{"id":"prepared(query)-instance-method","html_id":"prepared(query)-instance-method","name":"prepared","doc":"Returns a prepared `Statement` that has not been executed yet.","summary":"

Returns a prepared Statement that has not been executed yet.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L36","def":{"name":"prepared","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"prepared.build(query)"}},{"id":"prepared-instance-method","html_id":"prepared-instance-method","name":"prepared","doc":"dsl helper to build prepared statements\nreturns a value that includes `QueryMethods`","summary":"

dsl helper to build prepared statements returns a value that includes QueryMethods

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L31","def":{"name":"prepared","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"PreparedQuery(Session, Stmt).new(self)"}},{"id":"prepared_statements?:Bool-instance-method","html_id":"prepared_statements?:Bool-instance-method","name":"prepared_statements?","doc":"Returns whether by default the statements should\nbe prepared or not.","summary":"

Returns whether by default the statements should be prepared or not.

","abstract":true,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L15","def":{"name":"prepared_statements?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":""}},{"id":"unprepared(query)-instance-method","html_id":"unprepared(query)-instance-method","name":"unprepared","doc":"Returns an unprepared `Statement` that has not been executed yet.","summary":"

Returns an unprepared Statement that has not been executed yet.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L47","def":{"name":"unprepared","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"unprepared.build(query)"}},{"id":"unprepared-instance-method","html_id":"unprepared-instance-method","name":"unprepared","doc":"dsl helper to build unprepared statements\nreturns a value that includes `QueryMethods`","summary":"

dsl helper to build unprepared statements returns a value that includes QueryMethods

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L42","def":{"name":"unprepared","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"UnpreparedQuery(Session, Stmt).new(self)"}}],"macros":[],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods/PreparedQuery","path":"DB/SessionMethods/PreparedQuery.html","kind":"struct","full_name":"DB::SessionMethods::PreparedQuery(Session, Stmt)","name":"PreparedQuery","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"},{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},{"html_id":"github.com/crystal-lang/crystal-db/Value","kind":"struct","full_name":"Value","name":"Value"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/session_methods.cr","line_number":51,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods(Session, Stmt)","name":"SessionMethods"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(session:Session)-class-method","html_id":"new(session:Session)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"session","doc":null,"default_value":"","external_name":"session","restriction":"Session"}],"args_string":"(session : Session)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L54","def":{"name":"new","args":[{"name":"session","doc":null,"default_value":"","external_name":"session","restriction":"Session"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = PreparedQuery(Session, Stmt).allocate\n_.initialize(session)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"build(query):Stmt-instance-method","html_id":"build(query):Stmt-instance-method","name":"build","doc":null,"summary":null,"abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L57","def":{"name":"build","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":"@session.fetch_or_build_prepared_statement(query)"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods/UnpreparedQuery","path":"DB/SessionMethods/UnpreparedQuery.html","kind":"struct","full_name":"DB::SessionMethods::UnpreparedQuery(Session, Stmt)","name":"UnpreparedQuery","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"},{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},{"html_id":"github.com/crystal-lang/crystal-db/Value","kind":"struct","full_name":"Value","name":"Value"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/session_methods.cr","line_number":62,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods(Session, Stmt)","name":"SessionMethods"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(session:Session)-class-method","html_id":"new(session:Session)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"session","doc":null,"default_value":"","external_name":"session","restriction":"Session"}],"args_string":"(session : Session)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L65","def":{"name":"new","args":[{"name":"session","doc":null,"default_value":"","external_name":"session","restriction":"Session"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = UnpreparedQuery(Session, Stmt).allocate\n_.initialize(session)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"build(query):Stmt-instance-method","html_id":"build(query):Stmt-instance-method","name":"build","doc":null,"summary":null,"abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L68","def":{"name":"build","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":"@session.build_unprepared_statement(query)"}}],"macros":[],"types":[]}]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Statement","path":"DB/Statement.html","kind":"class","full_name":"DB::Statement","name":"Statement","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/statement.cr","line_number":52,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Represents a query in a `Connection`.\nIt should be created by `QueryMethods`.\n\n### Note to implementors\n\n1. Subclass `Statements`\n2. `Statements` are created from a custom driver `Connection#prepare` method.\n3. `#perform_query` executes a query that is expected to return a `ResultSet`\n4. `#perform_exec` executes a query that is expected to return an `ExecResult`\n6. `#do_close` is called to release the statement resources.","summary":"

Represents a query in a Connection.

","class_methods":[],"constructors":[{"id":"new(connection:Connection)-class-method","html_id":"new(connection:Connection)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"args_string":"(connection : Connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L58","def":{"name":"new","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(connection)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"exec(args:Array):DB::ExecResult-instance-method","html_id":"exec(args:Array):DB::ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : DB::ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L71","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"DB::ExecResult","visibility":"Public","body":"perform_exec_and_release(args)"}},{"id":"exec:DB::ExecResult-instance-method","html_id":"exec:DB::ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[],"args_string":" : DB::ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L66","def":{"name":"exec","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"DB::ExecResult","visibility":"Public","body":"perform_exec_and_release(Slice(Any).empty)"}},{"id":"exec(*args)-instance-method","html_id":"exec(*args)-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L76","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"perform_exec_and_release(args)"}},{"id":"query(args:Array):DB::ResultSet-instance-method","html_id":"query(args:Array):DB::ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : DB::ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L87","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"DB::ResultSet","visibility":"Public","body":"perform_query_with_rescue(args)"}},{"id":"query:DB::ResultSet-instance-method","html_id":"query:DB::ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[],"args_string":" : DB::ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L82","def":{"name":"query","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"DB::ResultSet","visibility":"Public","body":"perform_query_with_rescue(Tuple.new)"}},{"id":"query(*args)-instance-method","html_id":"query(*args)-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L92","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"perform_query_with_rescue(args)"}},{"id":"release_connection-instance-method","html_id":"release_connection-instance-method","name":"release_connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L61","def":{"name":"release_connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.release_from_statement"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","path":"DB/StatementMethods.html","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods","abstract":false,"superclass":null,"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"}],"locations":[{"filename":"db/statement.cr","line_number":4,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"}],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Statement","kind":"class","full_name":"DB::Statement","name":"Statement"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Common interface for connection based statements\nand for connection pool statements.","summary":"

Common interface for connection based statements and for connection pool statements.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"exec(args:Array):ExecResult-instance-method","html_id":"exec(args:Array):ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":true,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L32","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":""}},{"id":"exec:ExecResult-instance-method","html_id":"exec:ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":true,"args":[],"args_string":" : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L28","def":{"name":"exec","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":""}},{"id":"exec(*args):ExecResult-instance-method","html_id":"exec(*args):ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":true,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args) : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L30","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":""}},{"id":"query(*args,&block)-instance-method","html_id":"query(*args,&block)-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L22","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"rs = query(*args)\nbegin\n yield rs\nensure\n rs.close\nend\n"}},{"id":"query(args:Array):ResultSet-instance-method","html_id":"query(args:Array):ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":true,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L39","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":""}},{"id":"query:ResultSet-instance-method","html_id":"query:ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":true,"args":[],"args_string":" : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L35","def":{"name":"query","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":""}},{"id":"query(*args):ResultSet-instance-method","html_id":"query(*args):ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":true,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args) : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L37","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":""}},{"id":"scalar(*args)-instance-method","html_id":"scalar(*args)-instance-method","name":"scalar","doc":"See `QueryMethods#scalar`","summary":"

See QueryMethods#scalar

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L11","def":{"name":"scalar","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query(*args) do |rs|\n rs.each do\n return rs.read\n end\nend\nraise(\"no results\")\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/StringKeyCache","path":"DB/StringKeyCache.html","kind":"class","full_name":"DB::StringKeyCache(T)","name":"StringKeyCache","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/string_key_cache.cr","line_number":2,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"clear-instance-method","html_id":"clear-instance-method","name":"clear","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr#L17","def":{"name":"clear","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@cache.clear"}},{"id":"each_value(&block)-instance-method","html_id":"each_value(&block)-instance-method","name":"each_value","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr#L11","def":{"name":"each_value","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"@cache.each do |_, value|\n yield value\nend"}},{"id":"fetch(key:String,&block):T-instance-method","html_id":"fetch(key:String,&block):T-instance-method","name":"fetch","doc":null,"summary":null,"abstract":false,"args":[{"name":"key","doc":null,"default_value":"","external_name":"key","restriction":"String"}],"args_string":"(key : String, &block) : T","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr#L5","def":{"name":"fetch","args":[{"name":"key","doc":null,"default_value":"","external_name":"key","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":0,"block_arg":null,"return_type":"T","visibility":"Public","body":"value = @cache.fetch(key, nil)\nif value\nelse\n value = @cache[key] = yield\nend\nvalue\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/TopLevelTransaction","path":"DB/TopLevelTransaction.html","kind":"class","full_name":"DB::TopLevelTransaction","name":"TopLevelTransaction","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/transaction.cr","line_number":38,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(connection:Connection)-class-method","html_id":"new(connection:Connection)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"args_string":"(connection : Connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L43","def":{"name":"new","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(connection)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"begin_transaction:Transaction-instance-method","html_id":"begin_transaction:Transaction-instance-method","name":"begin_transaction","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Transaction","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L62","def":{"name":"begin_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Transaction","visibility":"Public","body":"if @nested_transaction\n raise(DB::Error.new(\"There is an existing nested transaction in this transaction\"))\nend\n@nested_transaction = true\ncreate_save_point_transaction(self)\n"}},{"id":"commit-instance-method","html_id":"commit-instance-method","name":"commit","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L48","def":{"name":"commit","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.perform_commit_transaction\nsuper()\n"}},{"id":"connection:Connection-instance-method","html_id":"connection:Connection-instance-method","name":"connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L41","def":{"name":"connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":"@connection"}},{"id":"rollback-instance-method","html_id":"rollback-instance-method","name":"rollback","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L53","def":{"name":"rollback","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.perform_rollback_transaction\nsuper()\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","path":"DB/Transaction.html","kind":"class","full_name":"DB::Transaction","name":"Transaction","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/transaction.cr","line_number":14,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"}],"extended_modules":[],"subclasses":[{"html_id":"github.com/crystal-lang/crystal-db/DB/SavePointTransaction","kind":"class","full_name":"DB::SavePointTransaction","name":"SavePointTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/TopLevelTransaction","kind":"class","full_name":"DB::TopLevelTransaction","name":"TopLevelTransaction"}],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Transactions should be started from `DB#transaction`, `Connection#transaction`\nor `Connection#begin_transaction`.\n\nUse `Transaction#connection` to submit statements to the database.\n\nUse `Transaction#commit` or `Transaction#rollback` to close the ongoing transaction\nexplicitly. Or refer to `BeginTransaction#transaction` for documentation on how to\nuse `#transaction(&block)` methods in `DB` and `Connection`.\n\nNested transactions are supported by using sql `SAVEPOINT`. To start a nested\ntransaction use `Transaction#transaction` or `Transaction#begin_transaction`.\n","summary":"

Transactions should be started from DB#transaction, Connection#transaction or Connection#begin_transaction.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"commit-instance-method","html_id":"commit-instance-method","name":"commit","doc":"commits the current transaction","summary":"

commits the current transaction

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L21","def":{"name":"commit","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"close!"}},{"id":"connection:Connection-instance-method","html_id":"connection:Connection-instance-method","name":"connection","doc":null,"summary":null,"abstract":true,"args":[],"args_string":" : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L18","def":{"name":"connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":""}},{"id":"release_from_nested_transaction-instance-method","html_id":"release_from_nested_transaction-instance-method","name":"release_from_nested_transaction","doc":null,"summary":null,"abstract":true,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L35","def":{"name":"release_from_nested_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":""}},{"id":"rollback-instance-method","html_id":"rollback-instance-method","name":"rollback","doc":"rollbacks the current transaction","summary":"

rollbacks the current transaction

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L26","def":{"name":"rollback","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"close!"}}],"macros":[],"types":[]}]}]}} \ No newline at end of file diff --git a/api/0.6.0/js/doc.js b/api/0.6.0/js/doc.js new file mode 100644 index 0000000..8796e74 --- /dev/null +++ b/api/0.6.0/js/doc.js @@ -0,0 +1,1019 @@ +window.CrystalDoc = (window.CrystalDoc || {}); + +CrystalDoc.base_path = (CrystalDoc.base_path || ""); + +CrystalDoc.searchIndex = (CrystalDoc.searchIndex || false); +CrystalDoc.MAX_RESULTS_DISPLAY = 140; + +CrystalDoc.runQuery = function(query) { + function searchType(type, query, results) { + var matches = []; + var matchedFields = []; + var name = type.full_name; + var i = name.lastIndexOf("::"); + if (i > 0) { + name = name.substring(i + 2); + } + var nameMatches = query.matches(name); + if (nameMatches){ + matches = matches.concat(nameMatches); + matchedFields.push("name"); + } + + var namespaceMatches = query.matchesNamespace(type.full_name); + if(namespaceMatches){ + matches = matches.concat(namespaceMatches); + matchedFields.push("name"); + } + + var docMatches = query.matches(type.doc); + if(docMatches){ + matches = matches.concat(docMatches); + matchedFields.push("doc"); + } + if (matches.length > 0) { + results.push({ + id: type.id, + result_type: "type", + kind: type.kind, + name: name, + full_name: type.full_name, + href: type.path, + summary: type.summary, + matched_fields: matchedFields, + matched_terms: matches + }); + } + + type.instance_methods.forEach(function(method) { + searchMethod(method, type, "instance_method", query, results); + }) + type.class_methods.forEach(function(method) { + searchMethod(method, type, "class_method", query, results); + }) + type.constructors.forEach(function(constructor) { + searchMethod(constructor, type, "constructor", query, results); + }) + type.macros.forEach(function(macro) { + searchMethod(macro, type, "macro", query, results); + }) + type.constants.forEach(function(constant){ + searchConstant(constant, type, query, results); + }); + + type.types.forEach(function(subtype){ + searchType(subtype, query, results); + }); + }; + + function searchMethod(method, type, kind, query, results) { + var matches = []; + var matchedFields = []; + var nameMatches = query.matchesMethod(method.name, kind, type); + if (nameMatches){ + matches = matches.concat(nameMatches); + matchedFields.push("name"); + } + + method.args.forEach(function(arg){ + var argMatches = query.matches(arg.external_name); + if (argMatches) { + matches = matches.concat(argMatches); + matchedFields.push("args"); + } + }); + + var docMatches = query.matches(type.doc); + if(docMatches){ + matches = matches.concat(docMatches); + matchedFields.push("doc"); + } + + if (matches.length > 0) { + var typeMatches = query.matches(type.full_name); + if (typeMatches) { + matchedFields.push("type"); + matches = matches.concat(typeMatches); + } + results.push({ + id: method.id, + type: type.full_name, + result_type: kind, + name: method.name, + full_name: type.full_name + "#" + method.name, + args_string: method.args_string, + summary: method.summary, + href: type.path + "#" + method.id, + matched_fields: matchedFields, + matched_terms: matches + }); + } + } + + function searchConstant(constant, type, query, results) { + var matches = []; + var matchedFields = []; + var nameMatches = query.matches(constant.name); + if (nameMatches){ + matches = matches.concat(nameMatches); + matchedFields.push("name"); + } + var docMatches = query.matches(constant.doc); + if(docMatches){ + matches = matches.concat(docMatches); + matchedFields.push("doc"); + } + if (matches.length > 0) { + var typeMatches = query.matches(type.full_name); + if (typeMatches) { + matchedFields.push("type"); + matches = matches.concat(typeMatches); + } + results.push({ + id: constant.id, + type: type.full_name, + result_type: "constant", + name: constant.name, + full_name: type.full_name + "#" + constant.name, + value: constant.value, + summary: constant.summary, + href: type.path + "#" + constant.id, + matched_fields: matchedFields, + matched_terms: matches + }); + } + } + + var results = []; + searchType(CrystalDoc.searchIndex.program, query, results); + return results; +}; + +CrystalDoc.rankResults = function(results, query) { + function uniqueArray(ar) { + var j = {}; + + ar.forEach(function(v) { + j[v + "::" + typeof v] = v; + }); + + return Object.keys(j).map(function(v) { + return j[v]; + }); + } + + results = results.sort(function(a, b) { + var matchedTermsDiff = uniqueArray(b.matched_terms).length - uniqueArray(a.matched_terms).length; + var aHasDocs = b.matched_fields.includes("doc"); + var bHasDocs = b.matched_fields.includes("doc"); + + var aOnlyDocs = aHasDocs && a.matched_fields.length == 1; + var bOnlyDocs = bHasDocs && b.matched_fields.length == 1; + + if (a.result_type == "type" && b.result_type != "type" && !aOnlyDocs) { + if(CrystalDoc.DEBUG) { console.log("a is type b not"); } + return -1; + } else if (b.result_type == "type" && a.result_type != "type" && !bOnlyDocs) { + if(CrystalDoc.DEBUG) { console.log("b is type, a not"); } + return 1; + } + if (a.matched_fields.includes("name")) { + if (b.matched_fields.includes("name")) { + var a_name = (CrystalDoc.prefixForType(a.result_type) || "") + ((a.result_type == "type") ? a.full_name : a.name); + var b_name = (CrystalDoc.prefixForType(b.result_type) || "") + ((b.result_type == "type") ? b.full_name : b.name); + a_name = a_name.toLowerCase(); + b_name = b_name.toLowerCase(); + for(var i = 0; i < query.normalizedTerms.length; i++) { + var term = query.terms[i].replace(/^::?|::?$/, ""); + var a_orig_index = a_name.indexOf(term); + var b_orig_index = b_name.indexOf(term); + if(CrystalDoc.DEBUG) { console.log("term: " + term + " a: " + a_name + " b: " + b_name); } + if(CrystalDoc.DEBUG) { console.log(a_orig_index, b_orig_index, a_orig_index - b_orig_index); } + if (a_orig_index >= 0) { + if (b_orig_index >= 0) { + if(CrystalDoc.DEBUG) { console.log("both have exact match", a_orig_index > b_orig_index ? -1 : 1); } + if(a_orig_index != b_orig_index) { + if(CrystalDoc.DEBUG) { console.log("both have exact match at different positions", a_orig_index > b_orig_index ? 1 : -1); } + return a_orig_index > b_orig_index ? 1 : -1; + } + } else { + if(CrystalDoc.DEBUG) { console.log("a has exact match, b not"); } + return -1; + } + } else if (b_orig_index >= 0) { + if(CrystalDoc.DEBUG) { console.log("b has exact match, a not"); } + return 1; + } + } + } else { + if(CrystalDoc.DEBUG) { console.log("a has match in name, b not"); } + return -1; + } + } else if ( + !a.matched_fields.includes("name") && + b.matched_fields.includes("name") + ) { + return 1; + } + + if (matchedTermsDiff != 0 || (aHasDocs != bHasDocs)) { + if(CrystalDoc.DEBUG) { console.log("matchedTermsDiff: " + matchedTermsDiff, aHasDocs, bHasDocs); } + return matchedTermsDiff; + } + + var matchedFieldsDiff = b.matched_fields.length - a.matched_fields.length; + if (matchedFieldsDiff != 0) { + if(CrystalDoc.DEBUG) { console.log("matched to different number of fields: " + matchedFieldsDiff); } + return matchedFieldsDiff > 0 ? 1 : -1; + } + + var nameCompare = a.name.localeCompare(b.name); + if(nameCompare != 0){ + if(CrystalDoc.DEBUG) { console.log("nameCompare resulted in: " + a.name + "<=>" + b.name + ": " + nameCompare); } + return nameCompare > 0 ? 1 : -1; + } + + if(a.matched_fields.includes("args") && b.matched_fields.includes("args")) { + for(var i = 0; i < query.terms.length; i++) { + var term = query.terms[i]; + var aIndex = a.args_string.indexOf(term); + var bIndex = b.args_string.indexOf(term); + if(CrystalDoc.DEBUG) { console.log("index of " + term + " in args_string: " + aIndex + " - " + bIndex); } + if(aIndex >= 0){ + if(bIndex >= 0){ + if(aIndex != bIndex){ + return aIndex > bIndex ? 1 : -1; + } + }else{ + return -1; + } + }else if(bIndex >= 0) { + return 1; + } + } + } + + return 0; + }); + + if (results.length > 1) { + // if we have more than two search terms, only include results with the most matches + var bestMatchedTerms = uniqueArray(results[0].matched_terms).length; + + results = results.filter(function(result) { + return uniqueArray(result.matched_terms).length + 1 >= bestMatchedTerms; + }); + } + return results; +}; + +CrystalDoc.prefixForType = function(type) { + switch (type) { + case "instance_method": + return "#"; + + case "class_method": + case "macro": + case "constructor": + return "."; + + default: + return false; + } +}; + +CrystalDoc.displaySearchResults = function(results, query) { + function sanitize(html){ + return html.replace(/<(?!\/?code)[^>]+>/g, ""); + } + + // limit results + if (results.length > CrystalDoc.MAX_RESULTS_DISPLAY) { + results = results.slice(0, CrystalDoc.MAX_RESULTS_DISPLAY); + } + + var $frag = document.createDocumentFragment(); + var $resultsElem = document.querySelector(".search-list"); + $resultsElem.innerHTML = ""; + + results.forEach(function(result, i) { + var url = CrystalDoc.base_path + result.href; + var type = false; + + var title = query.highlight(result.result_type == "type" ? result.full_name : result.name); + + var prefix = CrystalDoc.prefixForType(result.result_type); + if (prefix) { + title = "" + prefix + "" + title; + } + + title = "" + title + ""; + + if (result.args_string) { + title += + "" + query.highlight(result.args_string) + ""; + } + + $elem = document.createElement("li"); + $elem.className = "search-result search-result--" + result.result_type; + $elem.dataset.href = url; + $elem.setAttribute("title", result.full_name + " docs page"); + + var $title = document.createElement("div"); + $title.setAttribute("class", "search-result__title"); + var $titleLink = document.createElement("a"); + $titleLink.setAttribute("href", url); + + $titleLink.innerHTML = title; + $title.appendChild($titleLink); + $elem.appendChild($title); + $elem.addEventListener("click", function() { + $titleLink.click(); + }); + + if (result.result_type !== "type") { + var $type = document.createElement("div"); + $type.setAttribute("class", "search-result__type"); + $type.innerHTML = query.highlight(result.type); + $elem.appendChild($type); + } + + if(result.summary){ + var $doc = document.createElement("div"); + $doc.setAttribute("class", "search-result__doc"); + $doc.innerHTML = query.highlight(sanitize(result.summary)); + $elem.appendChild($doc); + } + + $elem.appendChild(document.createComment(JSON.stringify(result))); + $frag.appendChild($elem); + }); + + $resultsElem.appendChild($frag); + + CrystalDoc.toggleResultsList(true); +}; + +CrystalDoc.toggleResultsList = function(visible) { + if (visible) { + document.querySelector(".types-list").classList.add("hidden"); + document.querySelector(".search-results").classList.remove("hidden"); + } else { + document.querySelector(".types-list").classList.remove("hidden"); + document.querySelector(".search-results").classList.add("hidden"); + } +}; + +CrystalDoc.Query = function(string) { + this.original = string; + this.terms = string.split(/\s+/).filter(function(word) { + return CrystalDoc.Query.stripModifiers(word).length > 0; + }); + + var normalized = this.terms.map(CrystalDoc.Query.normalizeTerm); + this.normalizedTerms = normalized; + + function runMatcher(field, matcher) { + if (!field) { + return false; + } + var normalizedValue = CrystalDoc.Query.normalizeTerm(field); + + var matches = []; + normalized.forEach(function(term) { + if (matcher(normalizedValue, term)) { + matches.push(term); + } + }); + return matches.length > 0 ? matches : false; + } + + this.matches = function(field) { + return runMatcher(field, function(normalized, term) { + if (term[0] == "#" || term[0] == ".") { + return false; + } + return normalized.indexOf(term) >= 0; + }); + }; + + function namespaceMatcher(normalized, term){ + var i = term.indexOf(":"); + if(i >= 0){ + term = term.replace(/^::?|::?$/, ""); + var index = normalized.indexOf(term); + if((index == 0) || (index > 0 && normalized[index-1] == ":")){ + return true; + } + } + return false; + } + this.matchesMethod = function(name, kind, type) { + return runMatcher(name, function(normalized, term) { + var i = term.indexOf("#"); + if(i >= 0){ + if (kind != "instance_method") { + return false; + } + }else{ + i = term.indexOf("."); + if(i >= 0){ + if (kind != "class_method" && kind != "macro" && kind != "constructor") { + return false; + } + }else{ + //neither # nor . + if(term.indexOf(":") && namespaceMatcher(normalized, term)){ + return true; + } + } + } + + var methodName = term; + if(i >= 0){ + var termType = term.substring(0, i); + methodName = term.substring(i+1); + + if(termType != "") { + if(CrystalDoc.Query.normalizeTerm(type.full_name).indexOf(termType) < 0){ + return false; + } + } + } + return normalized.indexOf(methodName) >= 0; + }); + }; + + this.matchesNamespace = function(namespace){ + return runMatcher(namespace, namespaceMatcher); + }; + + this.highlight = function(string) { + if (typeof string == "undefined") { + return ""; + } + function escapeRegExp(s) { + return s.replace(/[.*+?\^${}()|\[\]\\]/g, "\\$&").replace(/^[#\.:]+/, ""); + } + return string.replace( + new RegExp("(" + this.normalizedTerms.map(escapeRegExp).join("|") + ")", "gi"), + "$1" + ); + }; +}; +CrystalDoc.Query.normalizeTerm = function(term) { + return term.toLowerCase(); +}; +CrystalDoc.Query.stripModifiers = function(term) { + switch (term[0]) { + case "#": + case ".": + case ":": + return term.substr(1); + + default: + return term; + } +} + +CrystalDoc.search = function(string) { + if(!CrystalDoc.searchIndex) { + console.log("CrystalDoc search index not initialized, delaying search"); + + document.addEventListener("CrystalDoc:loaded", function listener(){ + document.removeEventListener("CrystalDoc:loaded", listener); + CrystalDoc.search(string); + }); + return; + } + + document.dispatchEvent(new Event("CrystalDoc:searchStarted")); + + var query = new CrystalDoc.Query(string); + var results = CrystalDoc.runQuery(query); + results = CrystalDoc.rankResults(results, query); + CrystalDoc.displaySearchResults(results, query); + + document.dispatchEvent(new Event("CrystalDoc:searchPerformed")); +}; + +CrystalDoc.initializeIndex = function(data) { + CrystalDoc.searchIndex = data; + + document.dispatchEvent(new Event("CrystalDoc:loaded")); +}; + +CrystalDoc.loadIndex = function() { + function loadJSON(file, callback) { + var xobj = new XMLHttpRequest(); + xobj.overrideMimeType("application/json"); + xobj.open("GET", file, true); + xobj.onreadystatechange = function() { + if (xobj.readyState == 4 && xobj.status == "200") { + callback(xobj.responseText); + } + }; + xobj.send(null); + } + + function loadScript(file) { + script = document.createElement("script"); + script.src = file; + document.body.appendChild(script); + } + + function parseJSON(json) { + CrystalDoc.initializeIndex(JSON.parse(json)); + } + + for(var i = 0; i < document.scripts.length; i++){ + var script = document.scripts[i]; + if (script.src && script.src.indexOf("js/doc.js") >= 0) { + if (script.src.indexOf("file://") == 0) { + // We need to support JSONP files for the search to work on local file system. + var jsonPath = script.src.replace("js/doc.js", "search-index.js"); + loadScript(jsonPath); + return; + } else { + var jsonPath = script.src.replace("js/doc.js", "index.json"); + loadJSON(jsonPath, parseJSON); + return; + } + } + } + console.error("Could not find location of js/doc.js"); +}; + +// Callback for jsonp +function crystal_doc_search_index_callback(data) { + CrystalDoc.initializeIndex(data); +} + +Navigator = function(sidebar, searchInput, list, leaveSearchScope){ + this.list = list; + var self = this; + + var performingSearch = false; + + document.addEventListener('CrystalDoc:searchStarted', function(){ + performingSearch = true; + }); + document.addEventListener('CrystalDoc:searchDebounceStarted', function(){ + performingSearch = true; + }); + document.addEventListener('CrystalDoc:searchPerformed', function(){ + performingSearch = false; + }); + document.addEventListener('CrystalDoc:searchDebounceStopped', function(event){ + performingSearch = false; + }); + + function delayWhileSearching(callback) { + if(performingSearch){ + document.addEventListener('CrystalDoc:searchPerformed', function listener(){ + document.removeEventListener('CrystalDoc:searchPerformed', listener); + + // add some delay to let search results display kick in + setTimeout(callback, 100); + }); + }else{ + callback(); + } + } + + function clearMoveTimeout() { + clearTimeout(self.moveTimeout); + self.moveTimeout = null; + } + + function startMoveTimeout(upwards){ + /*if(self.moveTimeout) { + clearMoveTimeout(); + } + + var go = function() { + if (!self.moveTimeout) return; + self.move(upwards); + self.moveTimout = setTimeout(go, 600); + }; + self.moveTimeout = setTimeout(go, 800);*/ + } + + function scrollCenter(element) { + var rect = element.getBoundingClientRect(); + var middle = sidebar.clientHeight / 2; + sidebar.scrollTop += rect.top + rect.height / 2 - middle; + } + + var move = this.move = function(upwards){ + if(!this.current){ + this.highlightFirst(); + return true; + } + var next = upwards ? this.current.previousElementSibling : this.current.nextElementSibling; + if(next && next.classList) { + this.highlight(next); + scrollCenter(next); + return true; + } + return false; + }; + + this.moveRight = function(){ + }; + this.moveLeft = function(){ + }; + + this.highlight = function(elem) { + if(!elem){ + return; + } + this.removeHighlight(); + + this.current = elem; + this.current.classList.add("current"); + }; + + this.highlightFirst = function(){ + this.highlight(this.list.querySelector('li:first-child')); + }; + + this.removeHighlight = function() { + if(this.current){ + this.current.classList.remove("current"); + } + this.current = null; + } + + this.openSelectedResult = function() { + if(this.current) { + this.current.click(); + } + } + + this.focus = function() { + searchInput.focus(); + searchInput.select(); + this.highlightFirst(); + } + + function handleKeyUp(event) { + switch(event.key) { + case "ArrowUp": + case "ArrowDown": + case "i": + case "j": + case "k": + case "l": + case "c": + case "h": + case "t": + case "n": + event.stopPropagation(); + clearMoveTimeout(); + } + } + + function handleKeyDown(event) { + switch(event.key) { + case "Enter": + event.stopPropagation(); + event.preventDefault(); + leaveSearchScope(); + self.openSelectedResult(); + break; + case "Escape": + event.stopPropagation(); + event.preventDefault(); + leaveSearchScope(); + break; + case "j": + case "c": + case "ArrowUp": + if(event.ctrlKey || event.key == "ArrowUp") { + event.stopPropagation(); + self.move(true); + startMoveTimeout(true); + } + break; + case "k": + case "h": + case "ArrowDown": + if(event.ctrlKey || event.key == "ArrowDown") { + event.stopPropagation(); + self.move(false); + startMoveTimeout(false); + } + break; + case "k": + case "t": + case "ArrowLeft": + if(event.ctrlKey || event.key == "ArrowLeft") { + event.stopPropagation(); + self.moveLeft(); + } + break; + case "l": + case "n": + case "ArrowRight": + if(event.ctrlKey || event.key == "ArrowRight") { + event.stopPropagation(); + self.moveRight(); + } + break; + } + } + + function handleInputKeyUp(event) { + switch(event.key) { + case "ArrowUp": + case "ArrowDown": + event.stopPropagation(); + event.preventDefault(); + clearMoveTimeout(); + } + } + + function handleInputKeyDown(event) { + switch(event.key) { + case "Enter": + event.stopPropagation(); + event.preventDefault(); + delayWhileSearching(function(){ + self.openSelectedResult(); + leaveSearchScope(); + }); + break; + case "Escape": + event.stopPropagation(); + event.preventDefault(); + // remove focus from search input + leaveSearchScope(); + sidebar.focus(); + break; + case "ArrowUp": + event.stopPropagation(); + event.preventDefault(); + self.move(true); + startMoveTimeout(true); + break; + + case "ArrowDown": + event.stopPropagation(); + event.preventDefault(); + self.move(false); + startMoveTimeout(false); + break; + } + } + + sidebar.tabIndex = 100; // set tabIndex to enable keylistener + sidebar.addEventListener('keyup', function(event) { + handleKeyUp(event); + }); + sidebar.addEventListener('keydown', function(event) { + handleKeyDown(event); + }); + searchInput.addEventListener('keydown', function(event) { + handleInputKeyDown(event); + }); + searchInput.addEventListener('keyup', function(event) { + handleInputKeyUp(event); + }); + this.move(); +}; + +var UsageModal = function(title, content) { + var $body = document.body; + var self = this; + var $modalBackground = document.createElement("div"); + $modalBackground.classList.add("modal-background"); + var $usageModal = document.createElement("div"); + $usageModal.classList.add("usage-modal"); + $modalBackground.appendChild($usageModal); + var $title = document.createElement("h3"); + $title.classList.add("modal-title"); + $title.innerHTML = title + $usageModal.appendChild($title); + var $closeButton = document.createElement("span"); + $closeButton.classList.add("close-button"); + $closeButton.setAttribute("title", "Close modal"); + $closeButton.innerText = '×'; + $usageModal.appendChild($closeButton); + $usageModal.insertAdjacentHTML("beforeend", content); + + $modalBackground.addEventListener('click', function(event) { + var element = event.target || event.srcElement; + + if(element == $modalBackground) { + self.hide(); + } + }); + $closeButton.addEventListener('click', function(event) { + self.hide(); + }); + + $body.insertAdjacentElement('beforeend', $modalBackground); + + this.show = function(){ + $body.classList.add("js-modal-visible"); + }; + this.hide = function(){ + $body.classList.remove("js-modal-visible"); + }; + this.isVisible = function(){ + return $body.classList.contains("js-modal-visible"); + } +} + + +document.addEventListener('DOMContentLoaded', function() { + var sessionStorage; + try { + sessionStorage = window.sessionStorage; + } catch (e) { } + if(!sessionStorage) { + sessionStorage = { + setItem: function() {}, + getItem: function() {}, + removeItem: function() {} + }; + } + + var repositoryName = document.querySelector('#repository-name').getAttribute('content'); + var typesList = document.querySelector('.types-list'); + var searchInput = document.querySelector('.search-input'); + var parents = document.querySelectorAll('.types-list li.parent'); + + var scrollSidebarToOpenType = function(){ + var openTypes = typesList.querySelectorAll('.current'); + if (openTypes.length > 0) { + var lastOpenType = openTypes[openTypes.length - 1]; + lastOpenType.scrollIntoView(); + } + } + + scrollSidebarToOpenType(); + + var setPersistentSearchQuery = function(value){ + sessionStorage.setItem(repositoryName + '::search-input:value', value); + } + + for(var i = 0; i < parents.length; i++) { + var _parent = parents[i]; + _parent.addEventListener('click', function(e) { + e.stopPropagation(); + + if(e.target.tagName.toLowerCase() == 'li') { + if(e.target.className.match(/open/)) { + sessionStorage.removeItem(e.target.getAttribute('data-id')); + e.target.className = e.target.className.replace(/ +open/g, ''); + } else { + sessionStorage.setItem(e.target.getAttribute('data-id'), '1'); + if(e.target.className.indexOf('open') == -1) { + e.target.className += ' open'; + } + } + } + }); + + if(sessionStorage.getItem(_parent.getAttribute('data-id')) == '1') { + _parent.className += ' open'; + } + } + + var leaveSearchScope = function(){ + CrystalDoc.toggleResultsList(false); + window.focus(); + } + + var navigator = new Navigator(document.querySelector('.types-list'), searchInput, document.querySelector(".search-results"), leaveSearchScope); + + CrystalDoc.loadIndex(); + var searchTimeout; + var lastSearchText = false; + var performSearch = function() { + document.dispatchEvent(new Event("CrystalDoc:searchDebounceStarted")); + + clearTimeout(searchTimeout); + searchTimeout = setTimeout(function() { + var text = searchInput.value; + + if(text == "") { + CrystalDoc.toggleResultsList(false); + }else if(text == lastSearchText){ + document.dispatchEvent(new Event("CrystalDoc:searchDebounceStopped")); + }else{ + CrystalDoc.search(text); + navigator.highlightFirst(); + searchInput.focus(); + } + lastSearchText = text; + setPersistentSearchQuery(text); + }, 200); + }; + + if(location.hash.length > 3 && location.hash.substring(0,3) == "#q="){ + // allows directly linking a search query which is then executed on the client + // this comes handy for establishing a custom browser search engine with https://crystal-lang.org/api/#q=%s as a search URL + // TODO: Add OpenSearch description + var searchQuery = location.hash.substring(3); + history.pushState({searchQuery: searchQuery}, "Search for " + searchQuery, location.href.replace(/#q=.*/, "")); + searchInput.value = searchQuery; + document.addEventListener('CrystalDoc:loaded', performSearch); + } + + if (searchInput.value.length == 0) { + var searchText = sessionStorage.getItem(repositoryName + '::search-input:value'); + if(searchText){ + searchInput.value = searchText; + } + } + searchInput.addEventListener('keyup', performSearch); + searchInput.addEventListener('input', performSearch); + + var usageModal = new UsageModal('Keyboard Shortcuts', '' + + '' + ); + + function handleShortkeys(event) { + var element = event.target || event.srcElement; + + if(element.tagName == "INPUT" || element.tagName == "TEXTAREA" || element.parentElement.tagName == "TEXTAREA"){ + return; + } + + switch(event.key) { + case "?": + usageModal.show(); + break; + + case "Escape": + usageModal.hide(); + break; + + case "s": + case "/": + if(usageModal.isVisible()) { + return; + } + event.stopPropagation(); + navigator.focus(); + performSearch(); + break; + } + } + + document.addEventListener('keyup', handleShortkeys); + + var scrollToEntryFromLocationHash = function() { + var hash = window.location.hash; + if (hash) { + var targetAnchor = unescape(hash.substr(1)); + var targetEl = document.querySelectorAll('.entry-detail[id="' + targetAnchor + '"]'); + + if (targetEl && targetEl.length > 0) { + targetEl[0].offsetParent.scrollTop = targetEl[0].offsetTop; + } + } + }; + window.addEventListener("hashchange", scrollToEntryFromLocationHash, false); + scrollToEntryFromLocationHash(); +}); diff --git a/api/0.6.0/search-index.js b/api/0.6.0/search-index.js new file mode 100644 index 0000000..3a89ad8 --- /dev/null +++ b/api/0.6.0/search-index.js @@ -0,0 +1 @@ +crystal_doc_search_index_callback({"repository_name":"github.com/crystal-lang/crystal-db","body":"[![Build Status](https://travis-ci.org/crystal-lang/crystal-db.svg?branch=master)](https://travis-ci.org/crystal-lang/crystal-db)\n\n# crystal-db\n\nCommon db api for crystal. You will need to have a specific driver to access a database.\n\n* [SQLite](https://github.com/crystal-lang/crystal-sqlite3)\n* [MySQL](https://github.com/crystal-lang/crystal-mysql)\n* [PostgreSQL](https://github.com/will/crystal-pg)\n* [Cassandra](https://github.com/kaukas/crystal-cassandra)\n\n## Installation\n\nIf you are creating a shard that will work with _any_ driver, then add `crystal-db` as a dependency in `shard.yml`:\n\n```yaml\ndependencies:\n db:\n github: crystal-lang/crystal-db\n```\n\nIf you are creating an application that will work with _some specific_ driver(s), then add them in `shard.yml`:\n\n```yaml\ndependencies:\n sqlite3:\n github: crystal-lang/crystal-sqlite3\n```\n\n`crystal-db` itself will be a nested dependency if drivers are included.\n\nNote: Multiple drivers can be included in the same application.\n\n## Documentation\n\n* [Latest API](http://crystal-lang.github.io/crystal-db/api/latest/)\n* [Crystal book](https://crystal-lang.org/docs/database/)\n\n## Usage\n\nThis shard only provides an abstract database API. In order to use it, a specific driver for the intended database has to be required as well:\n\nThe following example uses SQLite where `?` indicates the arguments. If PostgreSQL is used `$1`, `$2`, etc. should be used. `crystal-db` does not interpret the statements.\n\n```crystal\nrequire \"db\"\nrequire \"sqlite3\"\n\nDB.open \"sqlite3:./file.db\" do |db|\n # When using the pg driver, use $1, $2, etc. instead of ?\n db.exec \"create table contacts (name text, age integer)\"\n db.exec \"insert into contacts values (?, ?)\", \"John Doe\", 30\n\n args = [] of DB::Any\n args << \"Sarah\"\n args << 33\n db.exec \"insert into contacts values (?, ?)\", args\n\n puts \"max age:\"\n puts db.scalar \"select max(age) from contacts\" # => 33\n\n puts \"contacts:\"\n db.query \"select name, age from contacts order by age desc\" do |rs|\n puts \"#{rs.column_name(0)} (#{rs.column_name(1)})\"\n # => name (age)\n rs.each do\n puts \"#{rs.read(String)} (#{rs.read(Int32)})\"\n # => Sarah (33)\n # => John Doe (30)\n end\n end\nend\n```\n\n## Roadmap\n\nIssues not yet addressed:\n\n- [x] Support non prepared statements. [#25](https://github.com/crystal-lang/crystal-db/pull/25)\n- [x] Time data type. (implementation details depends on actual drivers)\n- [x] Data type extensibility. Allow each driver to extend the data types allowed.\n- [x] Transactions & nested transactions. [#27](https://github.com/crystal-lang/crystal-db/pull/27)\n- [x] Connection pool.\n- [ ] Logging\n- [ ] Direct access to `IO` to avoid memory allocation for blobs.\n\n## Contributing\n\n1. Fork it ( https://github.com/crystal-lang/crystal-db/fork )\n2. Create your feature branch (git checkout -b my-new-feature)\n3. Commit your changes (git commit -am 'Add some feature')\n4. Push to the branch (git push origin my-new-feature)\n5. Create a new Pull Request\n\n## Contributors\n\n- [bcardiff](https://github.com/bcardiff) Brian J. Cardiff - creator, maintainer\n","program":{"html_id":"github.com/crystal-lang/crystal-db/toplevel","path":"toplevel.html","kind":"module","full_name":"Top Level Namespace","name":"Top Level Namespace","abstract":false,"superclass":null,"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Spec/Methods","kind":"module","full_name":"Spec::Methods","name":"Methods"},{"html_id":"github.com/crystal-lang/crystal-db/Spec/Expectations","kind":"module","full_name":"Spec::Expectations","name":"Expectations"}],"locations":[],"repository_name":"github.com/crystal-lang/crystal-db","program":true,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/Spec/Expectations","kind":"module","full_name":"Spec::Expectations","name":"Expectations"},{"html_id":"github.com/crystal-lang/crystal-db/Spec/Methods","kind":"module","full_name":"Spec::Methods","name":"Methods"}],"extended_modules":[{"html_id":"github.com/crystal-lang/crystal-db/Spec/Expectations","kind":"module","full_name":"Spec::Expectations","name":"Expectations"},{"html_id":"github.com/crystal-lang/crystal-db/Spec/Methods","kind":"module","full_name":"Spec::Methods","name":"Methods"}],"subclasses":[],"including_types":[],"namespace":null,"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB","path":"DB.html","kind":"module","full_name":"DB","name":"DB","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db.cr","line_number":77,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr"},{"filename":"db/pool.cr","line_number":3,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr"},{"filename":"db/string_key_cache.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr"},{"filename":"db/query_methods.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr"},{"filename":"db/session_methods.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr"},{"filename":"db/disposable.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/disposable.cr"},{"filename":"db/driver.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/driver.cr"},{"filename":"db/statement.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr"},{"filename":"db/begin_transaction.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/begin_transaction.cr"},{"filename":"db/connection_context.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr"},{"filename":"db/connection.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr"},{"filename":"db/transaction.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr"},{"filename":"db/pool_statement.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr"},{"filename":"db/database.cr","line_number":4,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr"},{"filename":"db/pool_prepared_statement.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_prepared_statement.cr"},{"filename":"db/pool_unprepared_statement.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_unprepared_statement.cr"},{"filename":"db/result_set.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr"},{"filename":"db/error.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"},{"filename":"db/mapping.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/mapping.cr"},{"filename":"spec.cr","line_number":9,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr"},{"filename":"db/version.cr","line_number":1,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/version.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[{"id":"TYPES","name":"TYPES","value":"[Nil, String, Bool, Int32, Int64, Float32, Float64, Time, Bytes]","doc":"Types supported to interface with database driver.\nThese can be used in any `ResultSet#read` or any `Database#query` related\nmethod to be used as query parameters","summary":"

Types supported to interface with database driver.

"},{"id":"VERSION","name":"VERSION","value":"\"0.6.0\"","doc":null,"summary":null}],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":null,"doc":"The DB module is a unified interface for database access.\nIndividual database systems are supported by specific database driver shards.\n\nAvailable drivers include:\n* [crystal-lang/crystal-sqlite3](https://github.com/crystal-lang/crystal-sqlite3) for SQLite\n* [crystal-lang/crystal-mysql](https://github.com/crystal-lang/crystal-mysql) for MySQL and MariaDB\n* [will/crystal-pg](https://github.com/will/crystal-pg) for PostgreSQL\n* [kaukas/crystal-cassandra](https://github.com/kaukas/crystal-cassandra) for Cassandra\n\nFor basic instructions on implementing a new database driver, check `Driver` and the existing drivers.\n\nDB manages a connection pool. The connection pool can be configured by query parameters to the\nconnection `URI` as described in `Database`.\n\n### Usage\n\nAssuming `crystal-sqlite3` is included a SQLite3 database can be opened with `#open`.\n\n```\ndb = DB.open \"sqlite3:./path/to/db/file.db\"\ndb.close\n```\n\nIf a block is given to `#open` the database is closed automatically\n\n```\nDB.open \"sqlite3:./file.db\" do |db|\n # work with db\nend # db is closed\n```\n\nIn the code above `db` is a `Database`. Methods available for querying it are described in `QueryMethods`.\n\nThree kind of statements can be performed:\n1. `Database#exec` waits no response from the database.\n2. `Database#scalar` reads a single value of the response.\n3. `Database#query` returns a ResultSet that allows iteration over the rows in the response and column information.\n\nAll of the above methods allows parametrised query. Either positional or named arguments.\n\nCheck a full working version:\n\nThe following example uses SQLite where `?` indicates the arguments. If PostgreSQL is used `$1`, `$2`, etc. should be used. `crystal-db` does not interpret the statements.\n\n```\nrequire \"db\"\nrequire \"sqlite3\"\n\nDB.open \"sqlite3:./file.db\" do |db|\n # When using the pg driver, use $1, $2, etc. instead of ?\n db.exec \"create table contacts (name text, age integer)\"\n db.exec \"insert into contacts values (?, ?)\", \"John Doe\", 30\n\n args = [] of DB::Any\n args << \"Sarah\"\n args << 33\n db.exec \"insert into contacts values (?, ?)\", args\n\n puts \"max age:\"\n puts db.scalar \"select max(age) from contacts\" # => 33\n\n puts \"contacts:\"\n db.query \"select name, age from contacts order by age desc\" do |rs|\n puts \"#{rs.column_name(0)} (#{rs.column_name(1)})\"\n # => name (age)\n rs.each do\n puts \"#{rs.read(String)} (#{rs.read(Int32)})\"\n # => Sarah (33)\n # => John Doe (30)\n end\n end\nend\n```\n","summary":"

The DB module is a unified interface for database access.

","class_methods":[{"id":"connect(uri:URI|String)-class-method","html_id":"connect(uri:URI|String)-class-method","name":"connect","doc":"Opens a connection using the specified *uri*.\nThe scheme of the *uri* determines the driver to use.\nReturned connection must be closed by `Connection#close`.\nIf a block is used the connection is yielded and closed automatically.","summary":"

Opens a connection using the specified uri.

","abstract":false,"args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"args_string":"(uri : URI | String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L133","def":{"name":"connect","args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"build_connection(uri)"}},{"id":"connect(uri:URI|String,&block)-class-method","html_id":"connect(uri:URI|String,&block)-class-method","name":"connect","doc":"Opens a connection using the specified *uri*.\nThe scheme of the *uri* determines the driver to use.\nReturned connection must be closed by `Connection#close`.\nIf a block is used the connection is yielded and closed automatically.","summary":"

Opens a connection using the specified uri.

","abstract":false,"args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"args_string":"(uri : URI | String, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L138","def":{"name":"connect","args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"cnn = build_connection(uri)\nbegin\n yield cnn\nensure\n cnn.close\nend\n"}},{"id":"open(uri:URI|String)-class-method","html_id":"open(uri:URI|String)-class-method","name":"open","doc":"Creates a `Database` pool and opens initial connection(s) as specified in the connection *uri*.\nUse `DB#connect` to open a single connection.\n\nThe scheme of the *uri* determines the driver to use.\nConnection parameters such as hostname, user, database name, etc. are specified according\nto each database driver's specific format.\n\nThe returned database must be closed by `Database#close`.","summary":"

Creates a Database pool and opens initial connection(s) as specified in the connection uri.

","abstract":false,"args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"args_string":"(uri : URI | String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L115","def":{"name":"open","args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"build_database(uri)"}},{"id":"open(uri:URI|String,&block)-class-method","html_id":"open(uri:URI|String,&block)-class-method","name":"open","doc":"Same as `#open` but the database is yielded and closed automatically at the end of the block.","summary":"

Same as #open but the database is yielded and closed automatically at the end of the block.

","abstract":false,"args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"args_string":"(uri : URI | String, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L120","def":{"name":"open","args":[{"name":"uri","doc":null,"default_value":"","external_name":"uri","restriction":"URI | String"}],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"db = build_database(uri)\nbegin\n yield db\nensure\n db.close\nend\n"}},{"id":"register_driver(driver_name,driver_class:Driver.class)-class-method","html_id":"register_driver(driver_name,driver_class:Driver.class)-class-method","name":"register_driver","doc":"Registers a driver class for a given *driver_name*.\nShould be called by drivers implementors only.","summary":"

Registers a driver class for a given driver_name.

","abstract":false,"args":[{"name":"driver_name","doc":null,"default_value":"","external_name":"driver_name","restriction":""},{"name":"driver_class","doc":null,"default_value":"","external_name":"driver_class","restriction":"Driver.class"}],"args_string":"(driver_name, driver_class : Driver.class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L99","def":{"name":"register_driver","args":[{"name":"driver_name","doc":null,"default_value":"","external_name":"driver_name","restriction":""},{"name":"driver_class","doc":null,"default_value":"","external_name":"driver_class","restriction":"Driver.class"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"drivers[driver_name] = driver_class"}}],"constructors":[],"instance_methods":[],"macros":[{"id":"mapping(properties,strict=true)-macro","html_id":"mapping(properties,strict=true)-macro","name":"mapping","doc":"The `DB.mapping` macro defines how an object is built from a `ResultSet`.\n\nIt takes hash literal as argument, in which attributes and types are defined.\nOnce defined, `ResultSet#read(t)` populates properties of the class from the\n`ResultSet`.\n\n```crystal\nrequire \"db\"\n\nclass Employee\n DB.mapping({\n title: String,\n name: String,\n })\nend\n\nemployees = Employee.from_rs(db.query(\"SELECT title, name FROM employees\"))\nemployees[0].title # => \"Manager\"\nemployees[0].name # => \"John\"\n```\n\nAttributes not mapped with `DB.mapping` are not defined as properties.\nAlso, missing attributes raise a `DB::MappingException`.\n\nYou can also define attributes for each property.\n\n```crystal\nclass Employee\n DB.mapping({\n title: String,\n name: {\n type: String,\n nilable: true,\n key: \"firstname\",\n },\n })\nend\n```\n\nAvailable attributes:\n\n* *type* (required) defines its type. In the example above, *title: String* is a shortcut to *title: {type: String}*.\n* *nilable* defines if a property can be a `Nil`.\n* **default**: value to use if the property is missing in the result set, or if it's `null` and `nilable` was not set to `true`. If the default value creates a new instance of an object (for example `[1, 2, 3]` or `SomeObject.new`), a different instance will be used each time a row is parsed.\n* *key* defines which column to read from a `ResultSet`. It defaults to the name of the property.\n* *converter* takes an alternate type for parsing. It requires a `#from_rs` method in that class, and returns an instance of the given type.\n\nThe mapping also automatically defines Crystal properties (getters and setters) for each\nof the keys. It doesn't define a constructor accepting those arguments, but you can provide\nan overload.\n\nThe macro basically defines a constructor accepting a `ResultSet` that reads from\nit and initializes this type's instance variables.\n\nThis macro also declares instance variables of the types given in the mapping.","summary":"

The DB.mapping macro defines how an object is built from a ResultSet.

","abstract":false,"args":[{"name":"properties","doc":null,"default_value":"","external_name":"properties","restriction":""},{"name":"strict","doc":null,"default_value":"true","external_name":"strict","restriction":""}],"args_string":"(properties, strict = true)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/mapping.cr#L60","def":{"name":"mapping","args":[{"name":"properties","doc":null,"default_value":"","external_name":"properties","restriction":""},{"name":"strict","doc":null,"default_value":"true","external_name":"strict","restriction":""}],"double_splat":null,"splat_index":null,"block_arg":null,"visibility":"Public","body":" include ::DB::Mappable\n\n \n{% for key, value in properties %}\n {% unless value.is_a?(HashLiteral) || value.is_a?(NamedTupleLiteral)\n properties[key] = {type: value}\nend %}\n {% end %}\n\n\n \n{% for key, value in properties %}\n {% if value[:type].is_a?(Generic) && (value[:type].type_vars.map(&.resolve).includes?(Nil))\n value[:nilable] = true\nend %}\n\n {% if (value[:type].is_a?(Call) && (value[:type].name == \"|\")) && ((value[:type].receiver.resolve == Nil) || value[:type].args.map(&.resolve).any?(&.==(Nil))) %}\n {% value[:nilable] = true %}\n {% end %}\n {% end %}\n\n\n \n{% for key, value in properties %}\n @{{ key.id }} : {{ value[:type] }} {{ (value[:nilable] ? \"?\" : \"\").id }}\n\n def {{ key.id }}=(_{{ key.id }} : {{ value[:type] }} {{ (value[:nilable] ? \"?\" : \"\").id }})\n @{{ key.id }} = _{{ key.id }}\n end\n\n def {{ key.id }}\n @{{ key.id }}\n end\n {% end %}\n\n\n def self.from_rs(\n%rs\n : ::DB::ResultSet)\n \n%objs\n = Array(self).new\n \n%rs\n.each do\n \n%objs\n << self.new(\n%rs\n)\n \nend\n \n%objs\n\n \nensure\n \n%rs\n.close\n \nend\n\n def initialize(\n%rs\n : ::DB::ResultSet)\n \n{% for key, value in properties %}\n %var{key.id} = nil\n %found{key.id} = false\n {% end %}\n\n\n \n%rs\n.each_column do |col_name|\n case col_name\n \n{% for key, value in properties %}\n when {{ value[:key] || key.id.stringify }}\n %found{key.id} = true\n %var{key.id} =\n {% if value[:converter] %}\n {{ value[:converter] }}.from_rs(%rs)\n {% else %}{% if value[:nilable] || (value[:default] != nil) %}\n %rs.read(::Union({{ value[:type] }} | Nil))\n {% else %}\n %rs.read({{ value[:type] }})\n {% end %}{% end %}\n {% end %}\n\n \nelse\n \n{% if strict %}\n raise ::DB::MappingException.new(\"unknown result set attribute: #{col_name}\")\n {% else %}\n %rs.read\n {% end %}\n\n \nend\n \nend\n\n \n{% for key, value in properties %}\n {% if value[:nilable] || (value[:default] != nil) %}{% else %}\n if %var{key.id}.is_a?(Nil) && !%found{key.id}\n raise ::DB::MappingException.new(\"missing result set attribute: {{ (value[:key] || key).id }}\")\n end\n {% end %}\n {% end %}\n\n\n \n{% for key, value in properties %}\n {% if value[:nilable] %}\n {% if value[:default] != nil %}\n @{{ key.id }} = %found{key.id} ? %var{key.id} : {{ value[:default] }}\n {% else %}\n @{{ key.id }} = %var{key.id}\n {% end %}\n {% else %}{% if value[:default] != nil %}\n @{{ key.id }} = %var{key.id}.is_a?(Nil) ? {{ value[:default] }} : %var{key.id}\n {% else %}\n @{{ key.id }} = %var{key.id}.as({{ value[:type] }})\n {% end %}{% end %}\n {% end %}\n\n \nend\n \n"}},{"id":"mapping(**properties)-macro","html_id":"mapping(**properties)-macro","name":"mapping","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(**properties)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/mapping.cr#L151","def":{"name":"mapping","args":[],"double_splat":{"name":"properties","doc":null,"default_value":"","external_name":"properties","restriction":""},"splat_index":null,"block_arg":null,"visibility":"Public","body":" ::DB.mapping(\n{{ properties }}\n)\n \n"}}],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Any","path":"DB/Any.html","kind":"alias","full_name":"DB::Any","name":"Any","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db.cr","line_number":84,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":true,"aliased":"(Bool | Float32 | Float64 | Int32 | Int64 | Slice(UInt8) | String | Time | Nil)","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","path":"DB/BeginTransaction.html","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/begin_transaction.cr","line_number":2,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/begin_transaction.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Connection","kind":"class","full_name":"DB::Connection","name":"Connection"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"begin_transaction:Transaction-instance-method","html_id":"begin_transaction:Transaction-instance-method","name":"begin_transaction","doc":"Creates a transaction from the current context.\nIf is expected that either `Transaction#commit` or `Transaction#rollback`\nare called explicitly to release the context.","summary":"

Creates a transaction from the current context.

","abstract":true,"args":[],"args_string":" : Transaction","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/begin_transaction.cr#L6","def":{"name":"begin_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Transaction","visibility":"Public","body":""}},{"id":"transaction(&block)-instance-method","html_id":"transaction(&block)-instance-method","name":"transaction","doc":"yields a transaction from the current context.\nQuery the database through `Transaction#connection` object.\nIf an exception is thrown within the block a rollback is performed.\nThe exception thrown is bubbled unless it is a `DB::Rollback`.\nFrom the yielded object `Transaction#commit` or `Transaction#rollback`\ncan be called explicitly.","summary":"

yields a transaction from the current context.

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/begin_transaction.cr#L14","def":{"name":"transaction","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"tx = begin_transaction\nbegin\n yield tx\nrescue DB::Rollback\n if tx.closed?\n else\n tx.rollback\n end\nrescue e\n if tx.closed?\n else\n begin\n tx.rollback\n rescue\n nil\n end\n end\n raise(e)\nelse\n if tx.closed?\n else\n tx.commit\n end\nend\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Connection","path":"DB/Connection.html","kind":"class","full_name":"DB::Connection","name":"Connection","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods","name":"SessionMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/connection.cr","line_number":21,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods","name":"SessionMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Database driver implementors must subclass `Connection`.\n\nRepresents one active connection to a database.\n\nUsers should never instantiate a `Connection` manually. Use `DB#open` or `Database#connection`.\n\nRefer to `QueryMethods` for documentation about querying the database through this connection.\n\n### Note to implementors\n\nThe connection must be initialized in `#initialize` and closed in `#do_close`.\n\nOverride `#build_prepared_statement` method in order to return a prepared `Statement` to allow querying.\nOverride `#build_unprepared_statement` method in order to return a unprepared `Statement` to allow querying.\nSee also `Statement` to define how the statements are executed.\n\nIf at any give moment the connection is lost a DB::ConnectionLost should be raised. This will\nallow the connection pool to try to reconnect or use another connection if available.\n","summary":"

Database driver implementors must subclass Connection.

","class_methods":[],"constructors":[{"id":"new(context:ConnectionContext)-class-method","html_id":"new(context:ConnectionContext)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"context","doc":null,"default_value":"","external_name":"context","restriction":"ConnectionContext"}],"args_string":"(context : ConnectionContext)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr#L34","def":{"name":"new","args":[{"name":"context","doc":null,"default_value":"","external_name":"context","restriction":"ConnectionContext"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(context)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"begin_transaction:Transaction-instance-method","html_id":"begin_transaction:Transaction-instance-method","name":"begin_transaction","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Transaction","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr#L49","def":{"name":"begin_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Transaction","visibility":"Public","body":"if @transaction\n raise(DB::Error.new(\"There is an existing transaction in this connection\"))\nend\n@transaction = true\ncreate_transaction\n"}},{"id":"prepared_statements?:Bool-instance-method","html_id":"prepared_statements?:Bool-instance-method","name":"prepared_statements?","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr#L32","def":{"name":"prepared_statements?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":"@prepared_statements"}},{"id":"release-instance-method","html_id":"release-instance-method","name":"release","doc":"return this connection to the pool\nmanaged by the database. Should be used\nonly if the connection was obtained by `Database#checkout`.","summary":"

return this connection to the pool managed by the database.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection.cr#L77","def":{"name":"release","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@context.release(self)"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionContext","path":"DB/ConnectionContext.html","kind":"module","full_name":"DB::ConnectionContext","name":"ConnectionContext","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/connection_context.cr","line_number":2,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Database","kind":"class","full_name":"DB::Database","name":"Database"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"discard(connection:Connection)-instance-method","html_id":"discard(connection:Connection)-instance-method","name":"discard","doc":"Indicates that the *connection* was permanently closed\nand should not be used in the future.","summary":"

Indicates that the connection was permanently closed and should not be used in the future.

","abstract":true,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"args_string":"(connection : Connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr#L11","def":{"name":"discard","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":""}},{"id":"prepared_statements?:Bool-instance-method","html_id":"prepared_statements?:Bool-instance-method","name":"prepared_statements?","doc":"Return whether the statements should be prepared by default","summary":"

Return whether the statements should be prepared by default

","abstract":true,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr#L7","def":{"name":"prepared_statements?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":""}},{"id":"release(connection:Connection)-instance-method","html_id":"release(connection:Connection)-instance-method","name":"release","doc":"Indicates that the *connection* is no longer needed\nand can be reused in the future.","summary":"

Indicates that the connection is no longer needed and can be reused in the future.

","abstract":true,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"args_string":"(connection : Connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr#L15","def":{"name":"release","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":""}},{"id":"uri:URI-instance-method","html_id":"uri:URI-instance-method","name":"uri","doc":"Returns the uri with the connection settings to the database","summary":"

Returns the uri with the connection settings to the database

","abstract":true,"args":[],"args_string":" : URI","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/connection_context.cr#L4","def":{"name":"uri","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"URI","visibility":"Public","body":""}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionLost","path":"DB/ConnectionLost.html","kind":"class","full_name":"DB::ConnectionLost","name":"ConnectionLost","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":17,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Raised when an established connection is lost\nprobably due to socket/network issues.\nIt is used by the connection pool retry logic.","summary":"

Raised when an established connection is lost probably due to socket/network issues.

","class_methods":[],"constructors":[{"id":"new(connection)-class-method","html_id":"new(connection)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":""}],"args_string":"(connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr#L20","def":{"name":"new","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(connection)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"connection:Connection-instance-method","html_id":"connection:Connection-instance-method","name":"connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr#L20","def":{"name":"connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":"@connection"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionRefused","path":"DB/ConnectionRefused.html","kind":"class","full_name":"DB::ConnectionRefused","name":"ConnectionRefused","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":27,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Raised when a connection is unable to be established\nprobably due to socket/network or configuration issues.\nIt is used by the connection pool retry logic.","summary":"

Raised when a connection is unable to be established probably due to socket/network or configuration issues.

","class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Database","path":"DB/Database.html","kind":"class","full_name":"DB::Database","name":"Database","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionContext","kind":"module","full_name":"DB::ConnectionContext","name":"ConnectionContext"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods","name":"SessionMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/database.cr","line_number":30,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionContext","kind":"module","full_name":"DB::ConnectionContext","name":"ConnectionContext"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods","name":"SessionMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Acts as an entry point for database access.\nConnections are managed by a pool.\nUse `DB#open` to create a `Database` instance.\n\nRefer to `QueryMethods` and `SessionMethods` for documentation about querying the database.\n\n## Database URI\n\nConnection parameters are configured in a URI. The format is specified by the individual\ndatabase drivers. See the [reference book](https://crystal-lang.org/reference/database/) for examples.\n\nThe connection pool can be configured from URI parameters:\n\n - `initial_pool_size` (default 1)\n - `max_pool_size` (default 0 = unlimited)\n - `max_idle_pool_size` (default 1)\n - `checkout_timeout` (default 5.0)\n - `retry_attempts` (default 1)\n - `retry_delay` (in seconds, default 1.0)\n\nWhen querying a database, prepared statements are used by default.\nThis can be changed from the `prepared_statements` URI parameter:\n\n - `prepared_statements` (true, or false, default true)\n","summary":"

Acts as an entry point for database access.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"checkout-instance-method","html_id":"checkout-instance-method","name":"checkout","doc":"returns a connection from the pool\nthe returned connection must be returned\nto the pool by explictly calling `Connection#release`","summary":"

returns a connection from the pool the returned connection must be returned to the pool by explictly calling Connection#release

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L123","def":{"name":"checkout","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"connection = @pool.checkout\nconnection.auto_release = false\nconnection\n"}},{"id":"close-instance-method","html_id":"close-instance-method","name":"close","doc":"Closes all connection to the database.","summary":"

Closes all connection to the database.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L71","def":{"name":"close","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@statements_cache.each_value(&.close)\n@statements_cache.clear\n@pool.close\n"}},{"id":"prepared_statements?:Bool-instance-method","html_id":"prepared_statements?:Bool-instance-method","name":"prepared_statements?","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L44","def":{"name":"prepared_statements?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":"@prepared_statements"}},{"id":"setup_connection(&proc:Connection->Nil)-instance-method","html_id":"setup_connection(&proc:Connection->Nil)-instance-method","name":"setup_connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&proc : Connection -> Nil)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L63","def":{"name":"setup_connection","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":{"name":"proc","doc":null,"default_value":"","external_name":"proc","restriction":"(Connection -> Nil)"},"return_type":"","visibility":"Public","body":"@setup_connection = proc\n@pool.each_resource do |conn|\n @setup_connection.call(conn)\nend\n"}},{"id":"transaction(&block)-instance-method","html_id":"transaction(&block)-instance-method","name":"transaction","doc":"yields a `Transaction` from a connection of the pool\nRefer to `BeginTransaction#transaction` for documentation.","summary":"

yields a Transaction from a connection of the pool Refer to BeginTransaction#transaction for documentation.

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L131","def":{"name":"transaction","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"using_connection do |cnn|\n cnn.transaction do |tx|\n yield tx\n end\nend"}},{"id":"uri:URI-instance-method","html_id":"uri:URI-instance-method","name":"uri","doc":"Returns the uri with the connection settings to the database","summary":"

Returns the uri with the connection settings to the database

","abstract":false,"args":[],"args_string":" : URI","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L42","def":{"name":"uri","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"URI","visibility":"Public","body":"@uri"}},{"id":"using_connection(&block)-instance-method","html_id":"using_connection(&block)-instance-method","name":"using_connection","doc":"yields a connection from the pool\nthe connection is returned to the pool\nwhen the block ends","summary":"

yields a connection from the pool the connection is returned to the pool when the block ends

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/database.cr#L111","def":{"name":"using_connection","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"connection = self.checkout\nbegin\n yield connection\nensure\n connection.release\nend\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","path":"DB/Disposable.html","kind":"module","full_name":"DB::Disposable","name":"Disposable","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/disposable.cr","line_number":3,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/disposable.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Connection","kind":"class","full_name":"DB::Connection","name":"Connection"},{"html_id":"github.com/crystal-lang/crystal-db/DB/ResultSet","kind":"class","full_name":"DB::ResultSet","name":"ResultSet"},{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Generic module to encapsulate disposable db resources.","summary":"

Generic module to encapsulate disposable db resources.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"close-instance-method","html_id":"close-instance-method","name":"close","doc":"Closes this object.","summary":"

Closes this object.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/disposable.cr#L9","def":{"name":"close","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"if @closed\n return\nend\ndo_close\n@closed = true\n"}},{"id":"closed?-instance-method","html_id":"closed?-instance-method","name":"closed?","doc":"Returns `true` if this object is closed. See `#close`.","summary":"

Returns true if this object is closed.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/disposable.cr#L16","def":{"name":"closed?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@closed"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Driver","path":"DB/Driver.html","kind":"class","full_name":"DB::Driver","name":"Driver","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/driver.cr","line_number":28,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/driver.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Database driver implementors must subclass `Driver`,\nregister with a driver_name using `DB#register_driver` and\noverride the factory method `#build_connection`.\n\n```\nrequire \"db\"\n\nclass FakeDriver < DB::Driver\n def build_connection(context : DB::ConnectionContext)\n FakeConnection.new context\n end\nend\n\nDB.register_driver \"fake\", FakeDriver\n```\n\nAccess to this fake datbase will be available with\n\n```\nDB.open \"fake://...\" do |db|\n # ... use db ...\nend\n```\n\nRefer to `Connection`, `Statement` and `ResultSet` for further\ndriver implementation instructions.","summary":"

Database driver implementors must subclass Driver, register with a driver_name using DB#register_driver and override the factory method #build_connection.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"build_connection(context:ConnectionContext):Connection-instance-method","html_id":"build_connection(context:ConnectionContext):Connection-instance-method","name":"build_connection","doc":null,"summary":null,"abstract":true,"args":[{"name":"context","doc":null,"default_value":"","external_name":"context","restriction":"ConnectionContext"}],"args_string":"(context : ConnectionContext) : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/driver.cr#L29","def":{"name":"build_connection","args":[{"name":"context","doc":null,"default_value":"","external_name":"context","restriction":"ConnectionContext"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":""}},{"id":"connection_pool_options(params:HTTP::Params)-instance-method","html_id":"connection_pool_options(params:HTTP::Params)-instance-method","name":"connection_pool_options","doc":null,"summary":null,"abstract":false,"args":[{"name":"params","doc":null,"default_value":"","external_name":"params","restriction":"HTTP::Params"}],"args_string":"(params : HTTP::Params)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/driver.cr#L31","def":{"name":"connection_pool_options","args":[{"name":"params","doc":null,"default_value":"","external_name":"params","restriction":"HTTP::Params"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"{initial_pool_size: (params.fetch(\"initial_pool_size\", 1)).to_i, max_pool_size: (params.fetch(\"max_pool_size\", 0)).to_i, max_idle_pool_size: (params.fetch(\"max_idle_pool_size\", 1)).to_i, checkout_timeout: (params.fetch(\"checkout_timeout\", 5.0)).to_f, retry_attempts: (params.fetch(\"retry_attempts\", 1)).to_i, retry_delay: (params.fetch(\"retry_delay\", 1.0)).to_f}"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/DriverSpecs","path":"DB/DriverSpecs.html","kind":"class","full_name":"DB::DriverSpecs(DBAnyType)","name":"DriverSpecs","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"spec.cr","line_number":51,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Helper class to ensure behaviour of custom drivers\n\n```\nrequire \"db/spec\"\n\nDB::DriverSpecs(DB::Any).run do\n # How to connect to database\n connection_string \"scheme://database_url\"\n\n # Clean up database if needed using before/after callbacks\n before do\n # ...\n end\n\n after do\n # ...\n end\n\n # Sample values that will be stored, retrieved across many specs\n sample_value \"hello\", \"varchar(25)\", \"'hello'\"\n\n it \"custom spec with a db initialized\" do |db|\n # assert something using *db*\n end\n\n # Configure the appropiate syntax for different commands needed to run the specs\n binding_syntax do |index|\n \"?\"\n end\n\n create_table_1column_syntax do |table_name, col1|\n \"create table #{table_name} (#{col1.name} #{col1.sql_type} #{col1.null ? \"NULL\" : \"NOT NULL\"})\"\n end\nend\n```\n\nThe following methods needs to be called to configure the appropiate syntax\nfor different commands and allow all the specs to run: `binding_syntax`, `create_table_1column_syntax`,\n`create_table_2columns_syntax`, `select_1column_syntax`, `select_2columns_syntax`, `select_count_syntax`,\n`select_scalar_syntax`, `insert_1column_syntax`, `insert_2columns_syntax`, `drop_table_if_exists_syntax`.\n","summary":"

Helper class to ensure behaviour of custom drivers

","class_methods":[{"id":"run(description="asadb",&block)-class-method","html_id":"run(description=&quot;asadb&quot;,&block)-class-method","name":"run","doc":null,"summary":null,"abstract":false,"args":[{"name":"description","doc":null,"default_value":"\"as a db\"","external_name":"description","restriction":""}],"args_string":"(description = "as a db", &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L469","def":{"name":"run","args":[{"name":"description","doc":null,"default_value":"\"as a db\"","external_name":"description","restriction":""}],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"ctx = self.new\nwith ctx yield\ndescribe(description) do\n ctx.include_shared_specs\n ctx.its.each do |db_it|\n case db_it.prepared\n when :default\n it(db_it.description, db_it.file, db_it.line, db_it.end_line) do\n ctx.with_db do |db|\n db_it.block.call(db)\n nil\n end\n end\n when :both\n values = [] of Bool\n if ctx.support_prepared\n values << true\n end\n if ctx.support_unprepared\n values << false\n end\n case values.size\n when 0\n raise(\"Neither prepared non unprepared statements allowed\")\n when 1\n it(db_it.description, db_it.file, db_it.line, db_it.end_line) do\n ctx.with_db do |db|\n db_it.block.call(db)\n nil\n end\n end\n else\n values.each do |prepared_statements|\n it(\"#{db_it.description} (prepared_statements=#{prepared_statements})\", db_it.file, db_it.line, db_it.end_line) do\n ctx.with_db(\"prepared_statements=#{prepared_statements}\") do |db|\n db_it.block.call(db)\n nil\n end\n end\n end\n end\n end\n end\nend\n"}}],"constructors":[],"instance_methods":[{"id":"after(&after:->Nil)-instance-method","html_id":"after(&after:->Nil)-instance-method","name":"after","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&after : -> Nil)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L63","def":{"name":"after","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"after","doc":null,"default_value":"","external_name":"after","restriction":"(-> Nil)"},"return_type":"","visibility":"Public","body":"@after = after"}},{"id":"before(&before:->Nil)-instance-method","html_id":"before(&before:->Nil)-instance-method","name":"before","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&before : -> Nil)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L60","def":{"name":"before","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"before","doc":null,"default_value":"","external_name":"before","restriction":"(-> Nil)"},"return_type":"","visibility":"Public","body":"@before = before"}},{"id":"binding_syntax(&binding_syntax:Proc(Int32,String))-instance-method","html_id":"binding_syntax(&binding_syntax:Proc(Int32,String))-instance-method","name":"binding_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&binding_syntax : Proc(Int32, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L110","def":{"name":"binding_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"binding_syntax","doc":null,"default_value":"","external_name":"binding_syntax","restriction":"Proc(Int32, String)"},"return_type":"","visibility":"Public","body":"@binding_syntax = binding_syntax"}},{"id":"connection_string(connection_string:String)-instance-method","html_id":"connection_string(connection_string:String)-instance-method","name":"connection_string","doc":null,"summary":null,"abstract":false,"args":[{"name":"connection_string","doc":null,"default_value":"","external_name":"connection_string","restriction":"String"}],"args_string":"(connection_string : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L109","def":{"name":"connection_string","args":[{"name":"connection_string","doc":null,"default_value":"","external_name":"connection_string","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection_string = connection_string"}},{"id":"create_table_1column_syntax(&create_table_1column_syntax:Proc(String,ColumnDef,String))-instance-method","html_id":"create_table_1column_syntax(&create_table_1column_syntax:Proc(String,ColumnDef,String))-instance-method","name":"create_table_1column_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&create_table_1column_syntax : Proc(String, ColumnDef, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L112","def":{"name":"create_table_1column_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"create_table_1column_syntax","doc":null,"default_value":"","external_name":"create_table_1column_syntax","restriction":"Proc(String, ColumnDef, String)"},"return_type":"","visibility":"Public","body":"@create_table_1column_syntax = create_table_1column_syntax"}},{"id":"create_table_2columns_syntax(&create_table_2columns_syntax:Proc(String,ColumnDef,ColumnDef,String))-instance-method","html_id":"create_table_2columns_syntax(&create_table_2columns_syntax:Proc(String,ColumnDef,ColumnDef,String))-instance-method","name":"create_table_2columns_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&create_table_2columns_syntax : Proc(String, ColumnDef, ColumnDef, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L113","def":{"name":"create_table_2columns_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"create_table_2columns_syntax","doc":null,"default_value":"","external_name":"create_table_2columns_syntax","restriction":"Proc(String, ColumnDef, ColumnDef, String)"},"return_type":"","visibility":"Public","body":"@create_table_2columns_syntax = create_table_2columns_syntax"}},{"id":"drop_table_if_exists_syntax(&drop_table_if_exists_syntax:Proc(String,String))-instance-method","html_id":"drop_table_if_exists_syntax(&drop_table_if_exists_syntax:Proc(String,String))-instance-method","name":"drop_table_if_exists_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&drop_table_if_exists_syntax : Proc(String, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L119","def":{"name":"drop_table_if_exists_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"drop_table_if_exists_syntax","doc":null,"default_value":"","external_name":"drop_table_if_exists_syntax","restriction":"Proc(String, String)"},"return_type":"","visibility":"Public","body":"@drop_table_if_exists_syntax = drop_table_if_exists_syntax"}},{"id":"encode_null(encode_null:String)-instance-method","html_id":"encode_null(encode_null:String)-instance-method","name":"encode_null","doc":null,"summary":null,"abstract":false,"args":[{"name":"encode_null","doc":null,"default_value":"","external_name":"encode_null","restriction":"String"}],"args_string":"(encode_null : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L66","def":{"name":"encode_null","args":[{"name":"encode_null","doc":null,"default_value":"","external_name":"encode_null","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@encode_null = encode_null"}},{"id":"insert_1column_syntax(&insert_1column_syntax:Proc(String,ColumnDef,String,String))-instance-method","html_id":"insert_1column_syntax(&insert_1column_syntax:Proc(String,ColumnDef,String,String))-instance-method","name":"insert_1column_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&insert_1column_syntax : Proc(String, ColumnDef, String, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L114","def":{"name":"insert_1column_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"insert_1column_syntax","doc":null,"default_value":"","external_name":"insert_1column_syntax","restriction":"Proc(String, ColumnDef, String, String)"},"return_type":"","visibility":"Public","body":"@insert_1column_syntax = insert_1column_syntax"}},{"id":"insert_2columns_syntax(&insert_2columns_syntax:Proc(String,ColumnDef,String,ColumnDef,String,String))-instance-method","html_id":"insert_2columns_syntax(&insert_2columns_syntax:Proc(String,ColumnDef,String,ColumnDef,String,String))-instance-method","name":"insert_2columns_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&insert_2columns_syntax : Proc(String, ColumnDef, String, ColumnDef, String, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L115","def":{"name":"insert_2columns_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"insert_2columns_syntax","doc":null,"default_value":"","external_name":"insert_2columns_syntax","restriction":"Proc(String, ColumnDef, String, ColumnDef, String, String)"},"return_type":"","visibility":"Public","body":"@insert_2columns_syntax = insert_2columns_syntax"}},{"id":"it(description="assert",prepared=:default,file=__FILE__,line=__LINE__,end_line=__END_LINE__,&block:DB::Database->)-instance-method","html_id":"it(description=&quot;assert&quot;,prepared=:default,file=__FILE__,line=__LINE__,end_line=__END_LINE__,&block:DB::Database->)-instance-method","name":"it","doc":null,"summary":null,"abstract":false,"args":[{"name":"description","doc":null,"default_value":"\"assert\"","external_name":"description","restriction":""},{"name":"prepared","doc":null,"default_value":":default","external_name":"prepared","restriction":""},{"name":"file","doc":null,"default_value":"__FILE__","external_name":"file","restriction":""},{"name":"line","doc":null,"default_value":"__LINE__","external_name":"line","restriction":""},{"name":"end_line","doc":null,"default_value":"__END_LINE__","external_name":"end_line","restriction":""}],"args_string":"(description = "assert", prepared = :default, file = __FILE__, line = __LINE__, end_line = __END_LINE__, &block : DB::Database -> )","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L125","def":{"name":"it","args":[{"name":"description","doc":null,"default_value":"\"assert\"","external_name":"description","restriction":""},{"name":"prepared","doc":null,"default_value":":default","external_name":"prepared","restriction":""},{"name":"file","doc":null,"default_value":"__FILE__","external_name":"file","restriction":""},{"name":"line","doc":null,"default_value":"__LINE__","external_name":"line","restriction":""},{"name":"end_line","doc":null,"default_value":"__END_LINE__","external_name":"end_line","restriction":""}],"double_splat":null,"splat_index":null,"yields":1,"block_arg":{"name":"block","doc":null,"default_value":"","external_name":"block","restriction":"(DB::Database -> )"},"return_type":"","visibility":"Public","body":"if Spec.matches?(description, file, line, end_line)\nelse\n return\nend\n@its << (SpecIt.new(description, prepared, file, line, end_line, block))\n"}},{"id":"its-instance-method","html_id":"its-instance-method","name":"its","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L125","def":{"name":"its","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@its"}},{"id":"sample_value(value,sql_type,value_encoded,*,type_safe_value=true)-instance-method","html_id":"sample_value(value,sql_type,value_encoded,*,type_safe_value=true)-instance-method","name":"sample_value","doc":"Use *value* as sample value that should be stored in columns of type *sql_type*.\n*value_encoded* is driver specific expression that should generate that value in the database.\n*type_safe_value* indicates whether *value_encoded* is expected to generate the *value* even without\nbeen stored in a table (default `true`).","summary":"

Use value as sample value that should be stored in columns of type sql_type.

","abstract":false,"args":[{"name":"value","doc":null,"default_value":"","external_name":"value","restriction":""},{"name":"sql_type","doc":null,"default_value":"","external_name":"sql_type","restriction":""},{"name":"value_encoded","doc":null,"default_value":"","external_name":"value_encoded","restriction":""},{"name":"","doc":null,"default_value":"","external_name":"","restriction":""},{"name":"type_safe_value","doc":null,"default_value":"true","external_name":"type_safe_value","restriction":""}],"args_string":"(value, sql_type, value_encoded, *, type_safe_value = true)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L139","def":{"name":"sample_value","args":[{"name":"value","doc":null,"default_value":"","external_name":"value","restriction":""},{"name":"sql_type","doc":null,"default_value":"","external_name":"sql_type","restriction":""},{"name":"value_encoded","doc":null,"default_value":"","external_name":"value_encoded","restriction":""},{"name":"","doc":null,"default_value":"","external_name":"","restriction":""},{"name":"type_safe_value","doc":null,"default_value":"true","external_name":"type_safe_value","restriction":""}],"double_splat":null,"splat_index":3,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@values << (ValueDef(DBAnyType).new(value, sql_type, value_encoded))\nit(\"select nil as (#{typeof(value)} | Nil)\", prepared: :both) do |db|\n db.query(select_scalar(encode_null, nil)) do |rs|\n assert_single_read(rs, typeof(value || nil), nil)\n end\nend\nvalue_desc = value.to_s\nif value_desc.size > 25\n value_desc = \"#{value_desc[0..25]}...(#{value_desc.size})\"\nend\nvalue_desc = \"#{value_desc} as #{sql_type}\"\nif type_safe_value\n it(\"executes with bind #{value_desc}\") do |db|\n (db.scalar(select_scalar(param(1), sql_type), value)).should(eq(value))\n end\n it(\"executes with bind #{value_desc} as array\") do |db|\n (db.scalar(select_scalar(param(1), sql_type), [value])).should(eq(value))\n end\n it(\"select #{value_desc} as literal\") do |db|\n (db.scalar(select_scalar(value_encoded, sql_type))).should(eq(value))\n db.query(select_scalar(value_encoded, sql_type)) do |rs|\n assert_single_read(rs, typeof(value), value)\n end\n end\nend\nit(\"insert/get value #{value_desc} from table\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type)))\n db.exec(sql_insert_table1(c1, value_encoded))\n (db.query_one(sql_select_table1(c1), as: typeof(value))).should(eq(value))\nend\nit(\"insert/get value #{value_desc} from table as nillable\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type)))\n db.exec(sql_insert_table1(c1, value_encoded))\n (db.query_one(sql_select_table1(c1), as: ::Union(typeof(value) | Nil))).should(eq(value))\nend\nit(\"insert/get value nil from table as nillable #{sql_type}\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type, null: true)))\n db.exec(sql_insert_table1(c1, encode_null))\n (db.query_one(sql_select_table1(c1), as: ::Union(typeof(value) | Nil))).should(eq(nil))\nend\nit(\"insert/get value #{value_desc} from table with binding\") do |db|\n db.exec(sql_create_table_table2(c1 = col1(sql_type_for(String)), c2 = col2(sql_type)))\n db.exec(sql_insert_table2(c1, param(1), c2, param(2)), value_for(String), value)\n (db.query_one(sql_select_table2(c2), as: typeof(value))).should(eq(value))\nend\nit(\"insert/get value #{value_desc} from table as nillable with binding\") do |db|\n db.exec(sql_create_table_table2(c1 = col1(sql_type_for(String)), c2 = col2(sql_type)))\n db.exec(sql_insert_table2(c1, param(1), c2, param(2)), value_for(String), value)\n (db.query_one(sql_select_table2(c2), as: ::Union(typeof(value) | Nil))).should(eq(value))\nend\nit(\"insert/get value nil from table as nillable #{sql_type} with binding\") do |db|\n db.exec(sql_create_table_table2(c1 = col1(sql_type_for(String)), c2 = col2(sql_type, null: true)))\n db.exec(sql_insert_table2(c1, param(1), c2, param(2)), value_for(String), nil)\n (db.query_one(sql_select_table2(c2), as: ::Union(typeof(value) | Nil))).should(eq(nil))\nend\nit(\"can use read(#{typeof(value)}) with DB::ResultSet\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type)))\n db.exec(sql_insert_table1(c1, value_encoded))\n db.query(sql_select_table1(c1)) do |rs|\n assert_single_read(rs.as(DB::ResultSet), typeof(value), value)\n end\nend\nit(\"can use read(#{typeof(value)}?) with DB::ResultSet\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type)))\n db.exec(sql_insert_table1(c1, value_encoded))\n db.query(sql_select_table1(c1)) do |rs|\n assert_single_read(rs.as(DB::ResultSet), ::Union(typeof(value) | Nil), value)\n end\nend\nit(\"can use read(#{typeof(value)}?) with DB::ResultSet for nil\", prepared: :both) do |db|\n db.exec(sql_create_table_table1(c1 = col1(sql_type, null: true)))\n db.exec(sql_insert_table1(c1, encode_null))\n db.query(sql_select_table1(c1)) do |rs|\n assert_single_read(rs.as(DB::ResultSet), ::Union(typeof(value) | Nil), nil)\n end\nend\n"}},{"id":"select_1column_syntax(&select_1column_syntax:Proc(String,ColumnDef,String))-instance-method","html_id":"select_1column_syntax(&select_1column_syntax:Proc(String,ColumnDef,String))-instance-method","name":"select_1column_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&select_1column_syntax : Proc(String, ColumnDef, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L116","def":{"name":"select_1column_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"select_1column_syntax","doc":null,"default_value":"","external_name":"select_1column_syntax","restriction":"Proc(String, ColumnDef, String)"},"return_type":"","visibility":"Public","body":"@select_1column_syntax = select_1column_syntax"}},{"id":"select_2columns_syntax(&select_2columns_syntax:Proc(String,ColumnDef,ColumnDef,String))-instance-method","html_id":"select_2columns_syntax(&select_2columns_syntax:Proc(String,ColumnDef,ColumnDef,String))-instance-method","name":"select_2columns_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&select_2columns_syntax : Proc(String, ColumnDef, ColumnDef, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L117","def":{"name":"select_2columns_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"select_2columns_syntax","doc":null,"default_value":"","external_name":"select_2columns_syntax","restriction":"Proc(String, ColumnDef, ColumnDef, String)"},"return_type":"","visibility":"Public","body":"@select_2columns_syntax = select_2columns_syntax"}},{"id":"select_count_syntax(&select_count_syntax:Proc(String,String))-instance-method","html_id":"select_count_syntax(&select_count_syntax:Proc(String,String))-instance-method","name":"select_count_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&select_count_syntax : Proc(String, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L118","def":{"name":"select_count_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"select_count_syntax","doc":null,"default_value":"","external_name":"select_count_syntax","restriction":"Proc(String, String)"},"return_type":"","visibility":"Public","body":"@select_count_syntax = select_count_syntax"}},{"id":"select_scalar_syntax(&select_scalar_syntax:Proc(String,String?,String))-instance-method","html_id":"select_scalar_syntax(&select_scalar_syntax:Proc(String,String?,String))-instance-method","name":"select_scalar_syntax","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&select_scalar_syntax : Proc(String, String?, String))","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L111","def":{"name":"select_scalar_syntax","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"select_scalar_syntax","doc":null,"default_value":"","external_name":"select_scalar_syntax","restriction":"Proc(String, String | ::Nil, String)"},"return_type":"","visibility":"Public","body":"@select_scalar_syntax = select_scalar_syntax"}},{"id":"support_prepared(support_prepared:Bool)-instance-method","html_id":"support_prepared(support_prepared:Bool)-instance-method","name":"support_prepared","doc":"Allow specs that uses prepared statements (default `true`)","summary":"

Allow specs that uses prepared statements (default true)

","abstract":false,"args":[{"name":"support_prepared","doc":null,"default_value":"","external_name":"support_prepared","restriction":"Bool"}],"args_string":"(support_prepared : Bool)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L70","def":{"name":"support_prepared","args":[{"name":"support_prepared","doc":null,"default_value":"","external_name":"support_prepared","restriction":"Bool"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@support_prepared = support_prepared"}},{"id":"support_unprepared(support_unprepared:Bool)-instance-method","html_id":"support_unprepared(support_unprepared:Bool)-instance-method","name":"support_unprepared","doc":"Allow specs that uses unprepared statements (default `true`)","summary":"

Allow specs that uses unprepared statements (default true)

","abstract":false,"args":[{"name":"support_unprepared","doc":null,"default_value":"","external_name":"support_unprepared","restriction":"Bool"}],"args_string":"(support_unprepared : Bool)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L79","def":{"name":"support_unprepared","args":[{"name":"support_unprepared","doc":null,"default_value":"","external_name":"support_unprepared","restriction":"Bool"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@support_unprepared = support_unprepared"}}],"macros":[],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/DriverSpecs/ColumnDef","path":"DB/DriverSpecs/ColumnDef.html","kind":"struct","full_name":"DB::DriverSpecs::ColumnDef","name":"ColumnDef","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},{"html_id":"github.com/crystal-lang/crystal-db/Value","kind":"struct","full_name":"Value","name":"Value"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"spec.cr","line_number":52,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB/DriverSpecs","kind":"class","full_name":"DB::DriverSpecs(DBAnyType)","name":"DriverSpecs"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(name:String,sql_type:String,null:Bool)-class-method","html_id":"new(name:String,sql_type:String,null:Bool)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"name","doc":null,"default_value":"","external_name":"name","restriction":"String"},{"name":"sql_type","doc":null,"default_value":"","external_name":"sql_type","restriction":"String"},{"name":"null","doc":null,"default_value":"","external_name":"null","restriction":"Bool"}],"args_string":"(name : String, sql_type : String, null : Bool)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L52","def":{"name":"new","args":[{"name":"name","doc":null,"default_value":"","external_name":"name","restriction":"String"},{"name":"sql_type","doc":null,"default_value":"","external_name":"sql_type","restriction":"String"},{"name":"null","doc":null,"default_value":"","external_name":"null","restriction":"Bool"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(name, sql_type, null)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"clone-instance-method","html_id":"clone-instance-method","name":"clone","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L52","def":{"name":"clone","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"self.class.new(@name.clone, @sql_type.clone, @null.clone)"}},{"id":"copy_with(name_name=@name,sql_type_sql_type=@sql_type,null_null=@null)-instance-method","html_id":"copy_with(name_name=@name,sql_type_sql_type=@sql_type,null_null=@null)-instance-method","name":"copy_with","doc":null,"summary":null,"abstract":false,"args":[{"name":"_name","doc":null,"default_value":"@name","external_name":"name","restriction":""},{"name":"_sql_type","doc":null,"default_value":"@sql_type","external_name":"sql_type","restriction":""},{"name":"_null","doc":null,"default_value":"@null","external_name":"null","restriction":""}],"args_string":"(name _name = @name, sql_type _sql_type = @sql_type, null _null = @null)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/spec.cr#L52","def":{"name":"copy_with","args":[{"name":"_name","doc":null,"default_value":"@name","external_name":"name","restriction":""},{"name":"_sql_type","doc":null,"default_value":"@sql_type","external_name":"sql_type","restriction":""},{"name":"_null","doc":null,"default_value":"@null","external_name":"null","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"self.class.new(_name, _sql_type, _null)"}},{"id":"name:String-instance-method","html_id":"name:String-instance-method","name":"name","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : String","source_link":null,"def":{"name":"name","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"String","visibility":"Public","body":"@name"}},{"id":"null:Bool-instance-method","html_id":"null:Bool-instance-method","name":"null","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Bool","source_link":null,"def":{"name":"null","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":"@null"}},{"id":"sql_type:String-instance-method","html_id":"sql_type:String-instance-method","name":"sql_type","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : String","source_link":null,"def":{"name":"sql_type","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"String","visibility":"Public","body":"@sql_type"}}],"macros":[],"types":[]}]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","path":"DB/Error.html","kind":"class","full_name":"DB::Error","name":"Error","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":2,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionLost","kind":"class","full_name":"DB::ConnectionLost","name":"ConnectionLost"},{"html_id":"github.com/crystal-lang/crystal-db/DB/ConnectionRefused","kind":"class","full_name":"DB::ConnectionRefused","name":"ConnectionRefused"},{"html_id":"github.com/crystal-lang/crystal-db/DB/MappingException","kind":"class","full_name":"DB::MappingException","name":"MappingException"},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolRetryAttemptsExceeded","kind":"class","full_name":"DB::PoolRetryAttemptsExceeded","name":"PoolRetryAttemptsExceeded"},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolTimeout","kind":"class","full_name":"DB::PoolTimeout","name":"PoolTimeout"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Rollback","kind":"class","full_name":"DB::Rollback","name":"Rollback"}],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ExecResult","path":"DB/ExecResult.html","kind":"struct","full_name":"DB::ExecResult","name":"ExecResult","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},{"html_id":"github.com/crystal-lang/crystal-db/Value","kind":"struct","full_name":"Value","name":"Value"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db.cr","line_number":89,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Result of a `#exec` statement.","summary":"

Result of a #exec statement.

","class_methods":[],"constructors":[{"id":"new(rows_affected:Int64,last_insert_id:Int64)-class-method","html_id":"new(rows_affected:Int64,last_insert_id:Int64)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"rows_affected","doc":null,"default_value":"","external_name":"rows_affected","restriction":"Int64"},{"name":"last_insert_id","doc":null,"default_value":"","external_name":"last_insert_id","restriction":"Int64"}],"args_string":"(rows_affected : Int64, last_insert_id : Int64)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L89","def":{"name":"new","args":[{"name":"rows_affected","doc":null,"default_value":"","external_name":"rows_affected","restriction":"Int64"},{"name":"last_insert_id","doc":null,"default_value":"","external_name":"last_insert_id","restriction":"Int64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(rows_affected, last_insert_id)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"clone-instance-method","html_id":"clone-instance-method","name":"clone","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L89","def":{"name":"clone","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"self.class.new(@rows_affected.clone, @last_insert_id.clone)"}},{"id":"copy_with(rows_affected_rows_affected=@rows_affected,last_insert_id_last_insert_id=@last_insert_id)-instance-method","html_id":"copy_with(rows_affected_rows_affected=@rows_affected,last_insert_id_last_insert_id=@last_insert_id)-instance-method","name":"copy_with","doc":null,"summary":null,"abstract":false,"args":[{"name":"_rows_affected","doc":null,"default_value":"@rows_affected","external_name":"rows_affected","restriction":""},{"name":"_last_insert_id","doc":null,"default_value":"@last_insert_id","external_name":"last_insert_id","restriction":""}],"args_string":"(rows_affected _rows_affected = @rows_affected, last_insert_id _last_insert_id = @last_insert_id)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db.cr#L89","def":{"name":"copy_with","args":[{"name":"_rows_affected","doc":null,"default_value":"@rows_affected","external_name":"rows_affected","restriction":""},{"name":"_last_insert_id","doc":null,"default_value":"@last_insert_id","external_name":"last_insert_id","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"self.class.new(_rows_affected, _last_insert_id)"}},{"id":"last_insert_id:Int64-instance-method","html_id":"last_insert_id:Int64-instance-method","name":"last_insert_id","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Int64","source_link":null,"def":{"name":"last_insert_id","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int64","visibility":"Public","body":"@last_insert_id"}},{"id":"rows_affected:Int64-instance-method","html_id":"rows_affected:Int64-instance-method","name":"rows_affected","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Int64","source_link":null,"def":{"name":"rows_affected","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int64","visibility":"Public","body":"@rows_affected"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Mappable","path":"DB/Mappable.html","kind":"module","full_name":"DB::Mappable","name":"Mappable","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/mapping.cr","line_number":3,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/mapping.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Empty module used for marking a class as supporting DB:Mapping","summary":"

Empty module used for marking a class as supporting DB:Mapping

","class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/MappingException","path":"DB/MappingException.html","kind":"class","full_name":"DB::MappingException","name":"MappingException","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":5,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Pool","path":"DB/Pool.html","kind":"class","full_name":"DB::Pool(T)","name":"Pool","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool.cr","line_number":4,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(initial_pool_size=1,max_pool_size=0,max_idle_pool_size=1,checkout_timeout=5.0,retry_attempts=1,retry_delay=0.2,&factory:->T)-class-method","html_id":"new(initial_pool_size=1,max_pool_size=0,max_idle_pool_size=1,checkout_timeout=5.0,retry_attempts=1,retry_delay=0.2,&factory:->T)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"initial_pool_size","doc":null,"default_value":"1","external_name":"initial_pool_size","restriction":""},{"name":"max_pool_size","doc":null,"default_value":"0","external_name":"max_pool_size","restriction":""},{"name":"max_idle_pool_size","doc":null,"default_value":"1","external_name":"max_idle_pool_size","restriction":""},{"name":"checkout_timeout","doc":null,"default_value":"5.0","external_name":"checkout_timeout","restriction":""},{"name":"retry_attempts","doc":null,"default_value":"1","external_name":"retry_attempts","restriction":""},{"name":"retry_delay","doc":null,"default_value":"0.2","external_name":"retry_delay","restriction":""}],"args_string":"(initial_pool_size = 1, max_pool_size = 0, max_idle_pool_size = 1, checkout_timeout = 5.0, retry_attempts = 1, retry_delay = 0.2, &factory : -> T)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L15","def":{"name":"new","args":[{"name":"initial_pool_size","doc":null,"default_value":"1","external_name":"initial_pool_size","restriction":""},{"name":"max_pool_size","doc":null,"default_value":"0","external_name":"max_pool_size","restriction":""},{"name":"max_idle_pool_size","doc":null,"default_value":"1","external_name":"max_idle_pool_size","restriction":""},{"name":"checkout_timeout","doc":null,"default_value":"5.0","external_name":"checkout_timeout","restriction":""},{"name":"retry_attempts","doc":null,"default_value":"1","external_name":"retry_attempts","restriction":""},{"name":"retry_delay","doc":null,"default_value":"0.2","external_name":"retry_delay","restriction":""}],"double_splat":null,"splat_index":null,"yields":0,"block_arg":{"name":"factory","doc":null,"default_value":"","external_name":"factory","restriction":"(-> T)"},"return_type":"","visibility":"Public","body":"_ = Pool(T).allocate\n_.initialize(initial_pool_size, max_pool_size, max_idle_pool_size, checkout_timeout, retry_attempts, retry_delay, &factory) do\n yield\nend\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"checkout:T-instance-method","html_id":"checkout:T-instance-method","name":"checkout","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : T","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L31","def":{"name":"checkout","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"T","visibility":"Public","body":"resource = if @available.empty?\n if can_increase_pool\n build_resource\n else\n wait_for_available\n pick_available\n end\nelse\n pick_available\nend\n@available.delete(resource)\nresource.before_checkout\nresource\n"}},{"id":"checkout_some(candidates:Enumerable(WeakRef(T))):::Tuple(T,Bool)-instance-method","html_id":"checkout_some(candidates:Enumerable(WeakRef(T))):::Tuple(T,Bool)-instance-method","name":"checkout_some","doc":"```\nselected, is_candidate = pool.checkout_some(candidates)\n```\n`selected` be a resource from the `candidates` list and `is_candidate` == `true`\nor `selected` will be a new resource and `is_candidate` == `false`","summary":"

` selected, is_candidate = pool.checkout_some(candidates) ` selected be a resource from the candidates list and is_candidate == true or selected will be a new resource and is_candidate == false

","abstract":false,"args":[{"name":"candidates","doc":null,"default_value":"","external_name":"candidates","restriction":"Enumerable(WeakRef(T))"}],"args_string":"(candidates : Enumerable(WeakRef(T))) : ::Tuple(T, Bool)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L53","def":{"name":"checkout_some","args":[{"name":"candidates","doc":null,"default_value":"","external_name":"candidates","restriction":"Enumerable(WeakRef(T))"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"::Tuple(T, Bool)","visibility":"Public","body":"candidates.each do |ref|\n resource = ref.value\n if resource && (is_available?(resource))\n @available.delete(resource)\n resource.before_checkout\n return {resource, true}\n end\nend\nresource = checkout\n{resource, candidates.any? do |ref|\n ref.value == resource\nend}\n"}},{"id":"close:Nil-instance-method","html_id":"close:Nil-instance-method","name":"close","doc":"close all resources in the pool","summary":"

close all resources in the pool

","abstract":false,"args":[],"args_string":" : Nil","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L25","def":{"name":"close","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Nil","visibility":"Public","body":"@total.each(&.close)\n@total.clear\n@available.clear\n"}},{"id":"release(resource:T):Nil-instance-method","html_id":"release(resource:T):Nil-instance-method","name":"release","doc":null,"summary":null,"abstract":false,"args":[{"name":"resource","doc":null,"default_value":"","external_name":"resource","restriction":"T"}],"args_string":"(resource : T) : Nil","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L69","def":{"name":"release","args":[{"name":"resource","doc":null,"default_value":"","external_name":"resource","restriction":"T"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Nil","visibility":"Public","body":"if can_increase_idle_pool\n @available << resource\n resource.after_release\n if are_waiting_for_resource?\n @availability_channel.send(nil)\n end\nelse\n resource.close\n @total.delete(resource)\nend"}}],"macros":[],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Pool/TimeoutHelper","path":"DB/Pool/TimeoutHelper.html","kind":"class","full_name":"DB::Pool::TimeoutHelper","name":"TimeoutHelper","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool.cr","line_number":183,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB/Pool","kind":"class","full_name":"DB::Pool(T)","name":"Pool"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(timeout:Float64)-class-method","html_id":"new(timeout:Float64)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"timeout","doc":null,"default_value":"","external_name":"timeout","restriction":"Float64"}],"args_string":"(timeout : Float64)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L184","def":{"name":"new","args":[{"name":"timeout","doc":null,"default_value":"","external_name":"timeout","restriction":"Float64"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(timeout)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"cancel-instance-method","html_id":"cancel-instance-method","name":"cancel","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L202","def":{"name":"cancel","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@abort_timeout = true"}},{"id":"receive_select_action-instance-method","html_id":"receive_select_action-instance-method","name":"receive_select_action","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L189","def":{"name":"receive_select_action","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@timeout_channel.receive_select_action"}},{"id":"start-instance-method","html_id":"start-instance-method","name":"start","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool.cr#L193","def":{"name":"start","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"spawn do\n sleep(@timeout)\n if @abort_timeout\n else\n @timeout_channel.send(nil)\n end\nend"}}],"macros":[],"types":[]}]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolPreparedStatement","path":"DB/PoolPreparedStatement.html","kind":"class","full_name":"DB::PoolPreparedStatement","name":"PoolPreparedStatement","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool_prepared_statement.cr","line_number":7,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_prepared_statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Represents a statement to be executed in any of the connections\nof the pool. The statement is not be executed in a prepared fashion.\nThe execution of the statement is retried according to the pool configuration.\n\nSee `PoolStatement`","summary":"

Represents a statement to be executed in any of the connections of the pool.

","class_methods":[],"constructors":[{"id":"new(db:Database,query:String)-class-method","html_id":"new(db:Database,query:String)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"args_string":"(db : Database, query : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_prepared_statement.cr#L11","def":{"name":"new","args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(db, query)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolRetryAttemptsExceeded","path":"DB/PoolRetryAttemptsExceeded.html","kind":"class","full_name":"DB::PoolRetryAttemptsExceeded","name":"PoolRetryAttemptsExceeded","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":11,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","path":"DB/PoolStatement.html","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool_statement.cr","line_number":6,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"}],"extended_modules":[],"subclasses":[{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolPreparedStatement","kind":"class","full_name":"DB::PoolPreparedStatement","name":"PoolPreparedStatement"},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolUnpreparedStatement","kind":"class","full_name":"DB::PoolUnpreparedStatement","name":"PoolUnpreparedStatement"}],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"When a statement is to be executed in a DB that has a connection pool\na statement from the DB needs to be able to represent a statement in any\nof the connections of the pool. Otherwise the user will need to deal with\nactual connections in some point.","summary":"

When a statement is to be executed in a DB that has a connection pool a statement from the DB needs to be able to represent a statement in any of the connections of the pool.

","class_methods":[],"constructors":[{"id":"new(db:Database,query:String)-class-method","html_id":"new(db:Database,query:String)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"args_string":"(db : Database, query : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L9","def":{"name":"new","args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(db, query)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"exec(args:Array):ExecResult-instance-method","html_id":"exec(args:Array):ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L23","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":"statement_with_retry(&.exec(args))"}},{"id":"exec:ExecResult-instance-method","html_id":"exec:ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[],"args_string":" : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L13","def":{"name":"exec","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":"statement_with_retry(&.exec)"}},{"id":"exec(*args):ExecResult-instance-method","html_id":"exec(*args):ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args) : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L18","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":"statement_with_retry(&.exec(*args))"}},{"id":"query(args:Array):ResultSet-instance-method","html_id":"query(args:Array):ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L38","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":"statement_with_retry(&.query(args))"}},{"id":"query:ResultSet-instance-method","html_id":"query:ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[],"args_string":" : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L28","def":{"name":"query","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":"statement_with_retry(&.query)"}},{"id":"query(*args):ResultSet-instance-method","html_id":"query(*args):ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args) : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L33","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":"statement_with_retry(&.query(*args))"}},{"id":"scalar(*args)-instance-method","html_id":"scalar(*args)-instance-method","name":"scalar","doc":"See `QueryMethods#scalar`","summary":"

See QueryMethods#scalar

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_statement.cr#L43","def":{"name":"scalar","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"statement_with_retry(&.scalar(*args))"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolTimeout","path":"DB/PoolTimeout.html","kind":"class","full_name":"DB::PoolTimeout","name":"PoolTimeout","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":8,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolUnpreparedStatement","path":"DB/PoolUnpreparedStatement.html","kind":"class","full_name":"DB::PoolUnpreparedStatement","name":"PoolUnpreparedStatement","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/pool_unprepared_statement.cr","line_number":7,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_unprepared_statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Represents a statement to be executed in any of the connections\nof the pool. The statement is not be executed in a non prepared fashion.\nThe execution of the statement is retried according to the pool configuration.\n\nSee `PoolStatement`","summary":"

Represents a statement to be executed in any of the connections of the pool.

","class_methods":[],"constructors":[{"id":"new(db:Database,query:String)-class-method","html_id":"new(db:Database,query:String)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"args_string":"(db : Database, query : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/pool_unprepared_statement.cr#L8","def":{"name":"new","args":[{"name":"db","doc":null,"default_value":"","external_name":"db","restriction":"Database"},{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(db, query)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","path":"DB/QueryMethods.html","kind":"module","full_name":"DB::QueryMethods(Stmt)","name":"QueryMethods","abstract":false,"superclass":null,"ancestors":[],"locations":[{"filename":"db/query_methods.cr","line_number":20,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods(Session, Stmt)","name":"SessionMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods/PreparedQuery","kind":"struct","full_name":"DB::SessionMethods::PreparedQuery(Session, Stmt)","name":"PreparedQuery"},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods/UnpreparedQuery","kind":"struct","full_name":"DB::SessionMethods::UnpreparedQuery(Session, Stmt)","name":"UnpreparedQuery"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Methods to allow querying a database.\nAll methods accepts a `query : String` and a set arguments.\n\nThree kind of statements can be performed:\n 1. `#exec` waits no record response from the database. An `ExecResult` is returned.\n 2. `#scalar` reads a single value of the response. A union of possible values is returned.\n 3. `#query` returns a `ResultSet` that allows iteration over the rows in the response and column information.\n\nArguments can be passed by position\n\n```\ndb.query(\"SELECT name FROM ... WHERE age > ?\", age)\n```\n\nConvention of mapping how arguments are mapped to the query depends on each driver.\n\nIncluding `QueryMethods` requires a `build(query) : Statement` method that is not expected\nto be called directly.","summary":"

Methods to allow querying a database.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"exec(query,*args)-instance-method","html_id":"exec(query,*args)-instance-method","name":"exec","doc":"Performs the `query` and returns an `ExecResult`","summary":"

Performs the #query and returns an ExecResult

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L262","def":{"name":"exec","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(build(query)).exec(*args)"}},{"id":"query(query,*args)-instance-method","html_id":"query(query,*args)-instance-method","name":"query","doc":"Executes a *query* and returns a `ResultSet` with the results.\nThe `ResultSet` must be closed manually.\n\n```\nresult = db.query \"select name from contacts where id = ?\", 10\nbegin\n if result.move_next\n id = result.read(Int32)\n end\nensure\n result.close\nend\n```","summary":"

Executes a query and returns a ResultSet with the results.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L37","def":{"name":"query","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(build(query)).query(*args)"}},{"id":"query(query,*args,&block)-instance-method","html_id":"query(query,*args,&block)-instance-method","name":"query","doc":"Executes a *query* and yields a `ResultSet` with the results.\nThe `ResultSet` is closed automatically.\n\n```\ndb.query(\"select name from contacts where age > ?\", 18) do |rs|\n rs.each do\n name = rs.read(String)\n end\nend\n```","summary":"

Executes a query and yields a ResultSet with the results.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L51","def":{"name":"query","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"rs = query(query, *args)\nbegin\n yield rs\nensure\n rs.close\nend\n"}},{"id":"query_all(query,*args,astype:Class)-instance-method","html_id":"query_all(query,*args,astype:Class)-instance-method","name":"query_all","doc":"Executes a *query* and returns an array where the\nvalue of each row is read as the given *type*.\n\n```\nnames = db.query_all \"select name from contacts\", as: String\n```","summary":"

Executes a query and returns an array where the value of each row is read as the given type.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"args_string":"(query, *args, as type : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L239","def":{"name":"query_all","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_all(query, *args) do |rs|\n rs.read(type)\nend"}},{"id":"query_all(query,*args,astypes:NamedTuple)-instance-method","html_id":"query_all(query,*args,astypes:NamedTuple)-instance-method","name":"query_all","doc":"Executes a *query* and returns an array where each row is\nread as a named tuple of the given *types* (the keys of the named tuple\nare not necessarily the column names).\n\n```\ncontacts = db.query_all \"select name, age from contacts\", as: {name: String, age: Int32}\n```","summary":"

Executes a query and returns an array where each row is read as a named tuple of the given types (the keys of the named tuple are not necessarily the column names).

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"args_string":"(query, *args, as types : NamedTuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L227","def":{"name":"query_all","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_all(query, *args) do |rs|\n rs.read(**types)\nend"}},{"id":"query_all(query,*args,&block:ResultSet->U):Array(U)forallU-instance-method","html_id":"query_all(query,*args,&block:ResultSet->U):Array(U)forallU-instance-method","name":"query_all","doc":"Executes a *query* and yield a `ResultSet` positioned at the beginning\nof each row, returning an array of the values of the blocks.\n\n```\nnames = db.query_all \"select name from contacts\", &.read(String)\n```","summary":"

Executes a query and yield a ResultSet positioned at the beginning of each row, returning an array of the values of the blocks.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block : ResultSet -> U) : Array(U) forall U","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L200","def":{"name":"query_all","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":{"name":"block","doc":null,"default_value":"","external_name":"block","restriction":"(ResultSet -> U)"},"return_type":"Array(U)","visibility":"Public","body":"ary = [] of U\nquery_each(query, *args) do |rs|\n ary.push(yield rs)\nend\nary\n"}},{"id":"query_all(query,*args,astypes:Tuple)-instance-method","html_id":"query_all(query,*args,astypes:Tuple)-instance-method","name":"query_all","doc":"Executes a *query* and returns an array where each row is\nread as a tuple of the given *types*.\n\n```\ncontacts = db.query_all \"select name, age from contacts\", as: {String, Int32}\n```","summary":"

Executes a query and returns an array where each row is read as a tuple of the given types.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"args_string":"(query, *args, as types : Tuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L214","def":{"name":"query_all","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_all(query, *args) do |rs|\n rs.read(*types)\nend"}},{"id":"query_each(query,*args,&block)-instance-method","html_id":"query_each(query,*args,&block)-instance-method","name":"query_each","doc":"Executes a *query* and yields the `ResultSet` once per each row.\nThe `ResultSet` is closed automatically.\n\n```\ndb.query_each \"select name from contacts\" do |rs|\n puts rs.read(String)\nend\n```","summary":"

Executes a query and yields the ResultSet once per each row.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L253","def":{"name":"query_each","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"query(query, *args) do |rs|\n rs.each do\n yield rs\n end\nend"}},{"id":"query_one(query,*args,&block:ResultSet->U):UforallU-instance-method","html_id":"query_one(query,*args,&block:ResultSet->U):UforallU-instance-method","name":"query_one","doc":"Executes a *query* that expects a single row and yields a `ResultSet`\npositioned at that first row.\n\nThe given block must not invoke `move_next` on the yielded result set.\n\nRaises `DB::Error` if there were no rows, or if there were more than one row.\n\n```\nname = db.query_one \"select name from contacts where id = ?\", 18, &.read(String)\n```","summary":"

Executes a query that expects a single row and yields a ResultSet positioned at that first row.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block : ResultSet -> U) : U forall U","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L67","def":{"name":"query_one","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":{"name":"block","doc":null,"default_value":"","external_name":"block","restriction":"(ResultSet -> U)"},"return_type":"U","visibility":"Public","body":"query(query, *args) do |rs|\n if rs.move_next\n else\n raise(DB::Error.new(\"no rows\"))\n end\n value = yield rs\n if rs.move_next\n raise(DB::Error.new(\"more than one row\"))\n end\n return value\nend"}},{"id":"query_one(query,*args,astypes:Tuple)-instance-method","html_id":"query_one(query,*args,astypes:Tuple)-instance-method","name":"query_one","doc":"Executes a *query* that expects a single row and returns it\nas a tuple of the given *types*.\n\nRaises `DB::Error` if there were no rows, or if there were more than one row.\n\n```\ndb.query_one \"select name, age from contacts where id = ?\", 1, as: {String, Int32}\n```","summary":"

Executes a query that expects a single row and returns it as a tuple of the given types.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"args_string":"(query, *args, as types : Tuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L85","def":{"name":"query_one","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one(query, *args) do |rs|\n rs.read(*types)\nend"}},{"id":"query_one(query,*args,astypes:NamedTuple)-instance-method","html_id":"query_one(query,*args,astypes:NamedTuple)-instance-method","name":"query_one","doc":"Executes a *query* that expects a single row and returns it\nas a named tuple of the given *types* (the keys of the named tuple\nare not necessarily the column names).\n\nRaises `DB::Error` if there were no rows, or if there were more than one row.\n\n```\ndb.query_one \"select name, age from contacts where id = ?\", 1, as: {name: String, age: Int32}\n```","summary":"

Executes a query that expects a single row and returns it as a named tuple of the given types (the keys of the named tuple are not necessarily the column names).

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"args_string":"(query, *args, as types : NamedTuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L100","def":{"name":"query_one","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one(query, *args) do |rs|\n rs.read(**types)\nend"}},{"id":"query_one(query,*args,astype:Class)-instance-method","html_id":"query_one(query,*args,astype:Class)-instance-method","name":"query_one","doc":"Executes a *query* that expects a single row\nand returns the first column's value as the given *type*.\n\nRaises `DB::Error` if there were no rows, or if there were more than one row.\n\n```\ndb.query_one \"select name from contacts where id = ?\", 1, as: String\n```","summary":"

Executes a query that expects a single row and returns the first column's value as the given type.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"args_string":"(query, *args, as type : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L114","def":{"name":"query_one","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one(query, *args) do |rs|\n rs.read(type)\nend"}},{"id":"query_one?(query,*args,astype:Class)-instance-method","html_id":"query_one?(query,*args,astype:Class)-instance-method","name":"query_one?","doc":"Executes a *query* that expects a single row\nand returns the first column's value as the given *type*.\n\nReturns `nil` if there were no rows.\n\nRaises `DB::Error` if there were more than one row.\n\n```\nname = db.query_one? \"select name from contacts where id = ?\", 1, as: String\ntypeof(name) # => String?\n```","summary":"

Executes a query that expects a single row and returns the first column's value as the given type.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"args_string":"(query, *args, as type : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L188","def":{"name":"query_one?","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"type","doc":null,"default_value":"","external_name":"as","restriction":"Class"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one?(query, *args) do |rs|\n rs.read(type)\nend"}},{"id":"query_one?(query,*args,astypes:NamedTuple)-instance-method","html_id":"query_one?(query,*args,astypes:NamedTuple)-instance-method","name":"query_one?","doc":"Executes a *query* that expects a single row and returns it\nas a named tuple of the given *types* (the keys of the named tuple\nare not necessarily the column names).\n\nReturns `nil` if there were no rows.\n\nRaises `DB::Error` if there were more than one row.\n\n```\nresult = db.query_one? \"select name, age from contacts where id = ?\", 1, as: {age: String, name: Int32}\ntypeof(result) # => NamedTuple(age: String, name: Int32) | Nil\n```","summary":"

Executes a query that expects a single row and returns it as a named tuple of the given types (the keys of the named tuple are not necessarily the column names).

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"args_string":"(query, *args, as types : NamedTuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L171","def":{"name":"query_one?","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"NamedTuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one?(query, *args) do |rs|\n rs.read(**types)\nend"}},{"id":"query_one?(query,*args,astypes:Tuple)-instance-method","html_id":"query_one?(query,*args,astypes:Tuple)-instance-method","name":"query_one?","doc":"Executes a *query* that expects a single row and returns it\nas a tuple of the given *types*.\n\nReturns `nil` if there were no rows.\n\nRaises `DB::Error` if there were more than one row.\n\n```\nresult = db.query_one? \"select name, age from contacts where id = ?\", 1, as: {String, Int32}\ntypeof(result) # => Tuple(String, Int32) | Nil\n```","summary":"

Executes a query that expects a single row and returns it as a tuple of the given types.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"args_string":"(query, *args, as types : Tuple)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L153","def":{"name":"query_one?","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""},{"name":"types","doc":null,"default_value":"","external_name":"as","restriction":"Tuple"}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query_one?(query, *args) do |rs|\n rs.read(*types)\nend"}},{"id":"query_one?(query,*args,&block:ResultSet->U):U?forallU-instance-method","html_id":"query_one?(query,*args,&block:ResultSet->U):U?forallU-instance-method","name":"query_one?","doc":"Executes a *query* that expects at most a single row and yields a `ResultSet`\npositioned at that first row.\n\nReturns `nil`, not invoking the block, if there were no rows.\n\nRaises `DB::Error` if there were more than one row\n(this ends up invoking the block once).\n\n```\nname = db.query_one? \"select name from contacts where id = ?\", 18, &.read(String)\ntypeof(name) # => String | Nil\n```","summary":"

Executes a query that expects at most a single row and yields a ResultSet positioned at that first row.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args, &block : ResultSet -> U) : U? forall U","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L132","def":{"name":"query_one?","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":1,"block_arg":{"name":"block","doc":null,"default_value":"","external_name":"block","restriction":"(ResultSet -> U)"},"return_type":"U | ::Nil","visibility":"Public","body":"query(query, *args) do |rs|\n if rs.move_next\n else\n return nil\n end\n value = yield rs\n if rs.move_next\n raise(DB::Error.new(\"more than one row\"))\n end\n return value\nend"}},{"id":"scalar(query,*args)-instance-method","html_id":"scalar(query,*args)-instance-method","name":"scalar","doc":"Performs the `query` and returns a single scalar value\n\n```\nputs db.scalar(\"SELECT MAX(name)\").as(String) # => (a String)\n```","summary":"

Performs the #query and returns a single scalar value

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(query, *args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/query_methods.cr#L271","def":{"name":"scalar","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""},{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":1,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"(build(query)).scalar(*args)"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/ResultSet","path":"DB/ResultSet.html","kind":"class","full_name":"DB::ResultSet","name":"ResultSet","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/result_set.cr","line_number":22,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"The response of a query performed on a `Database`.\n\nSee `DB` for a complete sample.\n\nEach `#read` call consumes the result and moves to the next column.\nEach column must be read in order.\nAt any moment a `#move_next` can be invoked, meaning to skip the\nremaining, or even all the columns, in the current row.\nAlso it is not mandatory to consume the whole `ResultSet`, hence an iteration\nthrough `#each` or `#move_next` can be stopped.\n\n**Note:** depending on how the `ResultSet` was obtained it might be mandatory an\nexplicit call to `#close`. Check `QueryMethods#query`.\n\n### Note to implementors\n\n1. Override `#move_next` to move to the next row.\n2. Override `#read` returning the next value in the row.\n3. (Optional) Override `#read(t)` for some types `t` for which custom logic other than a simple cast is needed.\n4. Override `#column_count`, `#column_name`.","summary":"

The response of a query performed on a Database.

","class_methods":[],"constructors":[{"id":"new(statement:DB::Statement)-class-method","html_id":"new(statement:DB::Statement)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"statement","doc":null,"default_value":"","external_name":"statement","restriction":"DB::Statement"}],"args_string":"(statement : DB::Statement)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L28","def":{"name":"new","args":[{"name":"statement","doc":null,"default_value":"","external_name":"statement","restriction":"DB::Statement"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(statement)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"column_count:Int32-instance-method","html_id":"column_count:Int32-instance-method","name":"column_count","doc":"Returns the number of columns in the result","summary":"

Returns the number of columns in the result

","abstract":true,"args":[],"args_string":" : Int32","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L59","def":{"name":"column_count","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Int32","visibility":"Public","body":""}},{"id":"column_name(index:Int32):String-instance-method","html_id":"column_name(index:Int32):String-instance-method","name":"column_name","doc":"Returns the name of the column in `index` 0-based position.","summary":"

Returns the name of the column in index 0-based position.

","abstract":true,"args":[{"name":"index","doc":null,"default_value":"","external_name":"index","restriction":"Int32"}],"args_string":"(index : Int32) : String","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L62","def":{"name":"column_name","args":[{"name":"index","doc":null,"default_value":"","external_name":"index","restriction":"Int32"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"String","visibility":"Public","body":""}},{"id":"column_names-instance-method","html_id":"column_names-instance-method","name":"column_names","doc":"Returns the name of the columns.","summary":"

Returns the name of the columns.

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L65","def":{"name":"column_names","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"Array(String).new(column_count) do |i|\n column_name(i)\nend"}},{"id":"each(&block)-instance-method","html_id":"each(&block)-instance-method","name":"each","doc":"Iterates over all the rows","summary":"

Iterates over all the rows

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L38","def":{"name":"each","args":[],"double_splat":null,"splat_index":null,"yields":0,"block_arg":null,"return_type":"","visibility":"Public","body":"while move_next\n yield\nend"}},{"id":"each_column(&block)-instance-method","html_id":"each_column(&block)-instance-method","name":"each_column","doc":"Iterates over all the columns","summary":"

Iterates over all the columns

","abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L45","def":{"name":"each_column","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"column_count.times do |x|\n yield column_name(x)\nend"}},{"id":"move_next:Bool-instance-method","html_id":"move_next:Bool-instance-method","name":"move_next","doc":"Move the next row in the result.\nReturn `false` if no more rows are available.\nSee `#each`","summary":"

Move the next row in the result.

","abstract":true,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L54","def":{"name":"move_next","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":""}},{"id":"read(type:DB::Mappable.class)-instance-method","html_id":"read(type:DB::Mappable.class)-instance-method","name":"read","doc":"Reads the next columns and maps them to a class","summary":"

Reads the next columns and maps them to a class

","abstract":false,"args":[{"name":"type","doc":null,"default_value":"","external_name":"type","restriction":"DB::Mappable.class"}],"args_string":"(type : DB::Mappable.class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L73","def":{"name":"read","args":[{"name":"type","doc":null,"default_value":"","external_name":"type","restriction":"DB::Mappable.class"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"type.new(self)"}},{"id":"read(type:T.class):TforallT-instance-method","html_id":"read(type:T.class):TforallT-instance-method","name":"read","doc":"Reads the next column value as a **type**","summary":"

Reads the next column value as a type

","abstract":false,"args":[{"name":"type","doc":null,"default_value":"","external_name":"type","restriction":"T.class"}],"args_string":"(type : T.class) : T forall T","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L78","def":{"name":"read","args":[{"name":"type","doc":null,"default_value":"","external_name":"type","restriction":"T.class"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"T","visibility":"Public","body":"value = read\nif value.is_a?(T)\n value\nelse\n raise(\"#{self.class}#read returned a #{value.class}. A #{T} was expected.\")\nend\n"}},{"id":"read(**types:Class)-instance-method","html_id":"read(**types:Class)-instance-method","name":"read","doc":"Reads the next columns and returns a named tuple of the values.","summary":"

Reads the next columns and returns a named tuple of the values.

","abstract":false,"args":[],"args_string":"(**types : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L93","def":{"name":"read","args":[],"double_splat":{"name":"types","doc":null,"default_value":"","external_name":"types","restriction":"Class"},"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"internal_read(**types)"}},{"id":"read-instance-method","html_id":"read-instance-method","name":"read","doc":"Reads the next column value","summary":"

Reads the next column value

","abstract":true,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L70","def":{"name":"read","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":""}},{"id":"read(*types:Class)-instance-method","html_id":"read(*types:Class)-instance-method","name":"read","doc":"Reads the next columns and returns a tuple of the values.","summary":"

Reads the next columns and returns a tuple of the values.

","abstract":false,"args":[{"name":"types","doc":null,"default_value":"","external_name":"types","restriction":"Class"}],"args_string":"(*types : Class)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/result_set.cr#L88","def":{"name":"read","args":[{"name":"types","doc":null,"default_value":"","external_name":"types","restriction":"Class"}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"internal_read(*types)"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Rollback","path":"DB/Rollback.html","kind":"class","full_name":"DB::Rollback","name":"Rollback","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Error","kind":"class","full_name":"DB::Error","name":"Error"},{"html_id":"github.com/crystal-lang/crystal-db/Exception","kind":"class","full_name":"Exception","name":"Exception"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/error.cr","line_number":30,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/error.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/SavePointTransaction","path":"DB/SavePointTransaction.html","kind":"class","full_name":"DB::SavePointTransaction","name":"SavePointTransaction","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/transaction.cr","line_number":94,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(parent:Transaction,savepoint_name:String)-class-method","html_id":"new(parent:Transaction,savepoint_name:String)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"parent","doc":null,"default_value":"","external_name":"parent","restriction":"Transaction"},{"name":"savepoint_name","doc":null,"default_value":"","external_name":"savepoint_name","restriction":"String"}],"args_string":"(parent : Transaction, savepoint_name : String)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L97","def":{"name":"new","args":[{"name":"parent","doc":null,"default_value":"","external_name":"parent","restriction":"Transaction"},{"name":"savepoint_name","doc":null,"default_value":"","external_name":"savepoint_name","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(parent, savepoint_name)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"begin_transaction:Transaction-instance-method","html_id":"begin_transaction:Transaction-instance-method","name":"begin_transaction","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Transaction","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L117","def":{"name":"begin_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Transaction","visibility":"Public","body":"if @nested_transaction\n raise(DB::Error.new(\"There is an existing nested transaction in this transaction\"))\nend\n@nested_transaction = true\ncreate_save_point_transaction(self)\n"}},{"id":"commit-instance-method","html_id":"commit-instance-method","name":"commit","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L103","def":{"name":"commit","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.perform_release_savepoint(@savepoint_name)\nsuper()\n"}},{"id":"connection:Connection-instance-method","html_id":"connection:Connection-instance-method","name":"connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L97","def":{"name":"connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":"@connection"}},{"id":"create_save_point_transaction(parent:Transaction)-instance-method","html_id":"create_save_point_transaction(parent:Transaction)-instance-method","name":"create_save_point_transaction","doc":null,"summary":null,"abstract":false,"args":[{"name":"parent","doc":null,"default_value":"","external_name":"parent","restriction":"Transaction"}],"args_string":"(parent : Transaction)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L123","def":{"name":"create_save_point_transaction","args":[{"name":"parent","doc":null,"default_value":"","external_name":"parent","restriction":"Transaction"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@parent.create_save_point_transaction(parent)"}},{"id":"release_from_nested_transaction-instance-method","html_id":"release_from_nested_transaction-instance-method","name":"release_from_nested_transaction","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L127","def":{"name":"release_from_nested_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@nested_transaction = false"}},{"id":"rollback-instance-method","html_id":"rollback-instance-method","name":"rollback","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L108","def":{"name":"rollback","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.perform_rollback_savepoint(@savepoint_name)\nsuper()\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","path":"DB/SessionMethods.html","kind":"module","full_name":"DB::SessionMethods(Session, Stmt)","name":"SessionMethods","abstract":false,"superclass":null,"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"}],"locations":[{"filename":"db/session_methods.cr","line_number":10,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"}],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Connection","kind":"class","full_name":"DB::Connection","name":"Connection"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Database","kind":"class","full_name":"DB::Database","name":"Database"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Methods that are shared accross session like objects:\n - Database\n - Connection\n\nClasses that includes this module are able to execute\nqueries and statements in both prepared and unprepared fashion.\n\nThis module serves for dsl reuse over session like objects.","summary":"

Methods that are shared accross session like objects: - Database - Connection

","class_methods":[],"constructors":[],"instance_methods":[{"id":"build(query):Stmt-instance-method","html_id":"build(query):Stmt-instance-method","name":"build","doc":null,"summary":null,"abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L21","def":{"name":"build","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":"if prepared_statements?\n fetch_or_build_prepared_statement(query)\nelse\n build_unprepared_statement(query)\nend"}},{"id":"build_unprepared_statement(query):Stmt-instance-method","html_id":"build_unprepared_statement(query):Stmt-instance-method","name":"build_unprepared_statement","doc":null,"summary":null,"abstract":true,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L19","def":{"name":"build_unprepared_statement","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":""}},{"id":"fetch_or_build_prepared_statement(query):Stmt-instance-method","html_id":"fetch_or_build_prepared_statement(query):Stmt-instance-method","name":"fetch_or_build_prepared_statement","doc":null,"summary":null,"abstract":true,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L17","def":{"name":"fetch_or_build_prepared_statement","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":""}},{"id":"prepared(query)-instance-method","html_id":"prepared(query)-instance-method","name":"prepared","doc":"Returns a prepared `Statement` that has not been executed yet.","summary":"

Returns a prepared Statement that has not been executed yet.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L36","def":{"name":"prepared","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"prepared.build(query)"}},{"id":"prepared-instance-method","html_id":"prepared-instance-method","name":"prepared","doc":"dsl helper to build prepared statements\nreturns a value that includes `QueryMethods`","summary":"

dsl helper to build prepared statements returns a value that includes QueryMethods

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L31","def":{"name":"prepared","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"PreparedQuery(Session, Stmt).new(self)"}},{"id":"prepared_statements?:Bool-instance-method","html_id":"prepared_statements?:Bool-instance-method","name":"prepared_statements?","doc":"Returns whether by default the statements should\nbe prepared or not.","summary":"

Returns whether by default the statements should be prepared or not.

","abstract":true,"args":[],"args_string":" : Bool","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L15","def":{"name":"prepared_statements?","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Bool","visibility":"Public","body":""}},{"id":"unprepared(query)-instance-method","html_id":"unprepared(query)-instance-method","name":"unprepared","doc":"Returns an unprepared `Statement` that has not been executed yet.","summary":"

Returns an unprepared Statement that has not been executed yet.

","abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L47","def":{"name":"unprepared","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"unprepared.build(query)"}},{"id":"unprepared-instance-method","html_id":"unprepared-instance-method","name":"unprepared","doc":"dsl helper to build unprepared statements\nreturns a value that includes `QueryMethods`","summary":"

dsl helper to build unprepared statements returns a value that includes QueryMethods

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L42","def":{"name":"unprepared","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"UnpreparedQuery(Session, Stmt).new(self)"}}],"macros":[],"types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods/PreparedQuery","path":"DB/SessionMethods/PreparedQuery.html","kind":"struct","full_name":"DB::SessionMethods::PreparedQuery(Session, Stmt)","name":"PreparedQuery","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"},{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},{"html_id":"github.com/crystal-lang/crystal-db/Value","kind":"struct","full_name":"Value","name":"Value"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/session_methods.cr","line_number":51,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods(Session, Stmt)","name":"SessionMethods"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(session:Session)-class-method","html_id":"new(session:Session)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"session","doc":null,"default_value":"","external_name":"session","restriction":"Session"}],"args_string":"(session : Session)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L54","def":{"name":"new","args":[{"name":"session","doc":null,"default_value":"","external_name":"session","restriction":"Session"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = PreparedQuery(Session, Stmt).allocate\n_.initialize(session)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"build(query):Stmt-instance-method","html_id":"build(query):Stmt-instance-method","name":"build","doc":null,"summary":null,"abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L57","def":{"name":"build","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":"@session.fetch_or_build_prepared_statement(query)"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods/UnpreparedQuery","path":"DB/SessionMethods/UnpreparedQuery.html","kind":"struct","full_name":"DB::SessionMethods::UnpreparedQuery(Session, Stmt)","name":"UnpreparedQuery","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"},{"html_id":"github.com/crystal-lang/crystal-db/Struct","kind":"struct","full_name":"Struct","name":"Struct"},{"html_id":"github.com/crystal-lang/crystal-db/Value","kind":"struct","full_name":"Value","name":"Value"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/session_methods.cr","line_number":62,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/QueryMethods","kind":"module","full_name":"DB::QueryMethods","name":"QueryMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB/SessionMethods","kind":"module","full_name":"DB::SessionMethods(Session, Stmt)","name":"SessionMethods"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(session:Session)-class-method","html_id":"new(session:Session)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"session","doc":null,"default_value":"","external_name":"session","restriction":"Session"}],"args_string":"(session : Session)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L65","def":{"name":"new","args":[{"name":"session","doc":null,"default_value":"","external_name":"session","restriction":"Session"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = UnpreparedQuery(Session, Stmt).allocate\n_.initialize(session)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"build(query):Stmt-instance-method","html_id":"build(query):Stmt-instance-method","name":"build","doc":null,"summary":null,"abstract":false,"args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"args_string":"(query) : Stmt","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/session_methods.cr#L68","def":{"name":"build","args":[{"name":"query","doc":null,"default_value":"","external_name":"query","restriction":""}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Stmt","visibility":"Public","body":"@session.build_unprepared_statement(query)"}}],"macros":[],"types":[]}]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Statement","path":"DB/Statement.html","kind":"class","full_name":"DB::Statement","name":"Statement","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/statement.cr","line_number":52,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods"}],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Represents a query in a `Connection`.\nIt should be created by `QueryMethods`.\n\n### Note to implementors\n\n1. Subclass `Statements`\n2. `Statements` are created from a custom driver `Connection#prepare` method.\n3. `#perform_query` executes a query that is expected to return a `ResultSet`\n4. `#perform_exec` executes a query that is expected to return an `ExecResult`\n6. `#do_close` is called to release the statement resources.","summary":"

Represents a query in a Connection.

","class_methods":[],"constructors":[{"id":"new(connection:Connection)-class-method","html_id":"new(connection:Connection)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"args_string":"(connection : Connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L58","def":{"name":"new","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(connection)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"exec(args:Array):DB::ExecResult-instance-method","html_id":"exec(args:Array):DB::ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : DB::ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L71","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"DB::ExecResult","visibility":"Public","body":"perform_exec_and_release(args)"}},{"id":"exec:DB::ExecResult-instance-method","html_id":"exec:DB::ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[],"args_string":" : DB::ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L66","def":{"name":"exec","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"DB::ExecResult","visibility":"Public","body":"perform_exec_and_release(Slice(Any).empty)"}},{"id":"exec(*args)-instance-method","html_id":"exec(*args)-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L76","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"perform_exec_and_release(args)"}},{"id":"query(args:Array):DB::ResultSet-instance-method","html_id":"query(args:Array):DB::ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : DB::ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L87","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"DB::ResultSet","visibility":"Public","body":"perform_query_with_rescue(args)"}},{"id":"query:DB::ResultSet-instance-method","html_id":"query:DB::ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[],"args_string":" : DB::ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L82","def":{"name":"query","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"DB::ResultSet","visibility":"Public","body":"perform_query_with_rescue(Tuple.new)"}},{"id":"query(*args)-instance-method","html_id":"query(*args)-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L92","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"perform_query_with_rescue(args)"}},{"id":"release_connection-instance-method","html_id":"release_connection-instance-method","name":"release_connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L61","def":{"name":"release_connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.release_from_statement"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/StatementMethods","path":"DB/StatementMethods.html","kind":"module","full_name":"DB::StatementMethods","name":"StatementMethods","abstract":false,"superclass":null,"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"}],"locations":[{"filename":"db/statement.cr","line_number":4,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"}],"extended_modules":[],"subclasses":[],"including_types":[{"html_id":"github.com/crystal-lang/crystal-db/DB/PoolStatement","kind":"class","full_name":"DB::PoolStatement","name":"PoolStatement"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Statement","kind":"class","full_name":"DB::Statement","name":"Statement"}],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Common interface for connection based statements\nand for connection pool statements.","summary":"

Common interface for connection based statements and for connection pool statements.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"exec(args:Array):ExecResult-instance-method","html_id":"exec(args:Array):ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":true,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L32","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":""}},{"id":"exec:ExecResult-instance-method","html_id":"exec:ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":true,"args":[],"args_string":" : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L28","def":{"name":"exec","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":""}},{"id":"exec(*args):ExecResult-instance-method","html_id":"exec(*args):ExecResult-instance-method","name":"exec","doc":"See `QueryMethods#exec`","summary":"

See QueryMethods#exec

","abstract":true,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args) : ExecResult","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L30","def":{"name":"exec","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"ExecResult","visibility":"Public","body":""}},{"id":"query(*args,&block)-instance-method","html_id":"query(*args,&block)-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args, &block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L22","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"rs = query(*args)\nbegin\n yield rs\nensure\n rs.close\nend\n"}},{"id":"query(args:Array):ResultSet-instance-method","html_id":"query(args:Array):ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":true,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"args_string":"(args : Array) : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L39","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":"Array"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":""}},{"id":"query:ResultSet-instance-method","html_id":"query:ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":true,"args":[],"args_string":" : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L35","def":{"name":"query","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":""}},{"id":"query(*args):ResultSet-instance-method","html_id":"query(*args):ResultSet-instance-method","name":"query","doc":"See `QueryMethods#query`","summary":"

See QueryMethods#query

","abstract":true,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args) : ResultSet","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L37","def":{"name":"query","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"ResultSet","visibility":"Public","body":""}},{"id":"scalar(*args)-instance-method","html_id":"scalar(*args)-instance-method","name":"scalar","doc":"See `QueryMethods#scalar`","summary":"

See QueryMethods#scalar

","abstract":false,"args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"args_string":"(*args)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/statement.cr#L11","def":{"name":"scalar","args":[{"name":"args","doc":null,"default_value":"","external_name":"args","restriction":""}],"double_splat":null,"splat_index":0,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"query(*args) do |rs|\n rs.each do\n return rs.read\n end\nend\nraise(\"no results\")\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/StringKeyCache","path":"DB/StringKeyCache.html","kind":"class","full_name":"DB::StringKeyCache(T)","name":"StringKeyCache","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/string_key_cache.cr","line_number":2,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[],"instance_methods":[{"id":"clear-instance-method","html_id":"clear-instance-method","name":"clear","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr#L17","def":{"name":"clear","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@cache.clear"}},{"id":"each_value(&block)-instance-method","html_id":"each_value(&block)-instance-method","name":"each_value","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"(&block)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr#L11","def":{"name":"each_value","args":[],"double_splat":null,"splat_index":null,"yields":1,"block_arg":null,"return_type":"","visibility":"Public","body":"@cache.each do |_, value|\n yield value\nend"}},{"id":"fetch(key:String,&block):T-instance-method","html_id":"fetch(key:String,&block):T-instance-method","name":"fetch","doc":null,"summary":null,"abstract":false,"args":[{"name":"key","doc":null,"default_value":"","external_name":"key","restriction":"String"}],"args_string":"(key : String, &block) : T","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/string_key_cache.cr#L5","def":{"name":"fetch","args":[{"name":"key","doc":null,"default_value":"","external_name":"key","restriction":"String"}],"double_splat":null,"splat_index":null,"yields":0,"block_arg":null,"return_type":"T","visibility":"Public","body":"value = @cache.fetch(key, nil)\nif value\nelse\n value = @cache[key] = yield\nend\nvalue\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/TopLevelTransaction","path":"DB/TopLevelTransaction.html","kind":"class","full_name":"DB::TopLevelTransaction","name":"TopLevelTransaction","abstract":false,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","kind":"class","full_name":"DB::Transaction","name":"Transaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/transaction.cr","line_number":38,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[],"extended_modules":[],"subclasses":[],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":null,"summary":null,"class_methods":[],"constructors":[{"id":"new(connection:Connection)-class-method","html_id":"new(connection:Connection)-class-method","name":"new","doc":null,"summary":null,"abstract":false,"args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"args_string":"(connection : Connection)","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L43","def":{"name":"new","args":[{"name":"connection","doc":null,"default_value":"","external_name":"connection","restriction":"Connection"}],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"_ = allocate\n_.initialize(connection)\nif _.responds_to?(:finalize)\n ::GC.add_finalizer(_)\nend\n_\n"}}],"instance_methods":[{"id":"begin_transaction:Transaction-instance-method","html_id":"begin_transaction:Transaction-instance-method","name":"begin_transaction","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Transaction","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L62","def":{"name":"begin_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Transaction","visibility":"Public","body":"if @nested_transaction\n raise(DB::Error.new(\"There is an existing nested transaction in this transaction\"))\nend\n@nested_transaction = true\ncreate_save_point_transaction(self)\n"}},{"id":"commit-instance-method","html_id":"commit-instance-method","name":"commit","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L48","def":{"name":"commit","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.perform_commit_transaction\nsuper()\n"}},{"id":"connection:Connection-instance-method","html_id":"connection:Connection-instance-method","name":"connection","doc":null,"summary":null,"abstract":false,"args":[],"args_string":" : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L41","def":{"name":"connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":"@connection"}},{"id":"rollback-instance-method","html_id":"rollback-instance-method","name":"rollback","doc":null,"summary":null,"abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L53","def":{"name":"rollback","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"@connection.perform_rollback_transaction\nsuper()\n"}}],"macros":[],"types":[]},{"html_id":"github.com/crystal-lang/crystal-db/DB/Transaction","path":"DB/Transaction.html","kind":"class","full_name":"DB::Transaction","name":"Transaction","abstract":true,"superclass":{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},"ancestors":[{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"},{"html_id":"github.com/crystal-lang/crystal-db/Reference","kind":"class","full_name":"Reference","name":"Reference"},{"html_id":"github.com/crystal-lang/crystal-db/Object","kind":"class","full_name":"Object","name":"Object"}],"locations":[{"filename":"db/transaction.cr","line_number":14,"url":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr"}],"repository_name":"github.com/crystal-lang/crystal-db","program":false,"enum":false,"alias":false,"aliased":"","const":false,"constants":[],"included_modules":[{"html_id":"github.com/crystal-lang/crystal-db/DB/BeginTransaction","kind":"module","full_name":"DB::BeginTransaction","name":"BeginTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/Disposable","kind":"module","full_name":"DB::Disposable","name":"Disposable"}],"extended_modules":[],"subclasses":[{"html_id":"github.com/crystal-lang/crystal-db/DB/SavePointTransaction","kind":"class","full_name":"DB::SavePointTransaction","name":"SavePointTransaction"},{"html_id":"github.com/crystal-lang/crystal-db/DB/TopLevelTransaction","kind":"class","full_name":"DB::TopLevelTransaction","name":"TopLevelTransaction"}],"including_types":[],"namespace":{"html_id":"github.com/crystal-lang/crystal-db/DB","kind":"module","full_name":"DB","name":"DB"},"doc":"Transactions should be started from `DB#transaction`, `Connection#transaction`\nor `Connection#begin_transaction`.\n\nUse `Transaction#connection` to submit statements to the database.\n\nUse `Transaction#commit` or `Transaction#rollback` to close the ongoing transaction\nexplicitly. Or refer to `BeginTransaction#transaction` for documentation on how to\nuse `#transaction(&block)` methods in `DB` and `Connection`.\n\nNested transactions are supported by using sql `SAVEPOINT`. To start a nested\ntransaction use `Transaction#transaction` or `Transaction#begin_transaction`.\n","summary":"

Transactions should be started from DB#transaction, Connection#transaction or Connection#begin_transaction.

","class_methods":[],"constructors":[],"instance_methods":[{"id":"commit-instance-method","html_id":"commit-instance-method","name":"commit","doc":"commits the current transaction","summary":"

commits the current transaction

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L21","def":{"name":"commit","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"close!"}},{"id":"connection:Connection-instance-method","html_id":"connection:Connection-instance-method","name":"connection","doc":null,"summary":null,"abstract":true,"args":[],"args_string":" : Connection","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L18","def":{"name":"connection","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"Connection","visibility":"Public","body":""}},{"id":"release_from_nested_transaction-instance-method","html_id":"release_from_nested_transaction-instance-method","name":"release_from_nested_transaction","doc":null,"summary":null,"abstract":true,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L35","def":{"name":"release_from_nested_transaction","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":""}},{"id":"rollback-instance-method","html_id":"rollback-instance-method","name":"rollback","doc":"rollbacks the current transaction","summary":"

rollbacks the current transaction

","abstract":false,"args":[],"args_string":"","source_link":"https://github.com/crystal-lang/crystal-db/blob/dcd0af5ce81b5a43305e02846106633373f65004/src/db/transaction.cr#L26","def":{"name":"rollback","args":[],"double_splat":null,"splat_index":null,"yields":null,"block_arg":null,"return_type":"","visibility":"Public","body":"close!"}}],"macros":[],"types":[]}]}]}}) \ No newline at end of file