[Info-vax] Pascal & MySQL

Arne Vajhøj arne at vajhoej.dk
Mon May 6 21:39:13 EDT 2019


On 12/21/2018 2:27 PM, Arne Vajhøj wrote:
> I have started creating a Pascal wrapper for MySQL C API.
> 
> Just a simple conversion of data types from C'ish to
> Pascal'ish.

I added some additional convenience routines.

Before:

procedure test_getone(con : mysql_ptr; f1 : integer);

var
    stmt : mysql_stmt_ptr;
    stat : integer;
    inparam : array[1..1] of mysql_bind;
    outparam : array[1..1] of mysql_bind;
    f2 : longpstr(255);

begin
    stmt := pmysql_stmt_init(con);
    checkstmt(stmt, con);
    stat := pmysql_stmt_prepare(stmt, 'SELECT f2 FROM t1 WHERE f1 = ?');
    checkstat(stat, stmt);
    pmysql_init_bind_long(inparam[1], f1);
    stat := pmysql_stmt_bind_param(stmt, inparam);
    checkstat(stat, stmt);
    stat := pmysql_stmt_execute(stmt);
    checkstat(stat, stmt);
    pmysql_init_bind_string_out(outparam[1], f2);
    stat := pmysql_stmt_bind_result(stmt, outparam);
    checkstat(stat, stmt);
    stat := pmysql_stmt_store_result(stmt);
    checkstat(stat, stmt);
    if pmysql_stmt_fetch(stmt) = 0 then begin
       writeln(stdstr(f2));
    end;
    pmysql_stmt_free_result(stmt);
end;

procedure test_getall(con : mysql_ptr);

var
    stmt : mysql_stmt_ptr;
    stat : integer;
    outparam : array[1..2] of mysql_bind;
    f1 : integer;
    f2 : longpstr(255);

begin
    stmt := pmysql_stmt_init(con);
    checkstmt(stmt, con);
    stat := pmysql_stmt_prepare(stmt, 'SELECT f1,f2 FROM t1');
    checkstat(stat, stmt);
    stat := pmysql_stmt_execute(stmt);
    checkstat(stat, stmt);
    pmysql_init_bind_long(outparam[1], f1);
    pmysql_init_bind_string_out(outparam[2], f2);
    stat := pmysql_stmt_bind_result(stmt, outparam);
    checkstat(stat, stmt);
    stat := pmysql_stmt_store_result(stmt);
    checkstat(stat, stmt);
    while pmysql_stmt_fetch(stmt) = 0 do begin
       writeln(f1, ' ', stdstr(f2));
    end;
    pmysql_stmt_free_result(stmt);
end;

after:

procedure test_getone(con : mysql_ptr; f1 : integer);

var
    stmt : mysql_stmt_ptr;
    f2 : longpstr(255);

begin
    stmt := pmysql_prepare(con, 'SELECT f2 FROM t1 WHERE f1 = ?', 
long_arg(f1));
    checkstmt(stmt, con);
    if pmysql_get_result_single_string(stmt, f2) then begin
       writeln(stdstr(f2));
    end;
    pmysql_stmt_free_result(stmt);
end;

procedure test_getall(con : mysql_ptr);

var
    stmt : mysql_stmt_ptr;
    stat : integer;
    f1 : integer;
    f2 : longpstr(255);

begin
    stmt := pmysql_prepare(con, 'SELECT f1,f2 FROM t1');
    checkstmt(stmt, con);
    stat := pmysql_get_result_start(stmt, long_arg(f1), longstring_arg(f2));
    checkstat(stat, stmt);
    while pmysql_stmt_fetch(stmt) = 0 do begin
       writeln(f1, ' ', stdstr(f2));
    end;
    pmysql_stmt_free_result(stmt);
end;

A lot nicer I think.

Source at:

http://www.vajhoej.dk/arne/opensource/vms/vmspmysql-src-v0_2.zip

Arne





More information about the Info-vax mailing list