I've got a Postgres database that makes use of the schema construct,
e.g. a typical table name might be site.subjects. Now, as far as I can
tell Datamapper has no explicit support for this. The first issue I am
running into is getting the storage_name right. The default naming
convention will obviously not work, so I tried working around this by
mapping the namespace construct in postgres (schema) to a namespace
construct in Ruby (module) using the following convention:

adapter.resource_naming_convention = lambda do |name|
 
Extlib::Inflection.pluralize(Extlib::Inflection.underscore(name)).gsub('/',
'.')
end

This will create the correct string when I use something like

module Site
    class Subject
        ...
    end
end

to declare the model. My next issue is that the DataObjectsAdapter in
Datamapper quotes the table name when putting together the SQL
statements, e.g.

          statement = "SELECT #{columns_statement(fields, qualify)}"
          statement << " FROM
#{quote_name(query.model.storage_name(name))}"

which makes it impossible to specify a schema:

 ~ ERROR:  relation "site.subjects" does not exist
LINE 1: SELECT "id", "sex", "dob", "active" FROM "site.subjects"
ORD...

My questions now is how to best fix this? Should I change the postgres
adapter to use a different quoting function which doesn't also quote
the '.' in schema.table? Would such a patch be accepted?

/Sam

-- 
You received this message because you are subscribed to the Google Groups 
"DataMapper" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/datamapper?hl=en.

Reply via email to