From a migration. I want to initialize a new column called “ident” with
a string equal to “prec-#{id}” - where id is meant to be the id column
of the relevant row. This works:
Precinct.update_all("ident = 'prec-' || id ")
I am confused about whether that bit of SQL is being parsed by Rails
code, or whether it’s given to Sqlite, in which case I am writing a
database-dependent bit of code.
Thanks for your assistance!
Pito
From a migration. I want to initialize a new column called “ident”
with
a string equal to “prec-#{id}” - where id is meant to be the id column
of the relevant row. This works:
Precinct.update_all("ident = ‘prec-’ || id ")
I am confused about whether that bit of SQL is being parsed by Rails
code, or whether it’s given to Sqlite, in which case I am writing a
database-dependent bit of code.
I believe it’s going to the database, but I haven’t verified it.
Follow the source though to make sure…
first line of update_all is:
sql = "UPDATE #{quoted_table_name} SET
#{sanitize_sql_for_assignment(updates)} "
So, worth looking at sanatize_sql_for_assignment to see what it might
be doing.
-philip
Philip H. wrote:
From a migration. I want to initialize a new column called “ident”
with
a string equal to “prec-#{id}” - where id is meant to be the id column
of the relevant row. This works:
Precinct.update_all("ident = ‘prec-’ || id ")
I am confused about whether that bit of SQL is being parsed by Rails
code, or whether it’s given to Sqlite, in which case I am writing a
database-dependent bit of code.
I believe it’s going to the database, but I haven’t verified it.
It would have to be going to the DB, or else || wouldn’t have its SQL
sense of concatenation.
To the OP: if this column is just going to be the id with a constant
prefix, then you don’t need it in the DB!
Follow the source though to make sure…
first line of update_all is:
sql = "UPDATE #{quoted_table_name} SET
#{sanitize_sql_for_assignment(updates)} "
So, worth looking at sanatize_sql_for_assignment to see what it might
be doing.
-philip
Best,
–Â
Marnen Laibow-Koser
http://www.marnen.org
[email protected]
Marnen Laibow-Koser wrote:
To the OP: if this column is just going to be the id with a constant
prefix, then you don’t need it in the DB!
It’s initializing existing records in a migration. Over time the match
will not be present.
To the other point about “||” meaning concatenation. Thats what got me
thinking as some other SQLs use “+” and others use CONCAT().
On Feb 10, 2010, at 4:31 PM, Pito S. wrote:
Marnen Laibow-Koser wrote:
To the OP: if this column is just going to be the id with a constant
prefix, then you don’t need it in the DB!
It’s initializing existing records in a migration. Over time the match
will not be present.
To the other point about “||” meaning concatenation. Thats what got me
thinking as some other SQLs use “+” and others use CONCAT().
|| is standard. That said, MySQL doesn’t follow the standard and
treats || as OR. Unless you start it up in ‘ansi’ mode.
Might not matter a bit for you, but if it does, you could always do
the concatenation in rails via find/save/update_attribute. Slower,
but would work.
Here’s something else that just got me as I don’t use Sqlite much…
named_scope :approved, :conditions => “is_approved = true”
Will fail on sqlite as it doesn’t recognize true.
named_scope :approved, :conditions => [“is_approved = ?”, true]
works though. I do the [] thing for everything else but figured
‘true’ was safe. Guess not.
-philip