[postmodern-devel] Dash in Postgresql Column name - "query-dao"

Phil zaries at global.co.za
Wed Dec 3 15:28:17 UTC 2008


On Wed, 2008-12-03 at 16:08 +0100, Maciej Pasternacki wrote:
> On 2008-12-03, at 15:46, Phil wrote:
> 
> > query-dao does not seem to like column names with a dash in them like
> > column-name and I suspect it would have the same problem with spaces.
> >
> > I know that the preffered for postgresql would be column_name but I
> > though that being able to use the dash would simplify going from db to
> > dao object to html and back, well at least for me.
> >
> > Is column names with dashes just not supported, a bug or on the wish
> > list?
> 
> Everything is supported with :RAW sql-op:  (select-dao 'foo (:= (:raw  
> "\"foo-bar\"") 23)) calls query (SELECT * FROM foo WHERE ("foo-bar" =  
> 23)) (SELECT-DAO is a shortcut for QUERY-DAO, where you supply only  
> the WHERE clause).  There doesn't seem to exist any other way now, but  
> it may be possible to add a bit of macro sugar.
> 
> Marijn, have you thought of exporting S-SQL::DEF-SQL-OP, so that users  
> can create their own "S-SQL macros"?  This may come useful in some  
> cases, like above, or to create reusable parametrized query  
> fragments.  With complex queries, macros may come in handy.
> 
> Regards,
> Maciej
> 


Ok maybe I should have been a bit more precise in my description. I was
not using the columns names in the query.

Here follows a quick repeatable test:

CREATE TABLE test
(
  id integer NOT NULL,
  "some" character varying NOT NULL,
  "test-dash" character varying
)
WITH (OIDS=FALSE);
ALTER TABLE test OWNER TO postgres;

insert into test (id,"some","test-dash") values(1, 'some','dash-1');

(defclass test ()
  ((id :col-type string :initarg :id
   :accessor biographical-id)
   (some :col-type  (or db-null string) :initarg :some
     :accessor biographical-some)
   (test-dash :col-type  (or db-null string) :initarg :test-dash
    :accessor biographical-test-dash))
  (:metaclass postmodern:dao-class)
  (:keys id))

(postmodern:query-dao 'test (:select '* :from 'test))

That last bit produces the following error:

No slot named test-dash in class TEST. DAO out of sync with table, or
incorrect query used.
   [Condition of type SIMPLE-ERROR]







More information about the postmodern-devel mailing list