예제 #1
0
def dbapi_lastrowid(fn):
    if util.pypy:
        return _chain_decorators_on(fn, fails_if(lambda: True))
    else:
        return _chain_decorators_on(
            fn,
            fails_on_everything_except('mysql+mysqldb', 'mysql+oursql',
                                       'sqlite+pysqlite', 'mysql+pymysql'),
        )
예제 #2
0
def dbapi_lastrowid(fn):
    if util.pypy:
        return _chain_decorators_on(
            fn,
            fails_if(lambda:True)
        )
    else:
        return _chain_decorators_on(
            fn,
            fails_on_everything_except('mysql+mysqldb', 'mysql+oursql',
                                       'sqlite+pysqlite', 'mysql+pymysql'),
        )
예제 #3
0
def isolation_level(fn):
    return _chain_decorators_on(
        fn,
        only_on(('postgresql', 'sqlite', 'mysql'),
                "DBAPI has no isolation level support"),
        fails_on('postgresql+pypostgresql',
                 'pypostgresql bombs on multiple isolation level calls'))
예제 #4
0
def isolation_level(fn):
    return _chain_decorators_on(
        fn,
        only_on(('postgresql', 'sqlite'), "DBAPI has no isolation level support"),
        fails_on('postgresql+pypostgresql',
                      'pypostgresql bombs on multiple isolation level calls')
    )
예제 #5
0
def updateable_autoincrement_pks(fn):
    """Target must support UPDATE on autoincrement/integer primary key."""
    return _chain_decorators_on(
        fn,
        no_support('mssql', "IDENTITY cols can't be updated"),
        no_support('sybase', "IDENTITY cols can't be updated"),
    )
예제 #6
0
def correlated_outer_joins(fn):
    """Target must support an outer join to a subquery which correlates to the parent."""

    return _chain_decorators_on(
        fn,
        no_support('oracle', 'Raises "ORA-01799: a column may not be outer-joined to a subquery"')
    )
예제 #7
0
def update_from(fn):
    """Target must support UPDATE..FROM syntax"""
    return _chain_decorators_on(
        fn,
        only_on(('postgresql', 'mssql', 'mysql'),
            "Backend does not support UPDATE..FROM")
    )
예제 #8
0
def unicode_connections(fn):
    """Target driver must support some encoding of Unicode across the wire."""
    # TODO: expand to exclude MySQLdb versions w/ broken unicode
    return _chain_decorators_on(
        fn,
        exclude('mysql', '<', (4, 1, 1), 'no unicode connection support'),
    )
예제 #9
0
def correlated_outer_joins(fn):
    """Target must support an outer join to a subquery which correlates to the parent."""

    return _chain_decorators_on(
        fn,
        no_support('oracle', 'Raises "ORA-01799: a column may not be outer-joined to a subquery"')
    )
예제 #10
0
def updateable_autoincrement_pks(fn):
    """Target must support UPDATE on autoincrement/integer primary key."""
    return _chain_decorators_on(
        fn,
        no_support('mssql', "IDENTITY cols can't be updated"),
        no_support('sybase', "IDENTITY cols can't be updated"),
    )
예제 #11
0
def unicode_connections(fn):
    """Target driver must support some encoding of Unicode across the wire."""
    # TODO: expand to exclude MySQLdb versions w/ broken unicode
    return _chain_decorators_on(
        fn,
        exclude('mysql', '<', (4, 1, 1), 'no unicode connection support'),
        )
예제 #12
0
def cpython(fn):
    return _chain_decorators_on(
         fn,
         skip_if(lambda: util.jython or util.pypy, 
           "cPython interpreter needed"
         )
    )
예제 #13
0
def intersect(fn):
    """Target database must support INTERSECT or equivlaent."""
    return _chain_decorators_on(
        fn,
        fails_on('firebird', 'no support for INTERSECT'),
        fails_on('mysql', 'no support for INTERSECT'),
        fails_on('sybase', 'no support for INTERSECT'),
    )
예제 #14
0
파일: requires.py 프로젝트: lulzmachine/rad
def boolean_col_expressions(fn):
    """Target database must support boolean expressions as columns"""
    return _chain_decorators_on(
        fn,
        no_support("firebird", "not supported by database"),
        no_support("oracle", "not supported by database"),
        no_support("mssql", "not supported by database"),
    )
