[CalendarServer-changes] [7129] CalendarServer/branches/users/glyph/oracle/twext/enterprise/dal
source_changes at macosforge.org
source_changes at macosforge.org
Mon Mar 7 19:02:42 PST 2011
Revision: 7129
http://trac.macosforge.org/projects/calendarserver/changeset/7129
Author: glyph at apple.com
Date: 2011-03-07 19:02:42 -0800 (Mon, 07 Mar 2011)
Log Message:
-----------
Always specify sequences in oracle insert statements.
Modified Paths:
--------------
CalendarServer/branches/users/glyph/oracle/twext/enterprise/dal/syntax.py
CalendarServer/branches/users/glyph/oracle/twext/enterprise/dal/test/test_sqlsyntax.py
Modified: CalendarServer/branches/users/glyph/oracle/twext/enterprise/dal/syntax.py
===================================================================
--- CalendarServer/branches/users/glyph/oracle/twext/enterprise/dal/syntax.py 2011-03-08 03:02:30 UTC (rev 7128)
+++ CalendarServer/branches/users/glyph/oracle/twext/enterprise/dal/syntax.py 2011-03-08 03:02:42 UTC (rev 7129)
@@ -21,9 +21,8 @@
import itertools
-from twext.enterprise.ienterprise import POSTGRES_DIALECT
+from twext.enterprise.ienterprise import POSTGRES_DIALECT, ORACLE_DIALECT
-from twext.enterprise.ienterprise import ORACLE_DIALECT
from twext.enterprise.dal.model import Schema, Table, Column, Sequence
@@ -759,13 +758,22 @@
@rtype: L{SQLFragment}
"""
- sortedColumns = sorted(self.columnMap.items(),
+ columnsAndValues = self.columnMap.items()
+ tableModel = columnsAndValues[0][0].model.table
+ if metadata.dialect == ORACLE_DIALECT:
+ # See test_nextSequenceDefaultImplicitExplicitOracle.
+ for column in tableModel.columns:
+ if isinstance(column.default, Sequence):
+ columnSyntax = ColumnSyntax(column)
+ if columnSyntax not in self.columnMap:
+ columnsAndValues.append(
+ (columnSyntax, SequenceSyntax(column.default))
+ )
+ sortedColumns = sorted(columnsAndValues,
key=lambda (c, v): c.model.name)
allTables = []
stmt = SQLFragment('insert into ')
- stmt.append(
- TableSyntax(sortedColumns[0][0].model.table)
- .subSQL(metadata, allTables))
+ stmt.append(TableSyntax(tableModel).subSQL(metadata, allTables))
stmt.append(SQLFragment(" "))
stmt.append(_inParens(_commaJoined(
[c.subSQL(metadata, allTables) for (c, v) in
Modified: CalendarServer/branches/users/glyph/oracle/twext/enterprise/dal/test/test_sqlsyntax.py
===================================================================
--- CalendarServer/branches/users/glyph/oracle/twext/enterprise/dal/test/test_sqlsyntax.py 2011-03-08 03:02:30 UTC (rev 7128)
+++ CalendarServer/branches/users/glyph/oracle/twext/enterprise/dal/test/test_sqlsyntax.py 2011-03-08 03:02:42 UTC (rev 7129)
@@ -707,6 +707,26 @@
SQLFragment("insert into BOZ (QUX) values (A_SEQ.nextval)", []))
+ def test_nextSequenceDefaultImplicitExplicitOracle(self):
+ """
+ In Oracle's dialect, sequence defaults can't be implemented without
+ using triggers, so instead we just explicitly always include the
+ sequence default value.
+ """
+ addSQLToSchema(
+ schema=self.schema.model, schemaData=
+ "create table DFLTR (a varchar(255), "
+ "b integer default nextval('A_SEQ'));"
+ )
+ self.assertEquals(
+ Insert({self.schema.DFLTR.a: 'hello'}).toSQL(
+ FixedPlaceholder(ORACLE_DIALECT, "?")
+ ),
+ SQLFragment("insert into DFLTR (a, b) values "
+ "(?, A_SEQ.nextval)", ['hello']),
+ )
+
+
def test_nestedLogicalExpressions(self):
"""
Make sure that logical operator precedence inserts proper parenthesis
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110307/4358f8e4/attachment.html>
More information about the calendarserver-changes
mailing list