Update of /cvsroot/sqlobject/SQLObject/SQLObject
In directory sc8-pr-cvs1:/tmp/cvs-serv3612/SQLObject
Modified Files:
Col.py DBConnection.py SQLObject.py
Log Message:
* Extended the tests to work with Postgres, SQLite, DBM
* Some databases don't implement some features (SQLite doesn't support
dynamic columns, all but MySQL don't support auto-class creation),
at least for now.
* Make SERIAL work for columns under Postgres, as well as _idName
* Fixed LIMIT/OFFSET bugs in Postgres, SQLite
* tableExists in Postgres
Index: Col.py
===================================================================
RCS file: /cvsroot/sqlobject/SQLObject/SQLObject/Col.py,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Col.py 31 Mar 2003 05:51:28 -0000 1.3
--- Col.py 7 Apr 2003 19:48:40 -0000 1.4
***************
*** 122,125 ****
--- 122,128 ----
return self._sqlType()
+ def _sqliteType(self):
+ return self._sqlType()
+
def mysqlCreateSQL(self):
return ' '.join([self.dbName, self._mysqlType()] + self._extraSQL())
***************
*** 190,193 ****
--- 193,200 ----
def _sqliteType(self):
+ return 'INT'
+
+ def _postgresType(self):
+ # @@: there's a better type for this...
return 'INT'
Index: DBConnection.py
===================================================================
RCS file: /cvsroot/sqlobject/SQLObject/SQLObject/DBConnection.py,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** DBConnection.py 7 Apr 2003 07:43:36 -0000 1.13
--- DBConnection.py 7 Apr 2003 19:48:41 -0000 1.14
***************
*** 28,32 ****
--- 28,34 ----
sqlite = None
import re
+ import warnings
+ warnings.filterwarnings("ignore", "DB-API extension cursor.lastrowid used")
__all__ = ['MySQLConnection', 'PostgresConnection', 'SQLiteConnection',
***************
*** 118,123 ****
return Transaction(self)
! def queryInsertID(self, table, names, values):
! return self._runWithConnection(self._queryInsertID, table, names, values)
def iterSelect(self, select):
--- 120,125 ----
return Transaction(self)
! def queryInsertID(self, table, idName, names, values):
! return self._runWithConnection(self._queryInsertID, table, idName, names, values)
def iterSelect(self, select):
***************
*** 346,350 ****
user=self.user, passwd=self.passwd)
! def _queryInsertID(self, conn, table, names, values):
c = conn.cursor()
q = self._insertSQL(table, names, values)
--- 348,352 ----
user=self.user, passwd=self.passwd)
! def _queryInsertID(self, conn, table, idName, names, values):
c = conn.cursor()
q = self._insertSQL(table, names, values)
***************
*** 428,436 ****
return psycopg.connect(self.dsn)
! def _queryInsertID(self, conn, table, names, values):
c = conn.cursor()
! c.execute('SELECT nextval(\'%s_seq\')' % table)
(id,) = c.fetchone()
! names.append('id')
values.append(id)
q = self._insertSQL(table, names, values)
--- 430,438 ----
return psycopg.connect(self.dsn)
! def _queryInsertID(self, conn, table, idName, names, values):
c = conn.cursor()
! c.execute('SELECT nextval(\'%s_id_seq\')' % table)
(id,) = c.fetchone()
! names.append(idName)
values.append(id)
q = self._insertSQL(table, names, values)
***************
*** 445,449 ****
if not end:
return "%s OFFSET %i" % (query, start)
! return "%s LIMIT %i OFFSET %i" % (query, start, end-start)
def createColumn(self, soClass, col):
--- 447,451 ----
if not end:
return "%s OFFSET %i" % (query, start)
! return "%s LIMIT %i OFFSET %i" % (query, end-start, start)
def createColumn(self, soClass, col):
***************
*** 458,462 ****
def tableExists(self, tableName):
# @@: obviously broken
! return False
class SQLiteConnection(DBAPI):
--- 460,477 ----
def tableExists(self, tableName):
# @@: obviously broken
! result = self.queryOne("SELECT COUNT(relname) FROM pg_class WHERE relname = '%s'"
! % tableName)
! return result[0]
!
! def addColumn(self, tableName, column):
! self.query('ALTER TABLE %s ADD COLUMN %s' %
! (tableName,
! column.postgresCreateSQL()))
!
! def delColumn(self, tableName, column):
! self.query('ALTER TABLE %s DROP COLUMN %s' %
! (tableName,
! column.dbName))
!
class SQLiteConnection(DBAPI):
***************
*** 470,474 ****
return sqlite.connect(self.dsn)
! def _queryInsertID(self, conn, table, names, values):
c = conn.cursor()
q = self._insertSQL(table, names, values)
--- 485,489 ----
return sqlite.connect(self.dsn)
! def _queryInsertID(self, conn, table, idName, names, values):
c = conn.cursor()
q = self._insertSQL(table, names, values)
***************
*** 484,488 ****
if not end:
return "%s OFFSET %i" % (query, start)
! return "%s LIMIT %i OFFSET %i" % (query, start, end-start)
def createColumn(self, soClass, col):
--- 499,503 ----
if not end:
return "%s OFFSET %i" % (query, start)
! return "%s LIMIT %i OFFSET %i" % (query, end-start, start)
def createColumn(self, soClass, col):
***************
*** 492,496 ****
return '%s INTEGER PRIMARY KEY' % soClass._idName
! def joinSQLType(self):
return 'INT NOT NULL'
--- 507,511 ----
return '%s INTEGER PRIMARY KEY' % soClass._idName
! def joinSQLType(self, join):
return 'INT NOT NULL'
***************
*** 522,526 ****
"""
! def queryInsertID(self, table, names, values):
id = self._newID(table)
self._saveDict(table, id, dict(zip(names, values)))
--- 537,541 ----
"""
! def queryInsertID(self, table, idName, names, values):
id = self._newID(table)
self._saveDict(table, id, dict(zip(names, values)))
***************
*** 790,796 ****
results.remove(int(id1))
db[join2 + str(id2)] = ",".join(map(str, results))
-
-
-
class DBMSelectResults(object):
--- 805,808 ----
Index: SQLObject.py
===================================================================
RCS file: /cvsroot/sqlobject/SQLObject/SQLObject/SQLObject.py,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** SQLObject.py 7 Apr 2003 01:13:54 -0000 1.14
--- SQLObject.py 7 Apr 2003 19:48:41 -0000 1.15
***************
*** 729,733 ****
# up to DBConnection, since getting a new ID is
# non-standard.
! id = self._connection.queryInsertID(self._table, names, values)
cache = self._connection.cache
cache.created(id, self.__class__, self)
--- 729,734 ----
# up to DBConnection, since getting a new ID is
# non-standard.
! id = self._connection.queryInsertID(self._table, self._idName,
! names, values)
cache = self._connection.cache
cache.created(id, self.__class__, self)
|