diff --git a/src/sources/mssql/mssql-schema.lisp b/src/sources/mssql/mssql-schema.lisp index e8dd95d..b677f0b 100644 --- a/src/sources/mssql/mssql-schema.lisp +++ b/src/sources/mssql/mssql-schema.lisp @@ -100,7 +100,25 @@ c.table_name, c.column_name, c.data_type, - c.column_default, + 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) LIKE 'convert(%varchar%,getdate(),%)' THEN 'today' + WHEN SUBSTRING(c.column_default,3,len(c.column_default)-4) = 'getdate()' THEN 'now' + WHEN SUBSTRING(c.column_default,3,len(c.column_default)-4) LIKE '''%''' THEN SUBSTRING(c.column_default,4,len(c.column_default)-6) + ELSE SUBSTRING(c.column_default,3,len(c.column_default)-4) + 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) LIKE 'convert(%varchar%,getdate(),%)' THEN 'today' + WHEN SUBSTRING(c.column_default,2,len(c.column_default)-2) = 'getdate()' THEN 'now' + WHEN SUBSTRING(c.column_default,2,len(c.column_default)-2) LIKE '''%''' THEN SUBSTRING(c.column_default,3,len(c.column_default)-4) + ELSE SUBSTRING(c.column_default,2,len(c.column_default)-2) + END + ELSE c.column_default + END, c.is_nullable, COLUMNPROPERTY(object_id(c.table_name), c.column_name, 'IsIdentity'), c.CHARACTER_MAXIMUM_LENGTH, diff --git a/src/utils/transforms.lisp b/src/utils/transforms.lisp index 42b95ce..d2264d3 100644 --- a/src/utils/transforms.lisp +++ b/src/utils/transforms.lisp @@ -150,11 +150,12 @@ (defun float-to-string (float) "Transform a Common Lisp float value into its string representation as accepted by PostgreSQL, that is 100.0 rather than 100.0d0." - (declare (type (or null float) float)) + (declare (type (or null float string) float)) (when float (typecase float (double-float (let ((*read-default-float-format* 'double-float)) (princ-to-string float))) + (string float) (t (princ-to-string float))))) (defun set-to-enum-array (set-string)