Exemplo n.º 1
0
    def test_outparam(self):
        with self._connect() as con:
            cur = con.cursor()
            self._outparam_setup(cur)
            values = cur.callproc('add_one_out', (1, output(value=1)))
            self.assertEqual(len(values), 2, 'expected 2 parameters')
            self.assertEqual(values[0], 1, 'input parameter should be unchanged')
            self.assertEqual(values[1], 2, 'output parameter should get new values')

            values = cur.callproc('add_one_out', (None, output(value=1)))
            self.assertEqual(len(values), 2, 'expected 2 parameters')
            self.assertEqual(values[0], None, 'input parameter should be unchanged')
            self.assertEqual(values[1], None, 'output parameter should get new values')
Exemplo n.º 2
0
def test_outparam_null_default(cursor):
    with pytest.raises(ValueError):
        pytds.output(None, None)

    cur = cursor
    cur.execute('''
    create procedure outparam_null_testproc (@inparam int, @outint int = 8 output, @outstr varchar(max) = 'defstr' output)
    as
    begin
        set nocount on
        set @outint = isnull(@outint, -10) + @inparam
        set @outstr = isnull(@outstr, 'null') + cast(@inparam as varchar(max))
        set @inparam = 8
    end
    ''')
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=4), pytds.output(value='str')))
    assert [1, 5, 'str1'] == values
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=None, param_type='int'), pytds.output(value=None, param_type='varchar(max)')))
    assert [1, -9, 'null1'] == values
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=pytds.default, param_type='int'), pytds.output(value=pytds.default, param_type='varchar(max)')))
    assert [1, 9, 'defstr1'] == values
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=pytds.default, param_type='bit'), pytds.output(value=pytds.default, param_type='varchar(5)')))
    assert [1, 1, 'defst'] == values
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=pytds.default, param_type=int), pytds.output(value=pytds.default, param_type=str)))
    assert [1, 9, 'defstr1'] == values
Exemplo n.º 3
0
def test_outparam_null_default(cursor):
    with pytest.raises(ValueError):
        pytds.output(None, None)

    cur = cursor
    cur.execute('''
    create procedure outparam_null_testproc (@inparam int, @outint int = 8 output, @outstr varchar(max) = 'defstr' output)
    as
    begin
        set nocount on
        set @outint = isnull(@outint, -10) + @inparam
        set @outstr = isnull(@outstr, 'null') + cast(@inparam as varchar(max))
        set @inparam = 8
    end
    ''')
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=4), pytds.output(value='str')))
    assert [1, 5, 'str1'] == values
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=None, param_type='int'), pytds.output(value=None, param_type='varchar(max)')))
    assert [1, -9, 'null1'] == values
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=pytds.default, param_type='int'), pytds.output(value=pytds.default, param_type='varchar(max)')))
    assert [1, 9, 'defstr1'] == values
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=pytds.default, param_type='bit'), pytds.output(value=pytds.default, param_type='varchar(5)')))
    assert [1, 1, 'defst'] == values
    values = cur.callproc('outparam_null_testproc', (1, pytds.output(value=pytds.default, param_type=int), pytds.output(value=pytds.default, param_type=str)))
    assert [1, 9, 'defstr1'] == values
Exemplo n.º 4
0
def test_no_metadata_request(cursor):
    cursor._session.submit_rpc(
        rpc_name=pytds.tds_base.SP_PREPARE,
        params=cursor._session._convert_params(
            (pytds.output(param_type=int), '@p1 int', 'select @p1')),
    )
    cursor._session.process_rpc()
    while cursor.nextset():
        pass
    res = cursor.get_proc_outputs()
    handle = res[0]
    logger.info("got handle %s", handle)
    cursor._session.submit_rpc(
        rpc_name=pytds.tds_base.SP_EXECUTE,
        params=cursor._session._convert_params((handle, 1)),
    )
    cursor._session.process_rpc()
    cursor._setup_row_factory()
    assert cursor.fetchall() == [(1, )]
    while cursor.nextset():
        pass
    cursor._session.submit_rpc(
        rpc_name=pytds.tds_base.SP_EXECUTE,
        params=cursor._session._convert_params((handle, 2)),
        flags=0x02  # no metadata
    )
    cursor._session.process_rpc()
    cursor._setup_row_factory()
    # for some reason SQL server still sends metadata back
    assert cursor.fetchall() == [(2, )]
    while cursor.nextset():
        pass
Exemplo n.º 5
0
 def test_call_proc(self):
     with self.conn.cursor() as cur:
         val = 45
         values = cur.callproc('testproc', (val, default, output(value=1)))
         #self.assertEqual(cur.fetchall(), [(val,)])
         self.assertEqual(val + 2, values[2])
         self.assertEqual(val + 2, cur.get_proc_return_status())
