Author: astaric
Date: Tue Jul 23 14:37:58 2013
New Revision: 1506070

URL: http://svn.apache.org/r1506070
Log:
Do not add product column when translating INSERT statements, if one already 
exists.

Refs: #601



Modified:
    bloodhound/trunk/bloodhound_multiproduct/multiproduct/dbcursor.py
    bloodhound/trunk/bloodhound_multiproduct/tests/db/cursor.py

Modified: bloodhound/trunk/bloodhound_multiproduct/multiproduct/dbcursor.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/multiproduct/dbcursor.py?rev=1506070&r1=1506069&r2=1506070&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_multiproduct/multiproduct/dbcursor.py (original)
+++ bloodhound/trunk/bloodhound_multiproduct/multiproduct/dbcursor.py Tue Jul 
23 14:37:58 2013
@@ -533,6 +533,11 @@ class BloodhoundProductSQLTranslate(obje
                 ptoken = self._token_next(columns_token, ptoken)
                 last_token = ptoken
                 while ptoken:
+                    if isinstance(ptoken, Types.IdentifierList):
+                        if any(i.get_name() == 'product'
+                               for i in ptoken.get_identifiers()
+                               if isinstance(i, Types.Identifier)):
+                            return True
                     last_token = ptoken
                     ptoken = self._token_next(columns_token, ptoken)
                 if not last_token or \
@@ -540,7 +545,7 @@ class BloodhoundProductSQLTranslate(obje
                     raise Exception("Invalid INSERT statement, unable to find 
column parenthesis end")
                 for keyword in [',', ' ', self._product_column]:
                     self._token_insert_before(columns_token, last_token, 
Types.Token(Tokens.Keyword, keyword))
-            return
+            return False
         def insert_extra_column_value(tablename, ptoken, before_token):
             if tablename in self._translate_tables:
                 for keyword in [',', "'", self._product_prefix, "'"]:
@@ -548,6 +553,7 @@ class BloodhoundProductSQLTranslate(obje
             return
         tablename = None
         table_name_token = self._token_next(parent, token)
+        has_product_column = False
         if isinstance(table_name_token, Types.Function):
             token = self._token_first(table_name_token)
             if isinstance(token, Types.Identifier):
@@ -556,7 +562,7 @@ class BloodhoundProductSQLTranslate(obje
                 if columns_token.match(Tokens.Keyword, 'VALUES'):
                     token = columns_token
                 else:
-                    insert_extra_column(tablename, columns_token)
+                    has_product_column = insert_extra_column(tablename, 
columns_token)
                     token = self._token_next(parent, table_name_token)
         else:
             tablename = table_name_token.value
@@ -564,9 +570,11 @@ class BloodhoundProductSQLTranslate(obje
             if columns_token.match(Tokens.Keyword, 'VALUES'):
                 token = columns_token
             else:
-                insert_extra_column(tablename, columns_token)
+                has_product_column = insert_extra_column(tablename, 
columns_token)
                 token = self._token_next(parent, columns_token)
-        if token.match(Tokens.Keyword, 'VALUES'):
+        if has_product_column:
+            pass  # INSERT already has product, no translation needed
+        elif token.match(Tokens.Keyword, 'VALUES'):
             separators = [',', '(', ')']
             token = self._token_next(parent, token)
             while token:

Modified: bloodhound/trunk/bloodhound_multiproduct/tests/db/cursor.py
URL: 
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_multiproduct/tests/db/cursor.py?rev=1506070&r1=1506069&r2=1506070&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_multiproduct/tests/db/cursor.py (original)
+++ bloodhound/trunk/bloodhound_multiproduct/tests/db/cursor.py Tue Jul 23 
14:37:58 2013
@@ -987,7 +987,14 @@ data = {
 """create temporary table table_old as select * from table""",
 """create temporary table "PRODUCT_table_old" as select * from (SELECT * FROM 
"PRODUCT_table") AS table""",
         )
-    ]
+    ],
+    # insert with specified product (#601)
+    'insert_with_product': [
+        (
+"""INSERT INTO ticket (summary, product) VALUES ('S', 'swlcu')""",
+"""INSERT INTO ticket (summary, product) VALUES ('S', 'swlcu')"""
+        ),
+    ],
 
 }
 
@@ -1045,6 +1052,9 @@ class DbCursorTestCase(unittest.TestCase
     def test_lowercase_tokens(self):
         self._run_test('lowercase_tokens')
 
+    def test_insert_with_product(self):
+        self._run_test('insert_with_product')
+
 if __name__ == '__main__':
     unittest.main()
 


Reply via email to