From c88aa571002f0dd713158f8b80bfeacbd0a69569 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Mon, 17 Dec 2018 17:05:22 -0500 Subject: When using a file cache, add plugin-loading code (for SHA512) to tops of .sql files --- src/cjr_print.sml | 8 +++++++- src/mysql.sml | 2 +- src/postgres.sml | 2 +- src/settings.sig | 4 +++- src/settings.sml | 7 ++++--- src/sqlite.sml | 2 +- 6 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/cjr_print.sml b/src/cjr_print.sml index 87d2576c..e0153944 100644 --- a/src/cjr_print.sml +++ b/src/cjr_print.sml @@ -3783,7 +3783,13 @@ fun p_sql env (ds, _) = end) env ds in - box (string (#sqlPrefix (Settings.currentDbms ())) :: pps) + box ((case Settings.getFileCache () of + NONE => [] + | SOME _ => case #supportsSHA512 (Settings.currentDbms ()) of + NONE => (ErrorMsg.error "Using file cache with database that doesn't support SHA512"; + []) + | SOME line => [string line, newline, newline]) + @ string (#sqlPrefix (Settings.currentDbms ())) :: pps) end end diff --git a/src/mysql.sml b/src/mysql.sml index e7cad84e..768c5441 100644 --- a/src/mysql.sml +++ b/src/mysql.sml @@ -1610,6 +1610,6 @@ val () = addDbms {name = "mysql", nestedRelops = false, windowFunctions = false, supportsIsDistinctFrom = true, - supportsSHA512 = false} + supportsSHA512 = NONE} end diff --git a/src/postgres.sml b/src/postgres.sml index 2b6bee8c..a33a1de4 100644 --- a/src/postgres.sml +++ b/src/postgres.sml @@ -1154,7 +1154,7 @@ val () = addDbms {name = "postgres", nestedRelops = true, windowFunctions = true, supportsIsDistinctFrom = true, - supportsSHA512 = true} + supportsSHA512 = SOME "CREATE EXTENSION pgcrypto;"} val () = setDbms "postgres" diff --git a/src/settings.sig b/src/settings.sig index 6ba7e96a..f94525bb 100644 --- a/src/settings.sig +++ b/src/settings.sig @@ -220,7 +220,9 @@ signature SETTINGS = sig nestedRelops : bool, windowFunctions : bool, supportsIsDistinctFrom : bool, - supportsSHA512 : bool + supportsSHA512 : string option (* If supported, give the SQL code to + * enable the feature in a particular + * database. *) } val addDbms : dbms -> unit diff --git a/src/settings.sml b/src/settings.sml index 3772fc04..6499da67 100644 --- a/src/settings.sml +++ b/src/settings.sml @@ -647,7 +647,7 @@ type dbms = { nestedRelops : bool, windowFunctions: bool, supportsIsDistinctFrom : bool, - supportsSHA512 : bool + supportsSHA512 : string option } val dbmses = ref ([] : dbms list) @@ -681,7 +681,7 @@ val curDb = ref ({name = "", nestedRelops = false, windowFunctions = false, supportsIsDistinctFrom = false, - supportsSHA512 = false} : dbms) + supportsSHA512 = NONE} : dbms) fun addDbms v = dbmses := v :: !dbmses fun setDbms s = @@ -728,7 +728,8 @@ fun getSigFile () = !sigFile val fileCache = ref (NONE : string option) fun setFileCache v = - (if Option.isSome v andalso not (#supportsSHA512 (currentDbms ())) then + (if Option.isSome v andalso (case #supportsSHA512 (currentDbms ()) of NONE => true + | SOME _ => false) then ErrorMsg.error "The selected database engine is incompatible with file caching." else (); diff --git a/src/sqlite.sml b/src/sqlite.sml index db7052d1..0a3ae4ea 100644 --- a/src/sqlite.sml +++ b/src/sqlite.sml @@ -856,6 +856,6 @@ val () = addDbms {name = "sqlite", nestedRelops = false, windowFunctions = false, supportsIsDistinctFrom = false, - supportsSHA512 = false} + supportsSHA512 = NONE} end -- cgit v1.2.3