sequel 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +76 -0
- data/Rakefile +2 -2
- data/bin/sequel +9 -4
- data/doc/opening_databases.rdoc +279 -0
- data/doc/release_notes/3.2.0.txt +268 -0
- data/doc/virtual_rows.rdoc +42 -51
- data/lib/sequel/adapters/ado.rb +2 -5
- data/lib/sequel/adapters/db2.rb +5 -0
- data/lib/sequel/adapters/do.rb +3 -0
- data/lib/sequel/adapters/firebird.rb +6 -4
- data/lib/sequel/adapters/informix.rb +5 -3
- data/lib/sequel/adapters/jdbc.rb +10 -8
- data/lib/sequel/adapters/jdbc/h2.rb +17 -4
- data/lib/sequel/adapters/mysql.rb +6 -19
- data/lib/sequel/adapters/odbc.rb +14 -18
- data/lib/sequel/adapters/openbase.rb +8 -0
- data/lib/sequel/adapters/shared/mssql.rb +14 -8
- data/lib/sequel/adapters/shared/mysql.rb +53 -28
- data/lib/sequel/adapters/shared/oracle.rb +21 -12
- data/lib/sequel/adapters/shared/postgres.rb +46 -26
- data/lib/sequel/adapters/shared/progress.rb +10 -5
- data/lib/sequel/adapters/shared/sqlite.rb +28 -12
- data/lib/sequel/adapters/sqlite.rb +4 -3
- data/lib/sequel/adapters/utils/stored_procedures.rb +18 -9
- data/lib/sequel/connection_pool.rb +4 -3
- data/lib/sequel/database.rb +110 -10
- data/lib/sequel/database/schema_sql.rb +12 -3
- data/lib/sequel/dataset.rb +40 -3
- data/lib/sequel/dataset/convenience.rb +0 -11
- data/lib/sequel/dataset/graph.rb +25 -11
- data/lib/sequel/dataset/sql.rb +176 -68
- data/lib/sequel/extensions/migration.rb +37 -21
- data/lib/sequel/extensions/schema_dumper.rb +8 -61
- data/lib/sequel/model.rb +3 -3
- data/lib/sequel/model/associations.rb +9 -1
- data/lib/sequel/model/base.rb +8 -1
- data/lib/sequel/plugins/single_table_inheritance.rb +1 -1
- data/lib/sequel/sql.rb +125 -18
- data/lib/sequel/version.rb +1 -1
- data/spec/adapters/ado_spec.rb +1 -0
- data/spec/adapters/firebird_spec.rb +1 -0
- data/spec/adapters/informix_spec.rb +1 -0
- data/spec/adapters/mysql_spec.rb +23 -8
- data/spec/adapters/oracle_spec.rb +1 -0
- data/spec/adapters/postgres_spec.rb +52 -4
- data/spec/adapters/spec_helper.rb +2 -2
- data/spec/adapters/sqlite_spec.rb +2 -1
- data/spec/core/connection_pool_spec.rb +16 -0
- data/spec/core/database_spec.rb +174 -0
- data/spec/core/dataset_spec.rb +121 -26
- data/spec/core/expression_filters_spec.rb +156 -0
- data/spec/core/object_graph_spec.rb +20 -1
- data/spec/core/schema_spec.rb +5 -5
- data/spec/extensions/migration_spec.rb +140 -74
- data/spec/extensions/schema_dumper_spec.rb +3 -69
- data/spec/extensions/single_table_inheritance_spec.rb +6 -0
- data/spec/integration/dataset_test.rb +84 -2
- data/spec/integration/schema_test.rb +24 -5
- data/spec/integration/spec_helper.rb +8 -6
- data/spec/model/eager_loading_spec.rb +9 -0
- data/spec/model/record_spec.rb +35 -8
- metadata +8 -7
- data/lib/sequel/adapters/utils/date_format.rb +0 -21
- data/lib/sequel/adapters/utils/savepoint_transactions.rb +0 -80
- data/lib/sequel/adapters/utils/unsupported.rb +0 -50
@@ -1,21 +0,0 @@
|
|
1
|
-
# Module containing overrides for Sequel's standard date/time literalization
|
2
|
-
# to use the SQL standrd. The SQL standard is used by fewer databases than
|
3
|
-
# the defacto standard (which is just a normal string).
|
4
|
-
module Sequel::Dataset::SQLStandardDateFormat
|
5
|
-
private
|
6
|
-
|
7
|
-
# Use SQL standard syntax for Date
|
8
|
-
def literal_date(v)
|
9
|
-
v.strftime("DATE '%Y-%m-%d'")
|
10
|
-
end
|
11
|
-
|
12
|
-
# Use SQL standard syntax for DateTime
|
13
|
-
def literal_datetime(v)
|
14
|
-
v.strftime("TIMESTAMP '%Y-%m-%d %H:%M:%S'")
|
15
|
-
end
|
16
|
-
|
17
|
-
# Use SQL standard syntax for Time
|
18
|
-
def literal_time(v)
|
19
|
-
v.strftime("TIMESTAMP '%Y-%m-%d %H:%M:%S'")
|
20
|
-
end
|
21
|
-
end
|
@@ -1,80 +0,0 @@
|
|
1
|
-
# Module included in adapters that support savepoints, currently MySQL and PostgreSQL.
|
2
|
-
module Sequel
|
3
|
-
class Database
|
4
|
-
module SavepointTransactions
|
5
|
-
SQL_SAVEPOINT = 'SAVEPOINT autopoint_%d'.freeze
|
6
|
-
SQL_ROLLBACK_TO_SAVEPOINT = 'ROLLBACK TO SAVEPOINT autopoint_%d'.freeze
|
7
|
-
SQL_RELEASE_SAVEPOINT = 'RELEASE SAVEPOINT autopoint_%d'.freeze
|
8
|
-
|
9
|
-
# Any adapter that includes this module must support savepoints.
|
10
|
-
def supports_savepoints?
|
11
|
-
true
|
12
|
-
end
|
13
|
-
|
14
|
-
private
|
15
|
-
|
16
|
-
# Don't add the current thread to the list of threads with active
|
17
|
-
# connections if it is already in the list. If there isn't an
|
18
|
-
# active transaction on this thread, set the transaction depth to
|
19
|
-
# zero.
|
20
|
-
def add_transaction
|
21
|
-
th = Thread.current
|
22
|
-
unless @transactions.include?(th)
|
23
|
-
th[:sequel_transaction_depth] = 0
|
24
|
-
super
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# If a savepoint is requested, don't reuse an existing transaction
|
29
|
-
def already_in_transaction?(conn, opts)
|
30
|
-
super and !opts[:savepoint]
|
31
|
-
end
|
32
|
-
|
33
|
-
# SQL to start a new savepoint
|
34
|
-
def begin_savepoint_sql(depth)
|
35
|
-
SQL_SAVEPOINT % depth
|
36
|
-
end
|
37
|
-
|
38
|
-
# If there is no active transaction, start a new transaction. Otherwise,
|
39
|
-
# start a savepoint inside the current transaction. Increment the
|
40
|
-
def begin_transaction(conn)
|
41
|
-
th = Thread.current
|
42
|
-
depth = th[:sequel_transaction_depth]
|
43
|
-
conn = transaction_statement_object(conn) if respond_to?(:transaction_statement_object, true)
|
44
|
-
log_connection_execute(conn, depth > 0 ? begin_savepoint_sql(depth) : begin_transaction_sql)
|
45
|
-
th[:sequel_transaction_depth] += 1
|
46
|
-
conn
|
47
|
-
end
|
48
|
-
|
49
|
-
# SQL to commit a savepoint
|
50
|
-
def commit_savepoint_sql(depth)
|
51
|
-
SQL_RELEASE_SAVEPOINT % depth
|
52
|
-
end
|
53
|
-
|
54
|
-
# If currently inside a savepoint, commit/release the savepoint.
|
55
|
-
# Otherwise, commit the transaction.
|
56
|
-
def commit_transaction(conn)
|
57
|
-
depth = Thread.current[:sequel_transaction_depth]
|
58
|
-
log_connection_execute(conn, depth > 1 ? commit_savepoint_sql(depth-1) : commit_transaction_sql)
|
59
|
-
end
|
60
|
-
|
61
|
-
# Decrement the current savepoint/transaction depth
|
62
|
-
def remove_transaction(conn)
|
63
|
-
depth = (Thread.current[:sequel_transaction_depth] -= 1)
|
64
|
-
super unless depth > 0
|
65
|
-
end
|
66
|
-
|
67
|
-
# SQL to rollback to a savepoint
|
68
|
-
def rollback_savepoint_sql(depth)
|
69
|
-
SQL_ROLLBACK_TO_SAVEPOINT % depth
|
70
|
-
end
|
71
|
-
|
72
|
-
# If currently inside a savepoint, rollback to the start of the savepoint.
|
73
|
-
# Otherwise, rollback the entire transaction.
|
74
|
-
def rollback_transaction(conn)
|
75
|
-
depth = Thread.current[:sequel_transaction_depth]
|
76
|
-
log_connection_execute(conn, depth > 1 ? rollback_savepoint_sql(depth-1) : rollback_transaction_sql)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
@@ -1,50 +0,0 @@
|
|
1
|
-
class Sequel::Dataset
|
2
|
-
# This module should be included in the dataset class for all databases that
|
3
|
-
# don't support INTERSECT or EXCEPT.
|
4
|
-
module UnsupportedIntersectExcept
|
5
|
-
# Raise an Error if EXCEPT is used
|
6
|
-
def except(ds, all=false)
|
7
|
-
raise(Sequel::Error, "EXCEPT not supported")
|
8
|
-
end
|
9
|
-
|
10
|
-
# Raise an Error if INTERSECT is used
|
11
|
-
def intersect(ds, all=false)
|
12
|
-
raise(Sequel::Error, "INTERSECT not supported")
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
# This module should be included in the dataset class for all databases that
|
17
|
-
# don't support INTERSECT ALL or EXCEPT ALL.
|
18
|
-
module UnsupportedIntersectExceptAll
|
19
|
-
# Raise an Error if EXCEPT is used
|
20
|
-
def except(ds, all=false)
|
21
|
-
raise(Sequel::Error, "EXCEPT ALL not supported") if all
|
22
|
-
super(ds)
|
23
|
-
end
|
24
|
-
|
25
|
-
# Raise an Error if INTERSECT is used
|
26
|
-
def intersect(ds, all=false)
|
27
|
-
raise(Sequel::Error, "INTERSECT ALL not supported") if all
|
28
|
-
super(ds)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# This module should be included in the dataset class for all databases that
|
33
|
-
# don't support IS [NOT] (TRUE|FALSE)
|
34
|
-
module UnsupportedIsTrue
|
35
|
-
# Use an = construct instead of IS and an != OR IS NULL construct instead of IS NOT.
|
36
|
-
def complex_expression_sql(op, args)
|
37
|
-
case op
|
38
|
-
when :IS, :'IS NOT'
|
39
|
-
isnot = op != :IS
|
40
|
-
return super if (v1 = args.at(1)).nil?
|
41
|
-
v0 = literal(args.at(0))
|
42
|
-
s = "(#{v0} #{'!' if isnot}= #{literal(v1)})"
|
43
|
-
s = "(#{s} OR (#{v0} IS NULL))" if isnot
|
44
|
-
s
|
45
|
-
else
|
46
|
-
super(op, args)
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|