mirror of
https://github.com/dimitri/pgloader.git
synced 2026-05-04 18:36:12 +02:00
Fix support for newid() from MS SQL.
Several places in the code are involved to deal with the default values from MS SQL. The catalog query is dealing with strange quoting rules on the source side and used to fill in directly the PostgreSQL expected value. But then the quoting of a function call wasn't properly handled. Rather than coping with the quoting rules here, have the catalog query return a pgloader specific placeholder "GENERATE_UUID". Then the MS SQL specific code can normalize that to the symbol :generate_uuid. Then the generic PostgreSQL DDL code can implement the proper replacement for that symbol, not having to know where it comes from. Fix #742.
This commit is contained in:
parent
0a315214f3
commit
4fed8c5eca
@ -122,7 +122,7 @@
|
||||
'((:null . "NULL")
|
||||
(:current-date . "CURRENT_DATE")
|
||||
(:current-timestamp . "CURRENT_TIMESTAMP")
|
||||
(:generate-uuid . "uuid_generate_v1()"))
|
||||
(:generate-uuid . "uuid_generate_v4()"))
|
||||
"Common normalized default values and their PostgreSQL spelling.")
|
||||
|
||||
(defmethod format-default-value ((column column) &key (stream nil))
|
||||
|
||||
@ -159,7 +159,8 @@
|
||||
|
||||
((and (stringp default)
|
||||
(or (string= "newid()" default)
|
||||
(string= "newsequentialid()" default)))
|
||||
(string= "newsequentialid()" default)
|
||||
(string= "GENERATE_UUID" default)))
|
||||
:generate-uuid)
|
||||
|
||||
(t (column-default pgcol)))))
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
CASE
|
||||
WHEN c.COLUMN_DEFAULT LIKE '((%' AND c.COLUMN_DEFAULT LIKE '%))' THEN
|
||||
CASE
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) = 'newid()' THEN 'generate_uuid_v4()'
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) = 'newid()' THEN 'GENERATE_UUID'
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) LIKE 'convert(%varchar%,getdate(),%)' THEN 'today'
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) = 'getdate()' THEN 'CURRENT_TIMESTAMP'
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4) LIKE '''%''' THEN SUBSTRING(c.COLUMN_DEFAULT,4,len(c.COLUMN_DEFAULT)-6)
|
||||
@ -19,7 +19,7 @@
|
||||
END
|
||||
WHEN c.COLUMN_DEFAULT LIKE '(%' AND c.COLUMN_DEFAULT LIKE '%)' THEN
|
||||
CASE
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) = 'newid()' THEN 'generate_uuid_v4()'
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) = 'newid()' THEN 'GENERATE_UUID'
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) LIKE 'convert(%varchar%,getdate(),%)' THEN 'today'
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) = 'getdate()' THEN 'CURRENT_TIMESTAMP'
|
||||
WHEN SUBSTRING(c.COLUMN_DEFAULT,2,len(c.COLUMN_DEFAULT)-2) LIKE '''%''' THEN SUBSTRING(c.COLUMN_DEFAULT,3,len(c.COLUMN_DEFAULT)-4)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user