[CalendarServer-changes] [8775] CalendarServer/branches/users/glyph/case-insensitive-uid
source_changes at macosforge.org
source_changes at macosforge.org
Wed Feb 29 10:14:58 PST 2012
Revision: 8775
http://trac.macosforge.org/projects/calendarserver/changeset/8775
Author: glyph at apple.com
Date: 2012-02-29 10:14:58 -0800 (Wed, 29 Feb 2012)
Log Message:
-----------
add support for the constraint we want, working around another odd corner of sqlparse's AST
Modified Paths:
--------------
CalendarServer/branches/users/glyph/case-insensitive-uid/twext/enterprise/dal/parseschema.py
CalendarServer/branches/users/glyph/case-insensitive-uid/twext/enterprise/dal/test/test_parseschema.py
Property Changed:
----------------
CalendarServer/branches/users/glyph/case-insensitive-uid/
Modified: CalendarServer/branches/users/glyph/case-insensitive-uid/twext/enterprise/dal/parseschema.py
===================================================================
--- CalendarServer/branches/users/glyph/case-insensitive-uid/twext/enterprise/dal/parseschema.py 2012-02-29 18:14:54 UTC (rev 8774)
+++ CalendarServer/branches/users/glyph/case-insensitive-uid/twext/enterprise/dal/parseschema.py 2012-02-29 18:14:58 UTC (rev 8775)
@@ -22,7 +22,9 @@
from itertools import chain
from sqlparse import parse, keywords
-from sqlparse.tokens import Keyword, Punctuation, Number, String, Name
+from sqlparse.tokens import (
+ Keyword, Punctuation, Number, String, Name, Comparison as CompTok
+)
from sqlparse.sql import (Comment, Identifier, Parenthesis, IdentifierList,
Function, Comparison)
@@ -30,7 +32,7 @@
Schema, Table, SQLType, ProcedureCall, Constraint, Sequence, Index)
from twext.enterprise.dal.syntax import (
- ColumnSyntax, CompoundComparison, Constant
+ ColumnSyntax, CompoundComparison, Constant, Function as FunctionSyntax
)
@@ -269,7 +271,18 @@
op.value.encode("ascii"),
self.nameOrValue(rhs))
elif isinstance(nexttok, Identifier):
- result = None
+ # our version of SQLParse seems to break down and not create a nice
+ # "Comparison" object when a keyword is present. This is just a
+ # simple workaround.
+ lhs = self.nameOrValue(nexttok)
+ op = expect(parens, ttype=CompTok).value.encode("ascii")
+ funcName = expect(parens, ttype=Keyword).value.encode("ascii")
+ rhs = FunctionSyntax(funcName)(*[
+ ColumnSyntax(self.table.columnNamed(x)) for x in
+ self.namesInParens(expect(parens, cls=Parenthesis))
+ ])
+ result = CompoundComparison(lhs, op, rhs)
+
expect(parens, ttype=Punctuation, value=")")
return result
@@ -480,7 +493,8 @@
raise ViolatedExpectation(value, nextval.value)
if cls is not None:
if nextval.__class__ != cls:
- raise ViolatedExpectation(cls, repr(nextval))
+ raise ViolatedExpectation(cls, '%s:%r' %
+ (nextval.__class__.__name__, nextval))
return nextval
Modified: CalendarServer/branches/users/glyph/case-insensitive-uid/twext/enterprise/dal/test/test_parseschema.py
===================================================================
--- CalendarServer/branches/users/glyph/case-insensitive-uid/twext/enterprise/dal/test/test_parseschema.py 2012-02-29 18:14:54 UTC (rev 8774)
+++ CalendarServer/branches/users/glyph/case-insensitive-uid/twext/enterprise/dal/test/test_parseschema.py 2012-02-29 18:14:58 UTC (rev 8775)
@@ -20,8 +20,10 @@
"""
from twext.enterprise.dal.model import Schema
+from twext.enterprise.dal.syntax import CompoundComparison, ColumnSyntax
from twext.enterprise.dal.parseschema import addSQLToSchema
+
from twisted.trial.unittest import TestCase
@@ -214,7 +216,6 @@
table = s.tableNamed('sample')
self.assertEquals(len(table.constraints), 1)
constraint = table.constraints[0]
- from twext.enterprise.dal.syntax import CompoundComparison
expr = constraint.expression
self.assertIsInstance(expr, CompoundComparison)
self.assertEqual(expr.a.model, table.columnNamed('example'))
@@ -242,6 +243,14 @@
s = self.schemaFromString(sqlText)
table = s.tableNamed('sample')
self.assertEquals(len(table.constraints), 1)
+ expr = table.constraints[0].expression
+ self.assertEquals(expr.a.model, table.columnNamed("example"))
+ self.assertEquals(expr.op, "=")
+ self.assertEquals(expr.b.function.name, "lower")
+ self.assertEquals(
+ expr.b.args,
+ tuple([ColumnSyntax(table.columnNamed("example"))])
+ )
checkOneConstraint(
"create table sample "
"(example integer check(example = lower(example)));"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120229/255e9bb2/attachment.html>
More information about the calendarserver-changes
mailing list