예제 #15
0
def except_(fn):
    """Target database must support EXCEPT or equivlaent (i.e. MINUS)."""
    return _chain_decorators_on(
        fn,
        fails_on('firebird', 'no support for EXCEPT'),
        fails_on('mysql', 'no support for EXCEPT'),
        fails_on('sybase', 'no support for EXCEPT'),
    )
예제 #16
0
def boolean_col_expressions(fn):
    """Target database must support boolean expressions as columns"""
    return _chain_decorators_on(
        fn,
        no_support('firebird', 'not supported by database'),
        no_support('oracle', 'not supported by database'),
        no_support('mssql', 'not supported by database'),
    )
예제 #17
0
파일: requires.py 프로젝트: lulzmachine/rad
def deferrable_constraints(fn):
    """Target database must support derferable constraints."""
    return _chain_decorators_on(
        fn,
        no_support("firebird", "not supported by database"),
        no_support("mysql", "not supported by database"),
        no_support("mssql", "not supported by database"),
    )
예제 #18
0
def python2(fn):
    return _chain_decorators_on(
        fn,
        skip_if(
            lambda: sys.version_info >= (3,),
            "Python version 2.xx is required."
            )
    )
예제 #19
0
def python25(fn):
    return _chain_decorators_on(
        fn,
        skip_if(
            lambda: sys.version_info < (2, 5),
            "Python version 2.5 or greater is required"
        )
    )
예제 #20
0
def schemas(fn):
    """Target database must support external schemas, and have one named 'test_schema'."""

    return _chain_decorators_on(
        fn,
        no_support('sqlite', 'no schema support'),
        no_support('firebird', 'no schema support')
    )
예제 #21
0
def except_(fn):
    """Target database must support EXCEPT or equivlaent (i.e. MINUS)."""
    return _chain_decorators_on(
        fn,
        fails_on('firebird', 'no support for EXCEPT'),
        fails_on('mysql', 'no support for EXCEPT'),
        fails_on('sybase', 'no support for EXCEPT'),
    )
예제 #22
0
def python25(fn):
    return _chain_decorators_on(
        fn,
        skip_if(
            lambda: sys.version_info < (2, 5),
            "Python version 2.5 or greater is required"
        )
    )
예제 #23
0
def python2(fn):
    return _chain_decorators_on(
        fn,
        skip_if(
            lambda: sys.version_info >= (3,),
            "Python version 2.xx is required."
            )
    )
예제 #24
0
파일: requires.py 프로젝트: lulzmachine/rad
def unbounded_varchar(fn):
    """Target database must support VARCHAR with no length"""
    return _chain_decorators_on(
        fn,
        no_support("firebird", "not supported by database"),
        no_support("oracle", "not supported by database"),
        no_support("mysql", "not supported by database"),
    )
예제 #25
0
def deferrable_or_no_constraints(fn):
    """Target database must support derferable constraints."""
    return _chain_decorators_on(
        fn,
        no_support('firebird', 'not supported by database'),
        no_support('mysql', 'not supported by database'),
        no_support('mssql', 'not supported by database'),
    )
예제 #26
0
def independent_cursors(fn):
    """Target must support simultaneous, independent database cursors on a single connection."""

    return _chain_decorators_on(
        fn,
        no_support('mssql+pyodbc', 'no driver support'),
        no_support('mssql+mxodbc', 'no driver support'),
        )
예제 #27
0
def unbounded_varchar(fn):
    """Target database must support VARCHAR with no length"""
    return _chain_decorators_on(
        fn,
        no_support('firebird', 'not supported by database'),
        no_support('oracle', 'not supported by database'),
        no_support('mysql', 'not supported by database'),
    )
예제 #28
0
def independent_cursors(fn):
    """Target must support simultaneous, independent database cursors on a single connection."""

    return _chain_decorators_on(
        fn,
        no_support('mssql+pyodbc', 'no driver support'),
        no_support('mssql+mxodbc', 'no driver support'),
    )
예제 #29
0
def unbounded_varchar(fn):
    """Target database must support VARCHAR with no length"""
    return _chain_decorators_on(
        fn,
        no_support('firebird', 'not supported by database'),
        no_support('oracle', 'not supported by database'),
        no_support('mysql', 'not supported by database'),
    )
