[CalendarServer-changes] [6994] CalendarServer/branches/users/glyph/dalify/twext/enterprise/dal
source_changes at macosforge.org
source_changes at macosforge.org
Wed Feb 16 06:37:53 PST 2011
Revision: 6994
http://trac.macosforge.org/projects/calendarserver/changeset/6994
Author: glyph at apple.com
Date: 2011-02-16 06:37:53 -0800 (Wed, 16 Feb 2011)
Log Message:
-----------
support for sequences as syntax elements
Modified Paths:
--------------
CalendarServer/branches/users/glyph/dalify/twext/enterprise/dal/syntax.py
CalendarServer/branches/users/glyph/dalify/twext/enterprise/dal/test/test_sqlsyntax.py
Modified: CalendarServer/branches/users/glyph/dalify/twext/enterprise/dal/syntax.py
===================================================================
--- CalendarServer/branches/users/glyph/dalify/twext/enterprise/dal/syntax.py 2011-02-16 14:37:42 UTC (rev 6993)
+++ CalendarServer/branches/users/glyph/dalify/twext/enterprise/dal/syntax.py 2011-02-16 14:37:53 UTC (rev 6994)
@@ -19,7 +19,7 @@
Syntax wrappers and generators for SQL.
"""
-from twext.enterprise.dal.model import Schema, Table, Column
+from twext.enterprise.dal.model import Schema, Table, Column, Sequence
class TableMismatch(Exception):
@@ -208,11 +208,17 @@
try:
tableModel = self.model.tableNamed(attr)
except KeyError:
- raise AttributeError("schema has no table %r" % (attr,))
- syntax = TableSyntax(tableModel)
- # Needs to be preserved here so that aliasing will work.
- setattr(self, attr, syntax)
- return syntax
+ try:
+ seqModel = self.model.sequenceNamed(attr)
+ except KeyError:
+ raise AttributeError("schema has no table or sequence %r" % (attr,))
+ else:
+ return SequenceSyntax(seqModel)
+ else:
+ syntax = TableSyntax(tableModel)
+ # Needs to be preserved here so that aliasing will work.
+ setattr(self, attr, syntax)
+ return syntax
def __iter__(self):
@@ -221,6 +227,21 @@
+class SequenceSyntax(ExpressionSyntax):
+ """
+ Syntactic convenience for L{Sequence}.
+ """
+
+ modelType = Sequence
+
+ def subSQL(self, placeholder, quote, allTables):
+ """
+ Convert to an SQL fragment.
+ """
+ return SQLFragment("nextval('%s')" % (self.model.name,))
+
+
+
class TableSyntax(Syntax):
"""
Syntactic convenience for L{Table}.
Modified: CalendarServer/branches/users/glyph/dalify/twext/enterprise/dal/test/test_sqlsyntax.py
===================================================================
--- CalendarServer/branches/users/glyph/dalify/twext/enterprise/dal/test/test_sqlsyntax.py 2011-02-16 14:37:42 UTC (rev 6993)
+++ CalendarServer/branches/users/glyph/dalify/twext/enterprise/dal/test/test_sqlsyntax.py 2011-02-16 14:37:53 UTC (rev 6994)
@@ -36,6 +36,7 @@
def setUp(self):
s = Schema(self.id())
addSQLToSchema(schema=s, schemaData="""
+ create sequence A_SEQ;
create table FOO (BAR integer, BAZ integer);
create table BOZ (QUX integer);
create table OTHER (BAR integer,
@@ -520,6 +521,18 @@
From=self.schema.FOO,
Limit=123).toSQL(),
SQLFragment(
- "select BAR from FOO limit ?", [123])
- )
+ "select BAR from FOO limit ?", [123]))
+
+ def test_nextSequenceValue(self):
+ """
+ When a sequence is used as a value in an expression, it renders as the
+ call to 'nextval' that will produce its next value.
+ """
+ self.assertEquals(
+ Insert({self.schema.BOZ.QUX:
+ self.schema.A_SEQ}).toSQL(),
+ SQLFragment("insert into BOZ (QUX) values (nextval('A_SEQ'))", []))
+
+
+
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110216/7381a369/attachment.html>
More information about the calendarserver-changes
mailing list