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 $',

Impressum / About Us