Exemplo n.º 6
0
def test_no_metadata_request(cursor):
    cursor._session.submit_rpc(
        rpc_name=pytds.tds_base.SP_PREPARE,
        params=cursor._session._convert_params((pytds.output(param_type=int), '@p1 int', 'select @p1')),
    )
    cursor._session.process_rpc()
    while cursor.nextset():
        pass
    res = cursor.get_proc_outputs()
    handle = res[0]
    logger.info("got handle %s", handle)
    cursor._session.submit_rpc(
        rpc_name=pytds.tds_base.SP_EXECUTE,
        params=cursor._session._convert_params((handle, 1)),
    )
    cursor._session.process_rpc()
    cursor._setup_row_factory()
    assert cursor.fetchall() == [(1,)]
    while cursor.nextset():
        pass
    cursor._session.submit_rpc(
        rpc_name=pytds.tds_base.SP_EXECUTE,
        params=cursor._session._convert_params((handle, 2)),
        flags=0x02  # no metadata
    )
    cursor._session.process_rpc()
    cursor._setup_row_factory()
    # for some reason SQL server still sends metadata back
    assert cursor.fetchall() == [(2,)]
    while cursor.nextset():
        pass
Exemplo n.º 7
0
 def test_call_proc(self):
     with self.conn.cursor() as cur:
         val = 45
         values = cur.callproc('testproc', (val, default, output(value=1)))
         #self.assertEqual(cur.fetchall(), [(val,)])
         self.assertEqual(val + 2, values[2])
         self.assertEqual(val + 2, cur.get_proc_return_status())
Exemplo n.º 8
0
    def test_outparam(self):
        with self._connect() as con:
            cur = con.cursor()
            self._outparam_setup(cur)
            values = cur.callproc('add_one_out', (1, output(value=1)))
            self.assertEqual(len(values), 2, 'expected 2 parameters')
            self.assertEqual(values[0], 1,
                             'input parameter should be unchanged')
            self.assertEqual(values[1], 2,
                             'output parameter should get new values')

            values = cur.callproc('add_one_out', (None, output(value=1)))
            self.assertEqual(len(values), 2, 'expected 2 parameters')
            self.assertEqual(values[0], None,
                             'input parameter should be unchanged')
            self.assertEqual(values[1], None,
                             'output parameter should get new values')
Exemplo n.º 9
0
def test_stored_proc(cursor):
    cur = cursor
    val = 45
    #params = {'@param': val, '@outparam': output(None), '@add': 1}
    values = cur.callproc('testproc', (val, pytds.default, pytds.output(value=1)))
    #self.assertEqual(cur.fetchall(), [(val,)])
    assert val + 2 == values[2]
    assert val + 2 == cur.get_proc_return_status()
Exemplo n.º 10
0
def test_stored_proc(cursor):
    cur = cursor
    val = 45
    #params = {'@param': val, '@outparam': output(None), '@add': 1}
    values = cur.callproc('testproc', (val, pytds.default, pytds.output(value=1)))
    #self.assertEqual(cur.fetchall(), [(val,)])
    assert val + 2 == values[2]
    assert val + 2 == cur.get_proc_return_status()
Exemplo n.º 11
0
 def test_outparam(self):
     con = self._connect()
     try:
         cur = con.cursor()
         self._outparam_setup(cur)
         values = cur.callproc('add_one_out',(1,dbapi.output(None, 1)))
         self.assertEqual(len(values), 2, 'expected 2 parameters')
         self.assertEqual(values[0], 1, 'input parameter should be unchanged')
         self.assertEqual(values[1], 2, 'output parameter should get new values')
     finally:
         con.close()            
Exemplo n.º 12
0
def test_outparam_and_result_set(cursor):
    """
    Test stored procedure which has output parameters and also result set
    """
    cur = cursor
    logger.info('creating stored procedure')
    cur.execute('''
    CREATE PROCEDURE P_OutParam_ResultSet(@A INT OUTPUT)
    AS BEGIN
    SET @A = 3;
    SELECT 4 AS C;
    SELECT 5 AS C;
    END;
    ''')
    logger.info('executing stored procedure')
    cur.callproc('P_OutParam_ResultSet', [pytds.output(value=1)])
    assert [(4, )] == cur.fetchall()
    assert [3] == cur.get_proc_outputs()
    logger.info('execurint query after stored procedure')
    cur.execute('select 5')
    assert [(5, )] == cur.fetchall()
Exemplo n.º 13
0
def test_outparam_and_result_set(cursor):
    """
    Test stored procedure which has output parameters and also result set
    """
    cur = cursor
    logger.info('creating stored procedure')
    cur.execute('''
    CREATE PROCEDURE P_OutParam_ResultSet(@A INT OUTPUT)
    AS BEGIN
    SET @A = 3;
    SELECT 4 AS C;
    SELECT 5 AS C;
    END;
    '''
                )
    logger.info('executing stored procedure')
    cur.callproc('P_OutParam_ResultSet', [pytds.output(value=1)])
    assert [(4,)] == cur.fetchall()
    assert [3] == cur.get_proc_outputs()
    logger.info('execurint query after stored procedure')
    cur.execute('select 5')
    assert [(5,)] == cur.fetchall()