Korma
        
            Tasty SQL for Clojure.
     sqlkorma
           
               
           
            
        
            
             
              
      
                 
                
                
            
            
When I make a call to insert with multiple rows in korma I get the exception...
Failure to execute query with SQL:
 ...snip...
SQLException:
 Message: near ",": syntax error
 SQLState: null
 Error Code: 0
What is going on?
Extra details: I am using sqlite as my database.
        Source: (StackOverflow)
                  
                 
            
                 
                 
            
                 
                
                
            
            
I'm trying to get Korma to output the SQL it would execute so I can debug a problem I'm having, but the docs are very terse on how to use the as-sql function. Can anyone give me an example of how to make Korma output the SQL for an INSERT query?
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I'm trying to reproduce this query from the Postgres docs:
WITH moved_rows AS (
    DELETE FROM products
    WHERE
        "date" >= '2010-10-01' AND
        "date" < '2010-11-01'
    RETURNING *
)
INSERT INTO products_log
SELECT * FROM moved_rows;
Can Korma actually do it (besides just writing raw SQL, of course)? I see no mention of it in the docs.
Thanks...
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
How does sum-if work in Korma?
Here is the sample query 
SELECT SUM(if(items.quantities > 1, 1, 0)) AS multiples FROM items;
I got this to work with raw-exec provided by Korma. But, I am interested in knowing how to write this in the Korma syntax.
I have tried looking at http://sqlkorma.com/docs#select
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I've been trying to do the following in Korma to no avail:
sql:
PREPARE q (int) AS SELECT * FROM post a
    WHERE EXISTS 
        (SELECT parent_id
         FROM post_map 
         WHERE parent_id=a.id AND parent_id=$1);
