Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
using regex to find table names
  • Loading branch information
ninanator committed Mar 14, 2016
commit 97217399ccd8e17a4bc57705e55877086f3b3a9c
11 changes: 5 additions & 6 deletions src/yesql/generate.clj
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
(ns yesql.generate
(:require [clojure.java.jdbc :as jdbc]
[clojure.set :as set]
[clojure.string :refer [join lower-case split]]
[clojure.string :refer [join lower-case trim]]
[yesql.util :refer [create-root-var]]
[yesql.types :refer [map->Query]]
[yesql.statement-parser :refer [tokenize]])
[yesql.statement-parser :refer [tokenize insert-table-name-regex]])
(:import [yesql.types Query]))

(def in-list-parameter?
Expand Down Expand Up @@ -78,10 +78,9 @@
(defn insert-handler
[db sql params call-options]
(if (vector? params)
(let [table-string-position 0
table-position 2
table-keyword (keyword ((split (sql table-string-position) #" ") table-position))]
(apply jdbc/insert! db table-keyword params))
(let [full-query (apply str sql)
table-name (re-find insert-table-name-regex full-query)]
(apply jdbc/insert! db table-name params))
(let [[rewritten-sql & rewritten-params] (rewrite-query-for-jdbc sql params)]
(jdbc/db-do-prepared-return-keys db rewritten-sql rewritten-params))))

Expand Down
2 changes: 2 additions & 0 deletions src/yesql/statement_parser.clj
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
[yesql.instaparse-util :refer [process-instaparse-result]])
(:import [yesql.types Query]))

(def insert-table-name-regex #"(?i)(?<=INSERT INTO\s).*?(?=\sVALUES|\s\()")

(def parser
(instaparse/parser (io/resource "yesql/statement.bnf")))

Expand Down
10 changes: 10 additions & 0 deletions test/yesql/statement_parser_test.clj
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,16 @@
[yesql.types :refer [map->Query]]
[yesql.statement-parser :refer :all]))

(do-template [statement _ table-name-result]
(do (expect (quote table-name-result)
(re-find insert-table-name-regex statement)))

"INSERT INTO table (:column1, :column2) VALUES (a, b)" => "table"
"insert into table (:column1, :column2) VALUES (a, b)" => "table"
"INSERT INTO table VALUES (a, b)" => "table"
"insert into table VALUES (a, b)" => "table"
"insert into table values (a, b)" => "table")

(do-template [statement _ split-result]
(do (expect (quote split-result)
(tokenize statement))
Expand Down