From f00b5c5839263fcb8fab7a5858d1d8ff019873d6 Mon Sep 17 00:00:00 2001 From: Mame Coumba Sall <mame@nexedi.com> Date: Thu, 7 Jan 2010 18:57:51 +0000 Subject: [PATCH] Add new column "order_id" and make it part of the primary key. This column will avoid conflicts like Exception: _mysql_exceptions.IntegrityError (1062, "Duplicate entry '65398-24823' for key 1") git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@31652 20353a03-c40f-0410-a6d1-a30d3c3de9de --- .../erp5_mysql_innodb/z_catalog_item_list.xml | 18 ++++++++++++++---- .../erp5_mysql_innodb/z_create_item.xml | 6 ++++-- .../erp5_mysql_innodb_catalog/bt/revision | 2 +- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/z_catalog_item_list.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/z_catalog_item_list.xml index 4f55b20456..bb088c38aa 100644 --- a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/z_catalog_item_list.xml +++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/z_catalog_item_list.xml @@ -175,10 +175,12 @@ WHERE\n \n <dtml-var "\'\\0\'">\n \n -<dtml-let movement_list="[]">\n +<dtml-let movement_list="[]" uid_dict="{}">\n <dtml-in prefix="loop" expr="_.range(_.len(uid))">\n <dtml-if "isMovement[loop_item] and isAccountable[loop_item] and getAggregateUidList[loop_item]">\n + <dtml-call expr="uid_dict.update({uid[loop_item]: uid_dict.get(uid[loop_item], -1) + 1})">\n <dtml-call expr="movement_list.append(loop_item)">\n +\n </dtml-if>\n </dtml-in>\n <dtml-if expr="_.len(movement_list) > 0">\n @@ -187,8 +189,11 @@ INSERT INTO\n VALUES\n <dtml-in prefix="loop" expr="movement_list">\n <dtml-in "getAggregateUidList[loop_item]">\n -( \n + \n +( \n + <dtml-call expr="uid_dict.update({uid[loop_item]: uid_dict.get(uid[loop_item], -1) + 1})">\n <dtml-sqlvar expr="uid[loop_item]" type="int">,\n + <dtml-sqlvar expr="uid_dict[uid[loop_item]]" type="int">,\n <dtml-sqlvar expr="getStopDate[loop_item]" type="datetime" optional>,\n <dtml-sqlvar expr="getDestinationUid[loop_item]" type="int" optional>,\n <dtml-sqlvar expr="getDestinationSectionUid[loop_item]" type="int" optional>,\n @@ -254,10 +259,12 @@ WHERE\n \n <dtml-var "\'\\0\'">\n \n -<dtml-let movement_list="[]">\n +<dtml-let movement_list="[]" uid_dict="{}">\n <dtml-in prefix="loop" expr="_.range(_.len(uid))">\n <dtml-if "isMovement[loop_item] and isAccountable[loop_item] and getAggregateUidList[loop_item]">\n + <dtml-call expr="uid_dict.update({uid[loop_item]: uid_dict.get(uid[loop_item], -1) + 1})">\n <dtml-call expr="movement_list.append(loop_item)">\n +\n </dtml-if>\n </dtml-in>\n <dtml-if expr="_.len(movement_list) > 0">\n @@ -266,8 +273,11 @@ INSERT INTO\n VALUES\n <dtml-in prefix="loop" expr="movement_list">\n <dtml-in "getAggregateUidList[loop_item]">\n -( \n + \n +( \n + <dtml-call expr="uid_dict.update({uid[loop_item]: uid_dict.get(uid[loop_item], -1) + 1})">\n <dtml-sqlvar expr="uid[loop_item]" type="int">,\n + <dtml-sqlvar expr="uid_dict[uid[loop_item]]" type="int">,\n <dtml-sqlvar expr="getStopDate[loop_item]" type="datetime" optional>,\n <dtml-sqlvar expr="getDestinationUid[loop_item]" type="int" optional>,\n <dtml-sqlvar expr="getDestinationSectionUid[loop_item]" type="int" optional>,\n diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/z_create_item.xml b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/z_create_item.xml index 4e44f19f23..2731dc26c4 100644 --- a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/z_create_item.xml +++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/CatalogMethodTemplateItem/portal_catalog/erp5_mysql_innodb/z_create_item.xml @@ -88,6 +88,7 @@ #\n CREATE TABLE `item` (\n `uid` BIGINT UNSIGNED NOT NULL,\n + `order_id` TINYINT UNSIGNED NOT NULL,\n `date` datetime,\n `node_uid` BIGINT UNSIGNED default \'0\',\n `section_uid` BIGINT UNSIGNED default \'0\',\n @@ -95,7 +96,7 @@ CREATE TABLE `item` (\n `aggregate_uid` BIGINT UNSIGNED default \'0\',\n `variation_text` VARCHAR(255),\n `simulation_state` VARCHAR(255) default \'\',\n - PRIMARY KEY (`uid`, `aggregate_uid`),\n + PRIMARY KEY (`uid`, `aggregate_uid`,`order_id`),\n KEY `section_uid` (`section_uid`),\n KEY `resource_uid` (`resource_uid`),\n KEY `variation_text` (`variation_text`),\n @@ -144,6 +145,7 @@ CREATE TABLE `item` (\n #\n CREATE TABLE `item` (\n `uid` BIGINT UNSIGNED NOT NULL,\n + `order_id` TINYINT UNSIGNED NOT NULL,\n `date` datetime,\n `node_uid` BIGINT UNSIGNED default \'0\',\n `section_uid` BIGINT UNSIGNED default \'0\',\n @@ -151,7 +153,7 @@ CREATE TABLE `item` (\n `aggregate_uid` BIGINT UNSIGNED default \'0\',\n `variation_text` VARCHAR(255),\n `simulation_state` VARCHAR(255) default \'\',\n - PRIMARY KEY (`uid`, `aggregate_uid`),\n + PRIMARY KEY (`uid`, `aggregate_uid`,`order_id`),\n KEY `section_uid` (`section_uid`),\n KEY `resource_uid` (`resource_uid`),\n KEY `variation_text` (`variation_text`),\n diff --git a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/revision b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/revision index 59f3135037..09df927592 100644 --- a/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/revision +++ b/product/ERP5/bootstrap/erp5_mysql_innodb_catalog/bt/revision @@ -1 +1 @@ -165 \ No newline at end of file +166 \ No newline at end of file -- 2.30.9