Index: django/db/backends/sqlite3/base.py
===================================================================
--- django/db/backends/sqlite3/base.py	(revision 3652)
+++ django/db/backends/sqlite3/base.py	(working copy)
@@ -18,6 +18,20 @@
 Database.register_converter("timestamp", util.typecast_timestamp)
 Database.register_converter("TIMESTAMP", util.typecast_timestamp)
 
+try:
+    #  this only exists in 2.4+
+    from decimal import Decimal
+    Database.register_converter("numeric", util.typecast_numeric)
+    Database.register_adapter(Decimal, util.rev_typecast_decimal)
+except:
+    pass
+
+import re
+
+# We need to trap any queries with empty parenthesis because their invalid in
+# other database - like Postgresql
+empty_in_clause = re.compile(".* +in +\( *\).*", re.I)
+
 def utf8rowFactory(cursor, row):
     def utf8(s):
         if type(s) == unicode:
@@ -66,23 +80,34 @@
             self.connection.close()
             self.connection = None
 
-class SQLiteCursorWrapper(Database.Cursor):
+class SQLiteCursorWrapper(object):
     """
     Django uses "format" style placeholders, but pysqlite2 uses "qmark" style.
     This fixes it -- but note that if you want to use a literal "%s" in a query,
     you'll need to use "%%s".
     """
+    def __init__(self, *args, **kwargs):
+        self._cursor = Database.Cursor(*args, **kwargs)
+
     def execute(self, query, params=()):
         query = self.convert_query(query, len(params))
-        return Database.Cursor.execute(self, query, params)
+        if empty_in_clause.match(query):
+            raise SyntaxError, "Invalid SQL query.  Your IN clause is empty. [%s]" % query
+        return self._cursor.execute(query, params)
 
     def executemany(self, query, param_list):
         query = self.convert_query(query, len(param_list[0]))
-        return Database.Cursor.executemany(self, query, param_list)
+        return self._cursor.executemany(query, param_list)
 
     def convert_query(self, query, num_params):
         return query % tuple("?" * num_params)
 
+    def __getattr__(self, attr):
+        if self.__dict__.has_key(attr):
+            return self.__dict__[key]
+        else:
+            return getattr(self._cursor, attr)
+
 supports_constraints = False
 
 def quote_name(name):
Index: django/db/backends/sqlite3/creation.py
===================================================================
--- django/db/backends/sqlite3/creation.py	(revision 3652)
+++ django/db/backends/sqlite3/creation.py	(working copy)
@@ -4,26 +4,26 @@
 DATA_TYPES = {
     'AutoField':                    'integer',
     'BooleanField':                 'bool',
-    'CharField':                    'varchar(%(maxlength)s)',
-    'CommaSeparatedIntegerField':   'varchar(%(maxlength)s)',
+    'CharField':                    'varchar',
+    'CommaSeparatedIntegerField':   'varchar',
     'DateField':                    'date',
     'DateTimeField':                'datetime',
-    'FileField':                    'varchar(100)',
-    'FilePathField':                'varchar(100)',
-    'FloatField':                   'numeric(%(max_digits)s, %(decimal_places)s)',
-    'ImageField':                   'varchar(100)',
+    'FileField':                    'varchar',
+    'FilePathField':                'varchar',
+    'FloatField':                   'numeric',
+    'ImageField':                   'varchar',
     'IntegerField':                 'integer',
-    'IPAddressField':               'char(15)',
+    'IPAddressField':               'varchar',
     'ManyToManyField':              None,
     'NullBooleanField':             'bool',
     'OneToOneField':                'integer',
-    'PhoneNumberField':             'varchar(20)',
+    'PhoneNumberField':             'varchar',
     'PositiveIntegerField':         'integer unsigned',
     'PositiveSmallIntegerField':    'smallint unsigned',
-    'SlugField':                    'varchar(%(maxlength)s)',
+    'SlugField':                    'varchar',
     'SmallIntegerField':            'smallint',
     'TextField':                    'text',
     'TimeField':                    'time',
-    'URLField':                     'varchar(200)',
-    'USStateField':                 'varchar(2)',
+    'URLField':                     'varchar',
+    'USStateField':                 'varchar',
 }
