2016-02-19 10 views
5

Próbowałem przechodzącą wektor Clojure, próbował również następujący format:Jak wstawiać i aktualizować tablice postgresów używając yesql w clojure?

-- name: insert-into-sometable<! 
-- inserts in the sometable the lid and uids 
INSERT INTO sometable 
(lid, uids) values(:lid, ARRAY[:uids]) 

Ale obie metody zgłasza błąd niezgodności danych.

Myślę, że jeśli mogę wywołać funkcje tablicy postgres z pliku zapytania, to można je łatwo zaktualizować i wstawić. Proszę pomóż.

góry dzięki

+0

Mogę być szczekając złe drzewo, ale [to jak wygląda dobre miejsce, aby rozpocząć] (https://github.com/remodoy/clj-postgresql/blob/master/README.md). Nie wiem, czy to dotyczy Yesql. –

Odpowiedz

4

komunikat o błędzie Twojego 2nd try daje wskazówkę Subtile:

AssertionError Assert failed: Query argument mismatch. 
Expected keys: (:uids]) 
Actual keys: (:uids) 
Missing keys: (:uids]) 

Wygląda na to, że rzeczy idą na południe, gdy yesql spróbuje przeanalizować klucz :uids, gdy dołącza nawias końcowy definicji tablicy. Spróbujmy czegoś innego:

-- name: insert-into-sometable<! 
-- inserts in the sometable the lid and uids 
INSERT INTO sometable 
(lid, uids) values(:lid, ARRAY[ :uids ]) 

zauważy dodatkowe spacje między :uids i wsporników tablicy.

=> (insert-into-sometable<! {:lid 1, :uids [1 2 42]) 
;; => 1 

Wygląda na błąd w yesql do mnie, nigdy nie powinno się :uid] analizowany jako ważnego klucza.

Edycja: Zamierzał złożyć błąd za pomocą yesql, ale jest już naprawiony w ostatnio wydanej wersji 0.5.2.

1

Tablice SQL nie są obsługiwane przez yesql, ale clojure.java.jdbc oferuje punkt wewnętrzny w ISQLParameter protocol, które można wykorzystać jako:

(deftype StringArray [items] 
    clojure.java.jdbc/ISQLParameter 
    (set-parameter [_ stmt ix] 
    (let [as-array (into-array Object items) 
      jdbc-array (.createArrayOf (.getConnection stmt) "text" as-array)] 
     (.setArray stmt ix jdbc-array)))) 

(insert-into-sometable<! db-spec "hi" (->StringArray ["one" "two"])) 

pamiętać, że nie można przedłużyć wektory Clojure jako wektory ma special meaning w yesql

Powiązane problemy