diff --git a/clojure/src/pgloader/load_file/ast.clj b/clojure/src/pgloader/load_file/ast.clj index 4f9b1ef7..2e13a7e5 100644 --- a/clojure/src/pgloader/load_file/ast.clj +++ b/clojure/src/pgloader/load_file/ast.clj @@ -360,6 +360,8 @@ :multiple-readers [:multiple-readers true] :single-reader [:multiple-readers false] :identifier-case (first (second inner)) + :create-no-indexes [:create-indexes false] + :no-foreign-keys [:foreign-keys false] :no-reset-sequences [:reset-sequences false] :drop-schema [:drop-schema true] :reindex [:reindex true] diff --git a/clojure/src/pgloader/load_file/grammar.clj b/clojure/src/pgloader/load_file/grammar.clj index bd19f1c1..c71d2320 100644 --- a/clojure/src/pgloader/load_file/grammar.clj +++ b/clojure/src/pgloader/load_file/grammar.clj @@ -191,12 +191,12 @@ quoted-char = <'\\''> #\"[^']+\" <'\\''> with-db-clause = <'WITH'> db-option ( <','> db-option)* - db-option = include-drop | create-tables | create-indexes | create-no-tables + db-option = include-drop | create-tables | create-indexes | create-no-indexes | create-no-tables | workers | concurrency | batch-rows | batch-size | prefetch-rows | batch-concurrency | on-error-stop | on-error-resume | identifier-case | multiple-readers | single-reader | rows-per-range | chunk-size | include-no-drop | truncate | disable-triggers - | data-only | schema-only | foreign-keys | reset-sequences | no-reset-sequences + | data-only | schema-only | foreign-keys | no-foreign-keys | reset-sequences | no-reset-sequences | max-parallel-create-index | drop-schema | reindex | preserve-index-names | uniquify-index-names include-drop = <'include'> <'drop'> @@ -204,6 +204,7 @@ create-tables = <'create'> <'tables'> create-no-tables = <'create'> <'no'> <'tables'> create-indexes = <'create'> <'indexes'> + create-no-indexes = <'create'> <'no'> <'indexes'> on-error-stop = <'on'> <'error'> <'stop'> on-error-resume = <'on'> <'error'> <'resume'> <'next'> multiple-readers = <'multiple'> <'readers'> <'per'> <'thread'> @@ -220,6 +221,7 @@ data-only = <'data'> <'only'> schema-only = <'schema'> <'only'> foreign-keys = <'foreign'> <'keys'> + no-foreign-keys = <'no'> <'foreign'> <'keys'> reset-sequences = <'reset'> <'sequences'> no-reset-sequences = <'reset'> <'no'> <'sequences'> drop-schema = <'drop'> <'schema'> diff --git a/clojure/test/pgloader/load_file/parser_test.clj b/clojure/test/pgloader/load_file/parser_test.clj index 27047497..343ee52b 100644 --- a/clojure/test/pgloader/load_file/parser_test.clj +++ b/clojure/test/pgloader/load_file/parser_test.clj @@ -50,6 +50,20 @@ (is (:create-indexes (:with-options cmd))) (is (:include-drop (:with-options cmd)))))) +(deftest test-parse-database-index-and-foreign-key-options + (doseq [[options expected] + [["create indexes, foreign keys" {:create-indexes true :foreign-keys true}] + ["create no indexes" {:create-indexes false}] + ["no foreign keys" {:foreign-keys false}] + ["create no indexes, no foreign keys" + {:create-indexes false :foreign-keys false}]]] + (testing options + (let [result (parser/parse-string + (str "LOAD DATABASE FROM sqlite:///tiny.db " + "INTO postgresql:///target WITH " options ";"))] + (is (:ok result)) + (is (= expected (:with-options (:ok result)))))))) + (deftest test-parse-mysql-with-cast (let [result (parser/parse-string "LOAD DATABASE FROM mysql://user@localhost/mydb