예제 #30
0
def schemas(fn):
    """Target database must support external schemas, and have one named 'test_schema'."""

    return _chain_decorators_on(
        fn,
        no_support('sqlite', 'no schema support'),
        no_support('firebird', 'no schema support')
    )
예제 #31
0
def intersect(fn):
    """Target database must support INTERSECT or equivlaent."""
    return _chain_decorators_on(
        fn,
        fails_on('firebird', 'no support for INTERSECT'),
        fails_on('mysql', 'no support for INTERSECT'),
        fails_on('sybase', 'no support for INTERSECT'),
    )
예제 #32
0
def deferrable_constraints(fn):
    """Target database must support derferable constraints."""
    return _chain_decorators_on(
        fn,
        no_support('firebird', 'not supported by database'),
        no_support('mysql', 'not supported by database'),
        no_support('mssql', 'not supported by database'),
        )
예제 #33
0
def skip_mysql_on_windows(fn):
    """Catchall for a large variety of MySQL on Windows failures"""

    return _chain_decorators_on(
        fn,
        skip_if(_has_mysql_on_windows,
            "Not supported on MySQL + Windows"
        )
    )
예제 #34
0
def skip_mysql_on_windows(fn):
    """Catchall for a large variety of MySQL on Windows failures"""

    return _chain_decorators_on(
        fn,
        skip_if(_has_mysql_on_windows,
            "Not supported on MySQL + Windows"
        )
    )
예제 #35
0
파일: requires.py 프로젝트: MaxMorais/skink
def row_triggers(fn):
    """Target must support standard statement-running EACH ROW triggers."""
    return _chain_decorators_on(
        fn,
        # no access to same table
        no_support('mysql', 'requires SUPER priv'),
        exclude('mysql', '<', (5, 0, 10), 'not supported by database'),
        no_support('postgres', 'not supported by database: no statements'),
        )
예제 #36
0
def row_triggers(fn):
    """Target must support standard statement-running EACH ROW triggers."""
    return _chain_decorators_on(
        fn,
        # no access to same table
        no_support('mysql', 'requires SUPER priv'),
        exclude('mysql', '<', (5, 0, 10), 'not supported by database'),
        no_support('postgres', 'not supported by database: no statements'),
    )
예제 #37
0
파일: requires.py 프로젝트: MaxMorais/skink
def independent_connections(fn):
    """Target must support simultaneous, independent database connections."""

    # This is also true of some configurations of UnixODBC and probably win32
    # ODBC as well.
    return _chain_decorators_on(
        fn,
        no_support('sqlite', 'no driver support')
        )
예제 #38
0
파일: requires.py 프로젝트: lulzmachine/rad
def independent_connections(fn):
    """Target must support simultaneous, independent database connections."""

    # This is also true of some configurations of UnixODBC and probably win32
    # ODBC as well.
    return _chain_decorators_on(
        fn,
        no_support("sqlite", "no driver support"),
        exclude("mssql", "<", (9, 0, 0), "SQL Server 2005+ is required for independent connections"),
    )
예제 #39
0
def savepoints(fn):
    """Target database must support savepoints."""
    return _chain_decorators_on(
        fn,
        emits_warning_on('mssql', 'Savepoint support in mssql is experimental and may lead to data loss.'),
        no_support('access', 'not supported by database'),
        no_support('sqlite', 'not supported by database'),
        no_support('sybase', 'FIXME: guessing, needs confirmation'),
        exclude('mysql', '<', (5, 0, 3), 'not supported by database'),
        )
예제 #40
0
def ad_hoc_engines(fn):
    """Test environment must allow ad-hoc engine/connection creation.
    
    DBs that scale poorly for many connections, even when closed, i.e.
    Oracle, may use the "--low-connections" option which flags this requirement
    as not present.
    
    """
    return _chain_decorators_on(
        fn, skip_if(lambda: config.options.low_connections))
예제 #41
0
def sequences(fn):
    """Target database must support SEQUENCEs."""
    return _chain_decorators_on(
        fn,
        no_support('access', 'no SEQUENCE support'),
        no_support('mssql', 'no SEQUENCE support'),
        no_support('mysql', 'no SEQUENCE support'),
        no_support('sqlite', 'no SEQUENCE support'),
        no_support('sybase', 'no SEQUENCE support'),
        )
