From fd2467c00b58b1f0ea335834478fd8cbfadade91 Mon Sep 17 00:00:00 2001 From: Matthew Bucci Date: Sun, 26 Nov 2023 15:07:33 -0800 Subject: [PATCH] switch to serial numeric types --- pg4wp/rewriters/CreateTableSQLRewriter.php | 31 ++++++++++++++++++---- tests/rewriteTest.php | 25 +++++++++++++++-- 2 files changed, 49 insertions(+), 7 deletions(-) diff --git a/pg4wp/rewriters/CreateTableSQLRewriter.php b/pg4wp/rewriters/CreateTableSQLRewriter.php index c431579..bbd09d6 100644 --- a/pg4wp/rewriters/CreateTableSQLRewriter.php +++ b/pg4wp/rewriters/CreateTableSQLRewriter.php @@ -52,13 +52,34 @@ class CreateTableSQLRewriter extends AbstractSQLRewriter $sql ); - // Fix auto_increment by adding a sequence - $pattern = '/int[ ]+NOT NULL auto_increment/i'; + // bigint + $pattern = '/bigint(\(\d+\))?([ ]*NOT NULL)?[ ]*auto_increment/i'; preg_match($pattern, $sql, $matches); if($matches) { - $seq = $table . '_seq'; - $sql = str_ireplace('NOT NULL auto_increment', "NOT NULL DEFAULT nextval('$seq'::text)", $sql); - $sql .= "\nCREATE SEQUENCE $seq;"; + $sql = preg_replace($pattern, 'bigserial', $sql); + } + + // int + $pattern = '/int(\(\d+\))?([ ]*NOT NULL)?[ ]*auto_increment/i'; + preg_match($pattern, $sql, $matches); + if($matches) { + $sql = preg_replace($pattern, 'serial', $sql); + } + + // smallint + $pattern = '/smallint(\(\d+\))?([ ]*NOT NULL)?[ ]*auto_increment/i'; + preg_match($pattern, $sql, $matches); + if($matches) { + $sql = preg_replace($pattern, 'smallserial', $sql); + } + + // Handle for numeric and decimal -- being replaced with serial + $numeric_patterns = ['/numeric(\(\d+\))?([ ]*NOT NULL)?[ ]*auto_increment/i', '/decimal(\(\d+\))?([ ]*NOT NULL)?[ ]*auto_increment/i']; + foreach($numeric_patterns as $pattern) { + preg_match($pattern, $sql, $matches); + if($matches) { + $sql = preg_replace($pattern, 'serial', $sql); + } } // Support for UNIQUE INDEX creation diff --git a/tests/rewriteTest.php b/tests/rewriteTest.php index 8855ebd..12d56f1 100644 --- a/tests/rewriteTest.php +++ b/tests/rewriteTest.php @@ -53,7 +53,7 @@ final class rewriteTest extends TestCase $expected = <<assertSame(trim($postgresql), trim($expected)); + } + + public function test_it_handles_auto_increment_without_null() + { + $sql = <<