webmcp
changeset 369:3995f9d2d610
Reverted previous changeset (6ad9f6113c52, Support for primary keys in JSON documents)
author | jbe |
---|---|
date | Wed Aug 05 01:02:26 2015 +0200 (2015-08-05) |
parents | 56cb5ed5e692 |
children | 35d1b6485145 |
files | libraries/mondelefant/mondelefant.lua |
line diff
1.1 --- a/libraries/mondelefant/mondelefant.lua Mon Jul 27 21:56:29 2015 +0200 1.2 +++ b/libraries/mondelefant/mondelefant.lua Wed Aug 05 01:02:26 2015 +0200 1.3 @@ -1078,15 +1078,8 @@ 1.4 end 1.5 local primary_key = self._class:get_primary_key_list() 1.6 local primary_key_sql = { sep = ", " } 1.7 - if primary_key.json_doc then 1.8 - primary_key_sql[1] = { 1.9 - '("$"->>?)::$ AS "json_key"', 1.10 - {primary_key.json_doc}, primary_key.key, {primary_key.type} 1.11 - } 1.12 - else 1.13 - for idx, value in ipairs(primary_key) do 1.14 - primary_key_sql[idx] = '"' .. value .. '"' 1.15 - end 1.16 + for idx, value in ipairs(primary_key) do 1.17 + primary_key_sql[idx] = '"' .. value .. '"' 1.18 end 1.19 if self._new then 1.20 local fields = {sep = ", "} 1.21 @@ -1095,34 +1088,52 @@ 1.22 add(fields, {'"$"', {key}}) 1.23 add(values, {'?', self[key]}) 1.24 end 1.25 - local db_error, db_result 1.26 - if #fields == 0 then 1.27 - db_error, db_result = self._connection:try_query( 1.28 + if compat_returning then -- compatibility for PostgreSQL 8.1 1.29 + local db_error, db_result1, db_result2 = self._connection:try_query( 1.30 { 1.31 - 'INSERT INTO $ DEFAULT VALUES RETURNING ($)', 1.32 - {self._class:get_qualified_table()}, 1.33 - primary_key_sql 1.34 - }, 1.35 - "object" 1.36 - ) 1.37 - else 1.38 - db_error, db_result = self._connection:try_query( 1.39 - { 1.40 - 'INSERT INTO $ ($) VALUES ($) RETURNING ($)', 1.41 + 'INSERT INTO $ ($) VALUES ($)', 1.42 {self._class:get_qualified_table()}, 1.43 fields, 1.44 values, 1.45 primary_key_sql 1.46 }, 1.47 + "list", 1.48 + { 1.49 + 'SELECT currval(?)', 1.50 + self._class.table .. '_id_seq' 1.51 + }, 1.52 "object" 1.53 ) 1.54 - end 1.55 - if db_error then 1.56 - return db_error 1.57 - end 1.58 - if primary_key.json_doc then 1.59 - self[primary_key.json_doc][primary_key.key] = db_result.json_key 1.60 + if db_error then 1.61 + return db_error 1.62 + end 1.63 + self.id = db_result2.id 1.64 else 1.65 + local db_error, db_result 1.66 + if #fields == 0 then 1.67 + db_error, db_result = self._connection:try_query( 1.68 + { 1.69 + 'INSERT INTO $ DEFAULT VALUES RETURNING ($)', 1.70 + {self._class:get_qualified_table()}, 1.71 + primary_key_sql 1.72 + }, 1.73 + "object" 1.74 + ) 1.75 + else 1.76 + db_error, db_result = self._connection:try_query( 1.77 + { 1.78 + 'INSERT INTO $ ($) VALUES ($) RETURNING ($)', 1.79 + {self._class:get_qualified_table()}, 1.80 + fields, 1.81 + values, 1.82 + primary_key_sql 1.83 + }, 1.84 + "object" 1.85 + ) 1.86 + end 1.87 + if db_error then 1.88 + return db_error 1.89 + end 1.90 for idx, value in ipairs(primary_key) do 1.91 self[value] = db_result[value] 1.92 end 1.93 @@ -1135,20 +1146,12 @@ 1.94 end 1.95 if #command_sets >= 1 then 1.96 local primary_key_compare = {sep = " AND "} 1.97 - if primary_key.json_doc then 1.98 - primary_key_compare[1] = { 1.99 - '("$"->>?)::$ = ?', 1.100 - {primary_key.json_doc}, primary_key.key, {primary_key.type}, 1.101 - self[primary_key.json_doc][primary_key.key] 1.102 + for idx, value in ipairs(primary_key) do 1.103 + primary_key_compare[idx] = { 1.104 + "$ = ?", 1.105 + {'"' .. value .. '"'}, 1.106 + self[value] 1.107 } 1.108 - else 1.109 - for idx, value in ipairs(primary_key) do 1.110 - primary_key_compare[idx] = { 1.111 - "$ = ?", 1.112 - {'"' .. value .. '"'}, 1.113 - self[value] 1.114 - } 1.115 - end 1.116 end 1.117 local db_error = self._connection:try_query{ 1.118 'UPDATE $ SET $ WHERE $', 1.119 @@ -1193,20 +1196,12 @@ 1.120 end 1.121 local primary_key = self._class:get_primary_key_list() 1.122 local primary_key_compare = {sep = " AND "} 1.123 - if primary_key.json_doc then 1.124 - primary_key_compare[1] = { 1.125 - '("$"->>?)::$ = ?', 1.126 - {primary_key.json_doc}, primary_key.key, {primary_key.type}, 1.127 - self[primary_key.json_doc][primary_key.key] 1.128 + for idx, value in ipairs(primary_key) do 1.129 + primary_key_compare[idx] = { 1.130 + "$ = ?", 1.131 + {'"' .. value .. '"'}, 1.132 + self[value] 1.133 } 1.134 - else 1.135 - for idx, value in ipairs(primary_key) do 1.136 - primary_key_compare[idx] = { 1.137 - "$ = ?", 1.138 - {'"' .. value .. '"'}, 1.139 - self[value] 1.140 - } 1.141 - end 1.142 end 1.143 return self._connection:try_query{ 1.144 'DELETE FROM $ WHERE $',