# HG changeset patch # User jbe # Date 1438729346 -7200 # Node ID 3995f9d2d61022dac9bb19bf1da1205f2b5d9208 # Parent 56cb5ed5e692c9663778c64889b490586e143f80 Reverted previous changeset (6ad9f6113c52, Support for primary keys in JSON documents) diff -r 56cb5ed5e692 -r 3995f9d2d610 libraries/mondelefant/mondelefant.lua --- a/libraries/mondelefant/mondelefant.lua Mon Jul 27 21:56:29 2015 +0200 +++ b/libraries/mondelefant/mondelefant.lua Wed Aug 05 01:02:26 2015 +0200 @@ -1078,15 +1078,8 @@ end local primary_key = self._class:get_primary_key_list() local primary_key_sql = { sep = ", " } - if primary_key.json_doc then - primary_key_sql[1] = { - '("$"->>?)::$ AS "json_key"', - {primary_key.json_doc}, primary_key.key, {primary_key.type} - } - else - for idx, value in ipairs(primary_key) do - primary_key_sql[idx] = '"' .. value .. '"' - end + for idx, value in ipairs(primary_key) do + primary_key_sql[idx] = '"' .. value .. '"' end if self._new then local fields = {sep = ", "} @@ -1095,34 +1088,52 @@ add(fields, {'"$"', {key}}) add(values, {'?', self[key]}) end - local db_error, db_result - if #fields == 0 then - db_error, db_result = self._connection:try_query( + if compat_returning then -- compatibility for PostgreSQL 8.1 + local db_error, db_result1, db_result2 = self._connection:try_query( { - 'INSERT INTO $ DEFAULT VALUES RETURNING ($)', - {self._class:get_qualified_table()}, - primary_key_sql - }, - "object" - ) - else - db_error, db_result = self._connection:try_query( - { - 'INSERT INTO $ ($) VALUES ($) RETURNING ($)', + 'INSERT INTO $ ($) VALUES ($)', {self._class:get_qualified_table()}, fields, values, primary_key_sql }, + "list", + { + 'SELECT currval(?)', + self._class.table .. '_id_seq' + }, "object" ) - end - if db_error then - return db_error - end - if primary_key.json_doc then - self[primary_key.json_doc][primary_key.key] = db_result.json_key + if db_error then + return db_error + end + self.id = db_result2.id else + local db_error, db_result + if #fields == 0 then + db_error, db_result = self._connection:try_query( + { + 'INSERT INTO $ DEFAULT VALUES RETURNING ($)', + {self._class:get_qualified_table()}, + primary_key_sql + }, + "object" + ) + else + db_error, db_result = self._connection:try_query( + { + 'INSERT INTO $ ($) VALUES ($) RETURNING ($)', + {self._class:get_qualified_table()}, + fields, + values, + primary_key_sql + }, + "object" + ) + end + if db_error then + return db_error + end for idx, value in ipairs(primary_key) do self[value] = db_result[value] end @@ -1135,20 +1146,12 @@ end if #command_sets >= 1 then local primary_key_compare = {sep = " AND "} - if primary_key.json_doc then - primary_key_compare[1] = { - '("$"->>?)::$ = ?', - {primary_key.json_doc}, primary_key.key, {primary_key.type}, - self[primary_key.json_doc][primary_key.key] + for idx, value in ipairs(primary_key) do + primary_key_compare[idx] = { + "$ = ?", + {'"' .. value .. '"'}, + self[value] } - else - for idx, value in ipairs(primary_key) do - primary_key_compare[idx] = { - "$ = ?", - {'"' .. value .. '"'}, - self[value] - } - end end local db_error = self._connection:try_query{ 'UPDATE $ SET $ WHERE $', @@ -1193,20 +1196,12 @@ end local primary_key = self._class:get_primary_key_list() local primary_key_compare = {sep = " AND "} - if primary_key.json_doc then - primary_key_compare[1] = { - '("$"->>?)::$ = ?', - {primary_key.json_doc}, primary_key.key, {primary_key.type}, - self[primary_key.json_doc][primary_key.key] + for idx, value in ipairs(primary_key) do + primary_key_compare[idx] = { + "$ = ?", + {'"' .. value .. '"'}, + self[value] } - else - for idx, value in ipairs(primary_key) do - primary_key_compare[idx] = { - "$ = ?", - {'"' .. value .. '"'}, - self[value] - } - end end return self._connection:try_query{ 'DELETE FROM $ WHERE $',