Changeset 331

Show
Ignore:
Timestamp:
04/30/08 19:55:53 (7 months ago)
Author:
johnbywater
Message:

Fixed persistence layer for SQL 'IS NULL' special case.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/dm/db.py

    r320 r331  
    485485            self.domName = self.dom.name 
    486486            self.dbName = dbName 
    487         self.attributesByName = {} 
     487        self.attributeDomNames = {} 
     488        self.attributeDbNames = {} 
    488489        self.attributes = [] 
    489490        for domAttr in self.dom.attributes: 
     
    496497 
    497498    def getAttribute(self, attrName): 
    498         if not attrName in self.attributesByName
     499        if not attrName in self.attributeDomNames
    499500            msg = "Attribute '%s' not defined on mapper for class '%s'." % ( 
    500501                attrName, self.domName 
    501502            ) 
    502503            raise Exception(msg) 
    503         return self.attributesByName[attrName] 
     504        return self.attributeDomNames[attrName] 
    504505 
    505506    def addAttribute(self, metaDomainAttribute): 
    506507        metaAttribute = MetaMapperAttribute(metaDomainAttribute) 
    507508        self.attributes.append(metaAttribute) 
    508         self.attributesByName[metaAttribute.domName] = metaAttribute 
     509        self.attributeDomNames[metaAttribute.domName] = metaAttribute 
     510        self.attributeDbNames[metaAttribute.dbName] = metaAttribute 
    509511        return metaAttribute 
    510512 
     
    577579        self.dom = metaDomainAttribute 
    578580        self.domName  = self.dom.name 
    579         if sqoVer in ['0.8', '0.9', '0.10'] and self.dom.isDomainObjectRef: 
     581        self.isValueRef = self.dom.isValueRef 
     582        self.isAssociateList = self.dom.isAssociateList 
     583        self.isDomainObjectRef = self.dom.isDomainObjectRef 
     584        if sqoVer in ['0.8', '0.9', '0.10'] and self.isDomainObjectRef: 
    580585            self.typeName = self.makeSafeFieldName(self.dom.typeName) 
    581586        else: 
     
    584589        if self.dom.isValueRef and hasattr(self.dom, 'default'):  
    585590            self.default = self.dom.default 
    586         elif self.dom.isDomainObjectRef: 
     591        elif self.isDomainObjectRef: 
    587592            if hasattr(self.dom, 'default') and not self.dom.default: 
    588593                self.default = None 
    589594            elif not self.dom.isRequired: 
    590595                self.default = None 
    591         self.isDomainObjectRef = self.dom.isDomainObjectRef 
    592         self.isValueRef = self.dom.isValueRef 
    593         self.isAssociateList = self.dom.isAssociateList 
    594596 
    595597    def createMapperClassAttribute(self): 
     
    10471049            value = kwds[name] 
    10481050            if sqoVer in ['0.10']: 
    1049                 if self.meta.dom.attributeNames[name].isDomainObjectRef: 
     1051                if self.meta.attributeDbNames[name].isDomainObjectRef: 
    10501052                    name += '_id' 
    10511053            # todo: expand for all database systems 
    10521054            sqlSafeValue = sqlrepr(value, 'postgres') 
    10531055            sqlSafeName = self.makeSqlName(name) 
    1054             sqlEquals = "%s = %s" % (sqlSafeName, sqlSafeValue) 
     1056            if sqlSafeValue.upper() == 'NULL': 
     1057                sqlEquals = "%s IS %s" % (sqlSafeName, sqlSafeValue) 
     1058            else: 
     1059                sqlEquals = "%s = %s" % (sqlSafeName, sqlSafeValue) 
    10551060            sqlWhere += " AND ( " + sqlEquals + " ) " 
    10561061        try: 
     
    10941099            value = kwds[name] 
    10951100            if sqoVer in ['0.10']: 
    1096                 if self.meta.dom.attributeNames[name].isDomainObjectRef: 
     1101                if self.meta.attributeDbNames[name].isDomainObjectRef: 
    10971102                    name += '_id' 
    10981103            # todo: expand for all database systems 
    10991104            sqlSafeValue = sqlrepr(value, 'postgres') 
    11001105            sqlSafeName = self.makeSqlName(name) 
    1101             sqlEquals = "%s = %s" % (sqlSafeName, sqlSafeValue) 
     1106            if sqlSafeValue.upper() == 'NULL': 
     1107                sqlEquals = "%s IS %s" % (sqlSafeName, sqlSafeValue) 
     1108            else: 
     1109                sqlEquals = "%s = %s" % (sqlSafeName, sqlSafeValue) 
    11021110            sqlEqualsList.append(sqlEquals) 
    11031111        if sqlEqualsList: 
     
    11211129            value = kwds[name] 
    11221130            if sqoVer in ['0.10'] and name != 'id': 
    1123                 if self.meta.dom.attributeNames[name].isDomainObjectRef: 
     1131                if self.meta.attributeDbNames[name].isDomainObjectRef: 
    11241132                    name += '_id' 
    11251133            # todo: expand for all database systems 
    11261134            sqlSafeValue = sqlrepr(value, 'postgres') 
    11271135            sqlSafeName = self.makeSqlName(name) 
    1128             sqlEquals = "%s = %s" % (sqlSafeName, sqlSafeValue) 
     1136            if sqlSafeValue.upper() == 'NULL': 
     1137                sqlEquals = "%s IS %s" % (sqlSafeName, sqlSafeValue) 
     1138            else: 
     1139                sqlEquals = "%s = %s" % (sqlSafeName, sqlSafeValue) 
    11291140            sqlEqualsList.append(sqlEquals) 
    11301141        sqlEquals = "(%s)" % ") AND (".join(sqlEqualsList) 
     
    12021213            else: 
    12031214                if sqoVer in ['0.10']: 
    1204                     if self.meta.dom.attributeNames[name].isDomainObjectRef: 
     1215                    if self.meta.attributeDbNames[name].isDomainObjectRef: 
    12051216                        name += '_id' 
    12061217                sqlSafeName = self.makeSqlName(name) 
    1207                 sqlEquals = "%s = %s" % (sqlSafeName, sqlSafeValue) 
     1218                if sqlSafeValue.upper() == 'NULL': 
     1219                    sqlEquals = "%s IS %s" % (sqlSafeName, sqlSafeValue) 
     1220                else: 
     1221                    sqlEquals = "%s = %s" % (sqlSafeName, sqlSafeValue) 
    12081222                sqlEqualsList.append(sqlEquals) 
    12091223        sqlEquals = "(%s)" % ") AND (".join(sqlEqualsList)