test_duckdb.hsp

sample\iron\test_duckdb.hsp » Plain Format

;============================================================
;  test_duckdb.hsp — hspduckdb.dll 自動テスト
;
;  in-memory DuckDB を開いて簡単な SQL を走らせ、結果を検証。
;============================================================

#include "hsp3cl_net_64.as"
#include "hspduckdb.as"
#include "iron_test_ex.hsp"

    ; in-memory database を開く (":memory:")
    duckdb_open_db ":memory:", h
    test_case "duckdb_open_db :memory:"
        ok = 0
        if h >= 0 : ok = 1
        assert_true ok
    test_end

    if h < 0 : end testrt_summary()

    ; シンプルな SELECT
    duckdb_query h, "SELECT 42 AS answer", qh
    test_case "SELECT 42: query handle ok"
        ok = 0
        if qh >= 0 : ok = 1
        assert_true ok
    test_end

    ; 行数 = 1
    test_case "SELECT 42: 1 row"
        duckdb_result_rows qh, nrows
        expect_eq nrows, 1
    test_end

    ; 列数 = 1
    test_case "SELECT 42: 1 col"
        duckdb_result_cols qh, ncols
        expect_eq ncols, 1
    test_end

    ; 列名 = "answer"
    test_case "SELECT 42: col name is 'answer'"
        sdim cn, 64
        duckdb_result_col_name qh, 0, cn, 64
        expect_streq cn, "answer"
    test_end

    ; 値 = "42" (文字列経由で取得)
    test_case "SELECT 42: cell value is '42'"
        sdim cv, 64
        duckdb_result_cell_str qh, 0, 0, cv, 64
        expect_streq cv, "42"
    test_end

    duckdb_result_free qh

    ; CREATE TABLE + INSERT + SELECT
    duckdb_exec h, "CREATE TABLE t (id INT, name VARCHAR)", rc
    duckdb_exec h, "INSERT INTO t VALUES (1, 'alice'), (2, 'bob'), (3, 'carol')", rc
    duckdb_query h, "SELECT COUNT(*) FROM t", qh
    test_case "INSERT 3 rows then COUNT"
        sdim cv, 64
        duckdb_result_cell_str qh, 0, 0, cv, 64
        expect_streq cv, "3"
    test_end
    duckdb_result_free qh

    duckdb_close_db h
    end testrt_summary()