예제 #1
0
void mltds_ct_con_finalize(value connection)
{
    CS_CONNECTION* conn = connection_ptr(connection);

    ct_close(conn, CS_FORCE_CLOSE);
    ct_con_drop(conn);
}
예제 #2
0
int
main(int argc, char **argv)
{
	CS_CONTEXT *ctx;
	CS_CONNECTION *conn;
	int ret = 1;

	read_login_info();
	
	if (cs_ctx_alloc(CS_VERSION_100, &ctx) != CS_SUCCEED) {
		fprintf(stderr, "Context Alloc failed!\n");
		return ret;
	}
	if (ct_init(ctx, CS_VERSION_100) != CS_SUCCEED) {
		fprintf(stderr, "Library Init failed!\n");
		return ret;
	}
	if (ct_con_alloc(ctx, &conn) != CS_SUCCEED) {
		fprintf(stderr, "Connect Alloc failed!\n");
		return ret;
	}
	if (ct_con_props(conn, CS_SET, CS_USERNAME, (CS_VOID*) "sa", CS_NULLTERM, NULL) != CS_SUCCEED) {
		fprintf(stderr, "ct_con_props() SET USERNAME failed!\n");
		return ret;
	}
	if (ct_con_props(conn, CS_SET, CS_PASSWORD, (CS_VOID*) "invalid", CS_NULLTERM, NULL) != CS_SUCCEED) {
		fprintf(stderr, "ct_con_props() SET PASSWORD failed!\n");
		return ret;
	}
	if (ct_connect(conn, SERVER, CS_NULLTERM) != CS_FAIL) {
		fprintf(stderr, "Connection succeeded??\n");
		return ret;
	}

	if (ct_cancel(conn, NULL, CS_CANCEL_ALL) != CS_SUCCEED) {
		fprintf(stderr, "ct_cancel() failed!\n");
		return ret;
	}
	if (ct_close(conn, CS_UNUSED) != CS_SUCCEED) {
		fprintf(stderr, "ct_close() failed!\n");
		return ret;
	}
	if (ct_con_drop(conn) != CS_SUCCEED) {
		fprintf(stderr, "ct_con_drop() failed!\n");
		return ret;
	}
	if (ct_exit(ctx, CS_UNUSED) != CS_SUCCEED) {
		fprintf(stderr, "ct_exit() failed!\n");
		return ret;
	}
	if (cs_ctx_drop(ctx) != CS_SUCCEED) {
		fprintf(stderr, "cs_ctx_drop() failed!\n");
		return ret;
	}

	fprintf(stdout, "Test succeeded\n");
	return 0;
}
예제 #3
0
/* Since only one option is meaningful, simplify to a bool */
CAMLprim value mltds_ct_close( value conn, value force )
{
    CAMLparam2(conn, force);
    CS_INT option = CS_UNUSED;
    if ( Bool_val(force) ) option = CS_FORCE_CLOSE;

    retval_inspect( "ct_close",
                    ct_close(connection_ptr(conn),
                             option) );

    CAMLreturn(Val_unit);
}
예제 #4
0
static VALUE connection_Close(VALUE self) {
	TDS_Connection* conn;
	
	Data_Get_Struct(self, TDS_Connection, conn);

	ct_close(conn->connection, CS_FORCE_CLOSE);
	ct_exit(conn->context, CS_FORCE_EXIT);

	conn->connection = NULL;
	conn->context = NULL;

	return Qnil;
}
예제 #5
0
파일: common.c 프로젝트: dparnell/freetds
CS_RETCODE
try_ctlogout(CS_CONTEXT * ctx, CS_CONNECTION * conn, CS_COMMAND * cmd, int verbose)
{
CS_RETCODE ret;

	ret = ct_cancel(conn, NULL, CS_CANCEL_ALL);
	if (ret != CS_SUCCEED) {
		if (verbose) {
			fprintf(stderr, "ct_cancel() failed!\n");
		}
		return ret;
	}
	ct_cmd_drop(cmd);
	ct_close(conn, CS_UNUSED);
	ct_con_drop(conn);
	ct_exit(ctx, CS_UNUSED);
	cs_ctx_drop(ctx);

	return CS_SUCCEED;
}
예제 #6
0
CS_RETCODE SybConnection::con_cleanup_(CS_RETCODE status)
{
    if (conn_) {
        CS_RETCODE retcode;
        CS_INT close_option;

        close_option = (status != CS_SUCCEED) ? CS_FORCE_CLOSE : CS_UNUSED;
        retcode = ct_close(conn_, close_option);
        if (retcode != CS_SUCCEED) {
            SysLogger::error("con_cleanup_: ct_close() failed");
            return retcode;
        }
        retcode = ct_con_drop(conn_);
        if (retcode != CS_SUCCEED) {
            SysLogger::error("con_cleanup_: ct_con_drop() failed");
            return retcode;
        }
        return retcode;
    } else {
        return CS_SUCCEED;
    }
}