跳转至

db.rowmap

since: std-0.5 stability: experimental

运行时行→struct 绑定面(P5-E;§12.5) ════════════════════════════════════════════════════════════════════ D-P5-1 设计偏差(登记;§8.4 语言决策裁定的不可达承诺): 设计稿 §12.5 承诺"comptime 行映射,列缺失/类型不符编译期报 (负例锚 r7d_db_rowmap.neg.ct)"——§8.4 明文禁止泛型反射(类型产出 函数预留 v2),该承诺在现行语言下不可达。本文件落运行时绑定: 列缺失/类型不符 = 运行时 Err 面(RmVal.kind 1/2;负例锚 tests/db/rowmap/ 按运行时 Err 语义断言——锚语义自本波起从"编译期报" 改"运行时 Err",COVERAGE 口径随 Task 6 同步)。@derive(DbRow) 编译器 插件(编译器已知 derive 集扩展)= 列编译泳道志向;落地后本文件的 OID 表/列名匹配面即其运行时回落(v2 演进位,API 保持)。 ════════════════════════════════════════════════════════════════════ ═══ API 面(v1 诚实形)═══ rm_col(rows, name) → 列名→下标(缺失 → -1,经 RowDescription 查找); rm_i64/rm_f64/rm_bool/rm_str(rows, row, name) → RmVal(struct 通道): kind 0 ok / 1 列缺失(noent)/ 2 类型不符(声明 OID 与访问器族违)/ 3 NULL(调用方经 wrapper 映射 Option:kind 3 → None,否则 Some)/ 4 行越界 / 5 值域坏(文本解析溢出/非数值形态)。 正向绑定演示(结构体字面量显式字段装配)= tests/db/rowmap(r7d 正例钉)。 ═══ 类型分派表(声明 OID;v1 子集 = 基本面常型)═══ bool 16 / int8 20 / int2 21 / int4 23 / text 25 / float4 700 / float8 701 / varchar 1043。整族访问器收 {20,21,23};文本族收 {25,1043};浮族收 {700,701};布尔收 {16}。族外 OID → kind 2 (fail-closed;新常型随消费面扩表)。 ═══ 依赖与发射面纪律(divergences (f)-(i);全镜像 pg.ct 族)═══ 单子扩展 db.pg(PgRows getter 面消费;(h) 跨模块数值载荷禁 Result ⇒ RmVal struct 通道,P5-A 裁定同源;Err-Str 载荷虽绿,统一 struct 通道口径)。NULL → kind 3 显式面,无隐式零值(§12.5)。 文本解码 = pg ASCII 表切片口径(utf8_enc 解释器坏,pg.ct 头注③ 登记;非 ASCII 格 fail-closed 空串)。i64 解析乘 10 前哨兵界门; f64 解析镜像 json jf64(尾数 ≤17 有效位 + 升降幂逐次界门,C10)。 inline test 不落本文件;行为面 tests/db/rowmap。

pub struct

struct RmVal

Field Type
var ok I64
var kind I64
var v I64
var d F64
var s Str
var oid I64
var col I64

struct PgRecv

Field Type
var rc I64
var err I64
var next I64
var mtype I32
var body List[I32]

struct PgErrData

Field Type
var ok I64
var sev Str
var code Str
var msg Str

struct PgRows

Field Type
var rc I64
var err I64
var nrows I64
var ncols I64
var tag Str
var cols List[Str]
var oids List[I32]
var cells List[Str]
var nulls List[I32]
var cbytes List[I32]
var coffs List[I32]
var esev Str
var ecode Str
var emsg Str
var next I64
var status I64

pub fn

Signature Returns Description
rm_query(frames: List[Str], cur: I64, sql: Str) PgRows —
rm_rc(r: PgRows) I64 —
rm_nrows(r: PgRows) I64 —
rm_ncols(r: PgRows) I64 —
rm_colname(r: PgRows, i: I64) Str —
rm_tag(r: PgRows) Str —
rm_oid_name(oid: I64) Str 类型 OID → 名(v1 子集;表外 → "")
rm_is_bool_oid(oid: I64) I64 —
rm_is_int_oid(oid: I64) I64 —
rm_is_text_oid(oid: I64) I64 —
rm_is_float_oid(oid: I64) I64 —
rm_col(r: PgRows, name: Str) I64 —
rm_ok(x: RmVal) I64 —
rm_kind(x: RmVal) I64 0 ok / 1 noent / 2 type / 3 null / 4 row-oob / 5 val-domain
rm_val(x: RmVal) I64 —
rm_f64v(x: RmVal) F64 —
rm_strv(x: RmVal) Str —
rm_oid(x: RmVal) I64 —
rm_coli(x: RmVal) I64 —
rm_i64(r: PgRows, row: I64, name: Str) RmVal —
rm_f64(r: PgRows, row: I64, name: Str) RmVal —
rm_bool(r: PgRows, row: I64, name: Str) RmVal —
rm_str(r: PgRows, row: I64, name: Str) RmVal —
pg_frame_max() I64 —
pg_err_frame() I64 —
pg_err_proto() I64 —
pg_err_eof() I64 —
pg_err_response() I64 —
pg_hex_decode(s: Str) List[I32] —
pg_recv_frame_script(frames: List[Str], cur: I64) PgRecv —
pg_ready_status(body: List[I32]) I64 —
pg_tag(body: List[I32]) Str —
pg_err_data(body: List[I32]) PgErrData —
pgr_rc(r: PgRows) I64 —
pgr_rows(r: PgRows) I64 —
pgr_cols(r: PgRows) I64 —
pgr_tag(r: PgRows) Str —
pgr_colname(r: PgRows, i: I64) Str —
pgr_oid(r: PgRows, i: I64) I64 —
pgr_isnull(r: PgRows, row: I64, col: I64) I64 —
pgr_cell(r: PgRows, row: I64, col: I64) Str —
pg_query_script(frames: List[Str], cur: I64, sql: Str) PgRows —
sha256_hex(msg: Str) Str —
sha1_hex(msg: Str) Str —
sha256_bytes(msg: List[I32]) List[I32] —
hmac_sha256(key: List[I32], msg: List[I32]) List[I32] —
bytes_to_hex(b: List[I32]) Str —
bytes_from_hex(s: Str) List[I32] —