예제 #42
0
def savepoints(fn):
    """Target database must support savepoints."""
    return _chain_decorators_on(
        fn,
        no_support('access', 'savepoints not supported'),
        no_support('sqlite', 'savepoints not supported'),
        no_support('sybase', 'savepoints not supported'),
        exclude('mysql', '<', (5, 0, 3), 'savepoints not supported'),
        exclude('informix', '<', (11, 55, 'xC3'), 'savepoints not supported'),
    )
예제 #43
0
def savepoints(fn):
    """Target database must support savepoints."""
    return _chain_decorators_on(
        fn,
        no_support('access', 'savepoints not supported'),
        no_support('sqlite', 'savepoints not supported'),
        no_support('sybase', 'savepoints not supported'),
        exclude('mysql', '<', (5, 0, 3), 'savepoints not supported'),
        exclude('informix', '<', (11, 55, 'xC3'), 'savepoints not supported'),
        )
예제 #44
0
def returning(fn):
    return _chain_decorators_on(
        fn,
        no_support('access', "'returning' not supported by database"),
        no_support('sqlite', "'returning' not supported by database"),
        no_support('mysql', "'returning' not supported by database"),
        no_support('maxdb', "'returning' not supported by database"),
        no_support('sybase', "'returning' not supported by database"),
        no_support('informix', "'returning' not supported by database"),
    )
예제 #45
0
def unicode_ddl(fn):
    """Target driver must support some encoding of Unicode across the wire."""
    # TODO: expand to exclude MySQLdb versions w/ broken unicode
    return _chain_decorators_on(
        fn,
        no_support('maxdb', 'database support flakey'),
        no_support('oracle', 'FIXME: no support in database?'),
        no_support('sybase', 'FIXME: guessing, needs confirmation'),
        exclude('mysql', '<', (4, 1, 1), 'no unicode connection support'),
    )
예제 #46
0
def returning(fn):
    return _chain_decorators_on(
        fn,
        no_support('access', "'returning' not supported by database"),
        no_support('sqlite', "'returning' not supported by database"),
        no_support('mysql', "'returning' not supported by database"),
        no_support('maxdb', "'returning' not supported by database"),
        no_support('sybase', "'returning' not supported by database"),
        no_support('informix', "'returning' not supported by database"),
    )
예제 #47
0
파일: requires.py 프로젝트: lulzmachine/rad
def row_triggers(fn):
    """Target must support standard statement-running EACH ROW triggers."""
    return _chain_decorators_on(
        fn,
        # no access to same table
        no_support("mysql", "requires SUPER priv"),
        exclude("mysql", "<", (5, 0, 10), "not supported by database"),
        # huh?  TODO: implement triggers for PG tests, remove this
        no_support("postgresql", "PG triggers need to be implemented for tests"),
    )
예제 #48
0
def sequences(fn):
    """Target database must support SEQUENCEs."""
    return _chain_decorators_on(
        fn,
        no_support('access', 'no SEQUENCE support'),
        no_support('mssql', 'no SEQUENCE support'),
        no_support('mysql', 'no SEQUENCE support'),
        no_support('sqlite', 'no SEQUENCE support'),
        no_support('sybase', 'no SEQUENCE support'),
    )
예제 #49
0
def boolean_col_expressions(fn):
    """Target database must support boolean expressions as columns"""
    return _chain_decorators_on(
        fn,
        no_support('firebird', 'not supported by database'),
        no_support('oracle', 'not supported by database'),
        no_support('mssql', 'not supported by database'),
        no_support('sybase', 'not supported by database'),
        no_support('maxdb', 'FIXME: verify not supported by database'),
    )
예제 #50
0
파일: requires.py 프로젝트: lulzmachine/rad
def savepoints(fn):
    """Target database must support savepoints."""
    return _chain_decorators_on(
        fn,
        emits_warning_on("mssql", "Savepoint support in mssql is experimental and may lead to data loss."),
        no_support("access", "not supported by database"),
        no_support("sqlite", "not supported by database"),
        no_support("sybase", "FIXME: guessing, needs confirmation"),
        exclude("mysql", "<", (5, 0, 3), "not supported by database"),
    )