EXECUTE q(1);
my best Korma attempt:
(defn children [parent-id]        ;; clojure
      (if (number? parent-id)
        (exec-raw (str
          "PREPARE q (int) AS SELECT * FROM post a WHERE EXISTS 
               (SELECT parent_id FROM post_map WHERE parent_id=a.id AND parent_id=$1); 
           EXECUTE q(" parent-id ")") 
         :results)))
And this is the error I keep getting: (I don't really understand the :: operator below:)
Failure to execute query with SQL:
PREPARE q (int) AS SELECT * FROM post a WHERE EXISTS 
          (SELECT parent_id FROM post_map WHERE parent_id=a.id AND parent_id=$1); 
       EXECUTE q(1)  ::  nil
PSQLException:
 Message: No results were returned by the query.
 SQLState: 02000
 Error Code: 0
PSQLException No results were returned by the query.  org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery (AbstractJdbc2Statement.java:274)
I don't think this is a terribly outlandish thing to want to do with a query, so I'm wondering if Korma just isn't going to work for my project. Am I just doing it wrong?
UPDATE: this is what I ended up doing (after I bailed on Korma [sorry Korma]).
(defn children [parent-id]
  (if (unsigned? parent-id)
    (sql/with-connection db
      (sql/with-query-results results
         [(str "select " field-list ", b.parent_id from post a, post_map b where a.id=b.child_id and a.id in "
               "(select child_id from post c, post_map d where c.id=d.parent_id and c.id=?)") parent-id]
           (into [] results)))))
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I'm currently using SQLKorma for a project, and I'm running into a bit of a snag with it.
I have constructed a query with two left-joins; one of them contains an array with entries that I wish to use in my WHERE clause.
This is trivial to express in SQL.  Note that this is a primarily redacted query.
SELECT
  cu.name,
  c.description,
  c.created_at AT TIME ZONE 'utc'
FROM calendar_users cu LEFT JOIN calendars c ON cu.id = c.user_id
  LEFT JOIN meetings m ON c.id = m.id
WHERE 'status_report' ILIKE ANY (m.meeting_metadata)
GROUP BY m.meeting_metadata, c.created_at, cu.name, cu.description
ORDER BY c.created_at DESC
The portion in regards to ILIKE ANY is what I'd like to be able to translate to Korma.
I understand from the docs that the ANY clause isn't supported from the WHERE clause, and I should look into using raw or exec-raw instead.
With that, I want to pass in a parameterized raw string into the WHERE clause to accomplish what I'm trying to go for.
This I've attempted, but it does fails with a syntax error in Postgres:
(select calendars
    (fields calendar-user-cols)
    (join :calendar_users (= :calendars.user_id :calendar_users.id))
    (join :meetings (= :calendars.id :meetings.id))
    (where (raw ["? ILIKE ANY(meetings.meeting_metadata)" metadata])))
Specifically:
PSQLException:
 Message: ERROR: syntax error at or near "["
  Position: 1006
 SQLState: 42601
 Error Code: 0
How would I go about this using Korma?  Do I have to resort to a full-blown exec-raw query?
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
Using Korma and MySQL I am trying to select from a table named posts, there is a field for the published date that is nil by default.
mysql> describe posts;
+-----------+--------------+------+-----+---------------------+-------+
| Field     | Type         | Null | Key | Default             | Extra |
+-----------+--------------+------+-----+---------------------+-------+
| id        | int(11)      | NO   | PRI | 0                   |       |
| title     | varchar(250) | YES  |     | NULL                |       |
| content   | text         | YES  |     | NULL                |       |
| status    | tinyint(1)   | YES  |     | 0                   |       |
| created   | timestamp    | NO   |     | CURRENT_TIMESTAMP   |       |
| published | timestamp    | NO   |     | 0000-00-00 00:00:00 |       |
| author    | int(11)      | NO   | MUL | NULL                |       |
+-----------+--------------+------+-----+---------------------+-------+
7 rows in set (0.02 sec)
If I try to select and use the published field I get the following error:
  user=> (select posts (fields :id :title :content :status :created
  :published)) Failure to execute query with SQL: SELECT posts.id,
  posts.title, posts.content, posts.status, posts.created,
  posts.published FROM posts  ::  [] ClassCastException
  java.lang.RuntimeException cannot be cast to java.sql.SQLException 
  clojure.java.jdbc/print-sql-exception (jdbc.clj:350)
If I don't use the published field everything works fine:
  user=> (select posts (fields :id :title :content :status :created 
  :author)) [{:id 1, :title "Hello World!", :content "Welcome to
  Beats, the World's most advanced Clojure Beat Engine!", :status
  true, :created #, :author 1} {:id 2,
  :title "Hello World!, again!", :content "Sayin 't 'gain! Welcome
  to Beats, the World's most advanced Clojure Beat Engine!",
  :status true, :created #, :author 2}]
How can I handle this field?  I've tried to add a transform function to my entity with just a simple log statement, but it doesn't appear to even get called.
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I am trying to use where macro in a function:
(defentity student
  (pk :id)
  (table :student)
  (entity-fields :id :name :age :class)
  (database prod))
(defn query-student [cond]
  (select student
    (where cond)))
I test it:
(select student
  (where {:age [> 13]}))
(query-student '{:age [> 13]})
it looks OK, but this
(select student
  (where (or {:age [> 13]} {:class [in ["1" "2" "3"]]})))
(query-student '(or {:age [> 13]} {:class [in ["1" "2" "3"]]}))
does not work!
Failure to execute query with SQL:
SELECT "student".* FROM "student" WHERE (or {:age [> 13]} {:class [in ["1" "2" "3"]]})  ::      []
PSQLException:
 Message: ERROR: syntax error at or near "or"
  Location:42
 SQLState: 42601
 Error Code: 0
PSQLException ERROR: syntax error at or near "or"
  Location:42  org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse  (QueryExecutorImpl.java:2101)
I want to know why? Something wrong?
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I am using compojure, cheshire and korma (and postgre db) for creating a rest service.
I've created a table with two string fields (name and description) with such structure:
(defentity posts
  (pk :id)
  (table :posts)
  (entity-fields :name :description))
I can insert records into this table but when I try to exec 
(defn get-all-posts [] 
  (select posts))
and return the results from the server
defroutes app-routes
 (GET "/" [] (get-start))
 (context "/posts" []
   (GET "/" [] (get-all-posts))
 ...
I receive such an error:
java.lang.IllegalArgumentException
No implementation of method: :render of protocol: #'compojure.response/Renderable found for class: clojure.lang.PersistentVector
As I see I need to convert posts collection to json. How to do it?
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I am trying to create a very simple API with korma
Users can query a database like so:
localhost:8080/my_postgres_db/users.json?where[age]=50&limit=1  
Currently I am getting an error when trying to apply a where clause to an existing, composable, query.
clojure.lang.ArityException: Wrong number of args (2) passed to: core$where
The code in question:
(defn- comp-query [q [func arg]]
  (let [sql-fn (ns-resolve 'korma.core (-> func name symbol))]
    (sql-fn q arg)))
(defn compose-query [table col]
  (reduce comp-query (select* table) col))
Usage:
 (def clauses {:where {:column1 10} :fields "a,b" :limit 10 :offset 500})
 (-> (compose-query table clauses) select)
Everything behaves as expected, except for where clauses. I can combine limit, offset and fields in any way I choose and I get the expected results. Only when I have a :where key in my map do I run into the error.
Am I attempting something I shouldn't? Is this bad clojure? Any help would be appreciated.
Note: I have read this SO question
Edit: from lein repl I can manually compose a query in the same fashion and it works
(where (select* "my_table") {:a 5})
Edit:
If I modify my compose-query function to this:
(defn compose-query [table col]
  ; remove where clause to process seperately
  (let [base (reduce comp-query (select* table) (dissoc col :where))]
    (if-let [where-clause (:where col)]
      (-> base (where where-clause))
      base)))
Everything works as expected.
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I am trying to generate korma query conditions based on a map of columns and values that I pass into a function.
I am finding that when an empty map is passed to korma's where:
(select "things"
  (where conditions))
Generates queries with an empty WHERE which causes a SQL error:
SELECT * FROM things WHERE () LIMIT 10 
However using this form:
(select "things"
  (if-not (empty? conditions) 
    (where conditions)))
Results in an error: "Wrong number of args (1) passed to: core$where"       
Is there an idiomatic way of handling dynamic clauses in korma?
UPDATE
The following works, but is pretty clumsy (note the strangely necessary if format)
(defn do-select []
  (->  (select* "things") 
    (fields :id :data)
    (limit 10)))
(defn add-constraints [query conditions]
  (if (empty? conditions) 
      query
      (where query (conditions-to-clause-map conditions))))
(select (do-select) 
  (add-constraints conditions)           
  (where (is_owner? owner)))     
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I am trying to use clojure kORMa with compojure, the webapp is here nepleaks.
First I added kORMa dependency 
[korma "0.3.0-RC4"]
lein deps works cool, then created src/hotel/conf/datasource.clj which looks as follows : 
(ns hotel.conf.datasource)
   (use [korma.db])
   (use [korma.core])
)
(defdb db (mysql {:db "nepleaks"
                     :user "root"
                     :password "mysql55"}))
(defentity users)
lein ring server is neither throwing any exception nor creating the database entity. 
Am I missing something? Do I need more configuration?
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I want to use clojure to build a web service with a RESTful API that exposes resources stored in a relational database (mysql in this case). I'd like to use a library that, given a specification of the db schema, would translate incoming requests to db queries, or korma constructs.
Examples might be:
GET /users?status=4
translates to something like:
SELECT * FROM `users` WHERE `status` = 4;
or:
PUT /users/12
would be:
UPDATE `users` SET ... WHERE `id` = 12
Is there anything out there that would facilitate this?
        Source: (StackOverflow)
                  
                 
            
                 
                
                
            
            
I have some tables with a lot of columns where I sometimes need to just exclude 5-6 out of 50-60. Yes my tables are 3NF normalised, yes some have even more than 60 columns, if this sounds weird to you dear reader, try modelling biological entities. 
To my question:
Is it possible to exclude fields by default in selects in Korma instead of specifying tens of columns in entity-fields at entity definition?
        Source: (StackOverflow)