diff --git a/src/texas_pgsql.erl b/src/texas_pgsql.erl index 0e3f392..715c223 100644 --- a/src/texas_pgsql.erl +++ b/src/texas_pgsql.erl @@ -165,13 +165,17 @@ update(Conn, Table, Record, UpdateData) -> SQLCmd = "UPDATE " ++ texas_sql:sql_field(Table, ?MODULE) ++ texas_sql:set_clause(UpdateData, ?MODULE) ++ - texas_sql:where_clause(Record, ?MODULE), + where_for_update(Record), case exec(SQLCmd, Conn) of {ok, _} -> UpdateRecord = lists:foldl(fun({Field, Value}, Rec) -> Rec:Field(Value) end, Record, UpdateData), - select(Conn, Table, all, [{where, UpdateRecord}]); + WhereClause = case UpdateRecord:id() of + undefined -> UpdateRecord; + _ -> [{id, UpdateRecord:id()}] + end, + select(Conn, Table, all, [{where, WhereClause}]); E -> E end. @@ -179,7 +183,7 @@ update(Conn, Table, Record, UpdateData) -> delete(Conn, Table, Record) -> SQLCmd = "DELETE FROM " ++ texas_sql:sql_field(Table, ?MODULE) ++ - texas_sql:where_clause(Record, ?MODULE), + where_for_update(Record), case exec(SQLCmd, Conn) of {ok, _} -> ok; E -> E @@ -234,3 +238,10 @@ sql(column_def, Name, Type, Len, Autoincrement, NotNull, Unique, Default) -> sql(notnull, {ok, true}) -> " NOT NULL"; sql(unique, {ok, true}) -> " UNIQUE"; sql(_, _) -> "". + +where_for_update(Record) -> + case Record:id() of + undefined -> texas_sql:where_clause(Record, ?MODULE); + _ -> texas_sql:where_clause(texas_sql:clause(where, [{where, [{id, Record:id()}]}]), ?MODULE) + end. +