예제 #51
0
파일: requires.py 프로젝트: MaxMorais/skink
def unicode_ddl(fn):
    """Target driver must support some encoding of Unicode across the wire."""
    # TODO: expand to exclude MySQLdb versions w/ broken unicode
    return _chain_decorators_on(
        fn,
        no_support('maxdb', 'database support flakey'),
        no_support('oracle', 'FIXME: no support in database?'),
        no_support('sybase', 'FIXME: guessing, needs confirmation'),
        exclude('mysql', '<', (4, 1, 1), 'no unicode connection support'),
        )
예제 #52
0
def update_nowait(fn):
    """Target database must support SELECT...FOR UPDATE NOWAIT"""
    return _chain_decorators_on(
        fn,
        no_support('access', 'no FOR UPDATE NOWAIT support'),
        no_support('firebird', 'no FOR UPDATE NOWAIT support'),
        no_support('mssql', 'no FOR UPDATE NOWAIT support'),
        no_support('mysql', 'no FOR UPDATE NOWAIT support'),
        no_support('sqlite', 'no FOR UPDATE NOWAIT support'),
        no_support('sybase', 'no FOR UPDATE NOWAIT support'),
    )
예제 #53
0
def independent_connections(fn):
    """Target must support simultaneous, independent database connections."""

    # This is also true of some configurations of UnixODBC and probably win32
    # ODBC as well.
    return _chain_decorators_on(
        fn,
        no_support('sqlite', 'no driver support'),
        exclude('mssql', '<', (9, 0, 0),
                'SQL Server 2005+ is required for independent connections'),
    )
예제 #54
0
def row_triggers(fn):
    """Target must support standard statement-running EACH ROW triggers."""
    return _chain_decorators_on(
        fn,
        # no access to same table
        no_support('mysql', 'requires SUPER priv'),
        exclude('mysql', '<', (5, 0, 10), 'not supported by database'),

        # huh?  TODO: implement triggers for PG tests, remove this
        no_support('postgresql', 'PG triggers need to be implemented for tests'),
        )
예제 #55
0
def two_phase_transactions(fn):
    """Target database must support two-phase transactions."""
    return _chain_decorators_on(
        fn,
        no_support('access', 'not supported by database'),
        no_support('firebird', 'no SA implementation'),
        no_support('maxdb', 'not supported by database'),
        no_support('mssql', 'FIXME: guessing, needs confirmation'),
        no_support('oracle', 'no SA implementation'),
        no_support('sqlite', 'not supported by database'),
        no_support('sybase', 'FIXME: guessing, needs confirmation'),
        exclude('mysql', '<', (5, 0, 3), 'not supported by database'),
    )
예제 #56
0
def identity(fn):
    """Target database must support GENERATED AS IDENTITY or a facsimile.

    Includes GENERATED AS IDENTITY, AUTOINCREMENT, AUTO_INCREMENT, or other
    column DDL feature that fills in a DB-generated identifier at INSERT-time
    without requiring pre-execution of a SEQUENCE or other artifact.

    """
    return _chain_decorators_on(
        fn,
        no_support('firebird', 'not supported by database'),
        no_support('oracle', 'not supported by database'),
        no_support('postgresql', 'not supported by database'),
        no_support('sybase', 'not supported by database'),
    )
예제 #57
0
def two_phase_transactions(fn):
    """Target database must support two-phase transactions."""
    return _chain_decorators_on(
        fn,
        no_support('access', 'not supported by database'),
        no_support('firebird', 'no SA implementation'),
        no_support('maxdb', 'not supported by database'),
        no_support('mssql', 'FIXME: guessing, needs confirmation'),
        no_support('oracle', 'no SA implementation'),
        no_support('drizzle', 'not supported by database'),
        no_support('sqlite', 'not supported by database'),
        no_support('sybase', 'FIXME: guessing, needs confirmation'),
        no_support(
            'postgresql+zxjdbc',
            'FIXME: JDBC driver confuses the transaction state, may '
            'need separate XA implementation'),
        exclude('mysql', '<', (5, 0, 3), 'not supported by database'),
    )
예제 #58
0
def sqlite(fn):
    return _chain_decorators_on(fn, skip_if(lambda: not _has_sqlite()))
예제 #59
0
def english_locale_on_postgresql(fn):
    return _chain_decorators_on(
        fn,
        skip_if(lambda: testing.against('postgresql') \
                and not testing.db.scalar('SHOW LC_COLLATE').startswith('en'))
    )