Skip to content

Commit 97a2cd9

Browse files
authored
Fix CockroachDB errors (#980)
* Fix CockroachDB error ``` at or near "default": syntax error (PQ::PQError) from lib/pg/src/pq/connection.cr:214:7 in 'handle_error' from lib/pg/src/pq/connection.cr:197:7 in 'handle_async_frames' from lib/pg/src/pq/connection.cr:173:7 in 'read' from lib/pg/src/pq/connection.cr:168:7 in 'read' from lib/pg/src/pq/connection.cr:446:31 in 'expect_frame' from lib/pg/src/pq/connection.cr:445:5 in 'expect_frame' from lib/pg/src/pg/statement.cr:18:5 in 'perform_query' from lib/pg/src/pg/statement.cr:35:14 in 'perform_exec' from lib/db/src/db/statement.cr:85:9 in 'perform_exec_and_release' from lib/db/src/db/statement.cr:70:7 in 'exec:args' from lib/db/src/db/query_methods.cr:275:7 in 'exec' from lib/avram/src/avram/migrator/runner.cr:60:7 in 'create_db' from lib/avram/src/avram/tasks/db/create.cr:20:5 in 'run_task' from lib/avram/src/avram/tasks/db/base_task.cr:6:7 in 'call' from spec/setup/database.cr:2:3 in '__crystal_main' from /home/runner/work/_temp/crystal-1.6.0-true-undefined/share/crystal/src/crystal/main.cr:115:5 in 'main_user_code' ``` * Improve CockroachDB compatibility See <cockroachdb/cockroach#38931>. * Add `restart_identity` parameter to `#truncate`
1 parent df3c20f commit 97a2cd9

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

src/avram/database.cr

+7-3
Original file line numberDiff line numberDiff line change
@@ -260,11 +260,15 @@ abstract class Avram::Database
260260
.map(&.table_name)
261261
end
262262

263-
def truncate
263+
def truncate(*, cascade : Bool = true, restart_identity : Bool = true)
264264
return if table_names.empty?
265265

266-
statement = ("TRUNCATE TABLE #{table_names.map { |name| name }.join(", ")} RESTART IDENTITY CASCADE;")
267-
database.exec statement
266+
cascade_sql = cascade ? " CASCADE" : ""
267+
restart_id_sql = restart_identity ? " RESTART IDENTITY" : ""
268+
table_names_sql = table_names.join(", ")
269+
sql = "TRUNCATE TABLE #{table_names_sql}#{restart_id_sql}#{cascade_sql}"
270+
271+
database.exec(sql)
268272
end
269273

270274
def delete

src/avram/migrator/runner.cr

+1-1
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class Avram::Migrator::Runner
5757

5858
def self.create_db(quiet? : Bool = false)
5959
DB.connect("#{credentials.connection_string}/#{db_user}") do |db|
60-
db.exec "CREATE DATABASE #{db_name} WITH OWNER DEFAULT"
60+
db.exec "CREATE DATABASE #{db_name}"
6161
end
6262
unless quiet?
6363
puts "Done creating #{db_name.colorize(:green)}"

src/avram/queryable.cr

+6-3
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,13 @@ module Avram::Queryable(T)
5353
#
5454
# To delete all data referenced by foreign keys as well, set *cascade*
5555
# to true.
56-
def self.truncate(*, cascade : Bool = false)
56+
def self.truncate(*, cascade : Bool = false, restart_identity : Bool = false)
5757
query = self.new
58-
cascade_str = cascade ? " CASCADE" : ""
59-
query.database.exec "TRUNCATE TABLE #{query.table_name}#{cascade_str}"
58+
cascade_sql = cascade ? " CASCADE" : ""
59+
restart_id_sql = restart_identity ? " RESTART IDENTITY" : ""
60+
sql = "TRUNCATE TABLE #{query.table_name}#{restart_id_sql}#{cascade_sql}"
61+
62+
query.database.exec(sql)
6063
end
6164
end
6265

0 commit comments

Comments
 (0)