feat: DB管线补全 + 新增orchestrator_db/program_schema/to_sql + 清理临时脚本

This commit is contained in:
hangshuo652
2026-07-11 14:55:52 +08:00
parent 40e8a50ab4
commit af37e33b98
32 changed files with 3232 additions and 255 deletions
+11
View File
@@ -34,6 +34,12 @@ class Config:
gcov_threshold: float = 0.5
max_quality_retries: int = 4
# gixsql for DB programs
gixsql_path: str = "gixsql/bin/gixpp.exe"
gixsql_lib_path: str = "gixsql/lib"
gixsql_db_path: str = ".db/gixsql"
gixsql_compile_flags: str = "-fixed -ext cpy --coverage"
@classmethod
def from_toml(cls, path="aurak.toml"):
import tomllib
@@ -56,6 +62,11 @@ class Config:
c.tolerance = cp.get("default_tolerance", c.tolerance)
r = d.get("runner", {})
c.runner_mode = r.get("mode", "native")
g = d.get("gixsql", {})
c.gixsql_path = g.get("path", c.gixsql_path)
c.gixsql_lib_path = g.get("lib_path", c.gixsql_lib_path)
c.gixsql_db_path = g.get("db_path", c.gixsql_db_path)
c.gixsql_compile_flags = g.get("compile_flags", c.gixsql_compile_flags)
s = d.get("spark", {})
c.spark_master = s.get("master", "local[*]")
c.num_records = s.get("num_records", c.num_records)
+64
View File
@@ -0,0 +1,64 @@
"""Program schema — per-program DB table definitions + subprogram list."""
from __future__ import annotations
from dataclasses import dataclass, field
from pathlib import Path
from typing import Optional
@dataclass
class ColumnDef:
name: str
type: str # SQL type: "CHAR(6)", "NUMERIC(4)", "VARCHAR(30)"
primary_key: bool = False
nullable: bool = False
default: Optional[str] = None
cobol_field: Optional[str] = None # COBOL field name if different
@dataclass
class TableDef:
name: str
columns: list[ColumnDef] = field(default_factory=list)
create_if_missing: bool = True
sql_name: Optional[str] = None # COBOL SQL table name if different from YAML name
@dataclass
class ProgramSchema:
program_id: str
db_tables: list[TableDef] = field(default_factory=list)
subprograms: list[str] = field(default_factory=list)
db_type: str = "SQLite"
db_name: str = "OVERTIME.DB"
@classmethod
def from_yaml(cls, path: str | Path) -> ProgramSchema:
import yaml
with open(path, encoding="utf-8") as f:
raw = yaml.safe_load(f)
tables = []
for t in raw.get("db_tables", []):
cols = [ColumnDef(**c) for c in t.get("columns", [])]
tables.append(TableDef(
name=t["name"], columns=cols,
sql_name=t.get("sql_name"),
))
return cls(
program_id=raw["program_id"],
db_tables=tables,
subprograms=raw.get("subprograms", []),
db_type=raw.get("db_type", "SQLite"),
db_name=raw.get("db_name", "OVERTIME.DB"),
)
def load_schema(program_id: str, search_dirs: list[str | Path] | None = None) -> ProgramSchema:
"""Load per-program YAML schema by program ID."""
if search_dirs is None:
search_dirs = [Path(__file__).parent / "programs"]
for d in search_dirs:
p = Path(d) / f"{program_id}.yaml"
if p.exists():
return ProgramSchema.from_yaml(p)
raise FileNotFoundError(f"Schema not found for {program_id} in {search_dirs}")
+28
View File
@@ -0,0 +1,28 @@
program_id: KIN02UPD
db_type: SQLite
db_name: kin.db
db_tables:
- name: LEAVE_RECORDS
columns:
- name: APPLICATION_ID
type: INTEGER
primary_key: true
- name: EMP_ID
type: CHAR(8)
- name: LEAVE_TYPE
type: CHAR(2)
- name: START_DATE
type: CHAR(8)
- name: START_TIME
type: CHAR(4)
- name: END_DATE
type: CHAR(8)
- name: END_TIME
type: CHAR(4)
- name: STATUS
type: CHAR(1)
subprograms:
- SUB02MSG
- SUB03END
+37
View File
@@ -0,0 +1,37 @@
program_id: KIN03EXP
db_type: SQLite
db_name: kin.db
db_tables:
- name: LEAVE_RECORDS
columns:
- name: APPLICATION_ID
type: INTEGER
primary_key: true
- name: EMP_ID
type: CHAR(8)
- name: LEAVE_TYPE
type: CHAR(2)
- name: START_DATE
type: CHAR(8)
- name: START_TIME
type: CHAR(4)
- name: END_DATE
type: CHAR(8)
- name: END_TIME
type: CHAR(4)
- name: STATUS
type: CHAR(1)
- name: HOLIDAY_CALENDAR
columns:
- name: HOLIDAY_DATE
type: CHAR(8)
primary_key: true
- name: DESCRIPTION
type: VARCHAR(50)
subprograms:
- SUB01DAT
- SUB02MSG
- SUB03END
+28
View File
@@ -0,0 +1,28 @@
program_id: KIN06CLD
db_type: SQLite
db_name: kin.db
db_tables:
- name: HOLIDAY_CALENDAR
columns:
- name: HOLIDAY_DATE
type: CHAR(8)
primary_key: true
- name: DESCRIPTION
type: VARCHAR(50)
- name: EMP_MASTER
columns:
- name: EMP_ID
type: CHAR(8)
primary_key: true
- name: DEPT_ID
type: CHAR(4)
- name: EMP_NAME
type: VARCHAR(50)
- name: STATUS
type: CHAR(1)
subprograms:
- SUB02MSG
- SUB03END
+54
View File
@@ -0,0 +1,54 @@
program_id: KIN08DBU
db_type: SQLite
db_name: kin.db
db_tables:
- name: DAILY_RECORDS
columns:
- name: EMP_ID
type: CHAR(8)
primary_key: true
- name: TARGET_DATE
type: CHAR(8)
primary_key: true
- name: TIME_IN
type: CHAR(4)
- name: TIME_OUT
type: CHAR(4)
- name: ANNUAL_LEAVE_H
type: DECIMAL(6,1)
- name: PERSONAL_LEAVE_H
type: DECIMAL(6,1)
- name: OFFICIAL_LEAVE_H
type: DECIMAL(6,1)
- name: SICK_LEAVE_H
type: DECIMAL(6,1)
- name: UNAPPROVED_ABSENT_H
type: DECIMAL(6,1)
- name: UPDATED_AT
type: TIMESTAMP
- name: MONTHLY_ABSENCE
columns:
- name: EMP_ID
type: CHAR(8)
primary_key: true
- name: YEAR_MONTH
type: CHAR(6)
primary_key: true
- name: ANNUAL_LEAVE_H
type: DECIMAL(6,1)
- name: PERSONAL_LEAVE_H
type: DECIMAL(6,1)
- name: OFFICIAL_LEAVE_H
type: DECIMAL(6,1)
- name: SICK_LEAVE_H
type: DECIMAL(6,1)
- name: UNAPPROVED_ABSENT_H
type: DECIMAL(6,1)
- name: UPDATED_AT
type: TIMESTAMP
subprograms:
- SUB02MSG
- SUB03END
+54
View File
@@ -0,0 +1,54 @@
program_id: KIN09CSV
db_type: SQLite
db_name: kin.db
db_tables:
- name: DAILY_RECORDS
columns:
- name: EMP_ID
type: CHAR(8)
primary_key: true
- name: TARGET_DATE
type: CHAR(8)
primary_key: true
- name: TIME_IN
type: CHAR(4)
- name: TIME_OUT
type: CHAR(4)
- name: ANNUAL_LEAVE_H
type: DECIMAL(6,1)
- name: PERSONAL_LEAVE_H
type: DECIMAL(6,1)
- name: OFFICIAL_LEAVE_H
type: DECIMAL(6,1)
- name: SICK_LEAVE_H
type: DECIMAL(6,1)
- name: UNAPPROVED_ABSENT_H
type: DECIMAL(6,1)
- name: UPDATED_AT
type: TIMESTAMP
- name: MONTHLY_ABSENCE
columns:
- name: EMP_ID
type: CHAR(8)
primary_key: true
- name: YEAR_MONTH
type: CHAR(6)
primary_key: true
- name: ANNUAL_LEAVE_H
type: DECIMAL(6,1)
- name: PERSONAL_LEAVE_H
type: DECIMAL(6,1)
- name: OFFICIAL_LEAVE_H
type: DECIMAL(6,1)
- name: SICK_LEAVE_H
type: DECIMAL(6,1)
- name: UNAPPROVED_ABSENT_H
type: DECIMAL(6,1)
- name: UPDATED_AT
type: TIMESTAMP
subprograms:
- SUB02MSG
- SUB03END
+46
View File
@@ -0,0 +1,46 @@
program_id: ZAN06UPD
db_type: SQLite
db_tables:
- name: ZANTBL01
sql_name: OVT_APPLICATIONS
columns:
- name: EMPNO
type: CHAR(6)
primary_key: true
- name: WORK_DATE
type: CHAR(8)
primary_key: true
- name: START_TIME
type: NUMERIC(4)
cobol_field: DB-START-TIME
- name: END_TIME
type: NUMERIC(4)
cobol_field: DB-END-TIME
- name: OVERTIME
type: NUMERIC(4)
cobol_field: DB-OVERTIME
- name: APPROVAL_FLAG
type: CHAR(1)
cobol_field: DB-APPROVAL-FLAG
- name: NOTES
type: VARCHAR(100)
cobol_field: DB-NOTES
- name: ZANTBL02
sql_name: OVT_MONTHLY
columns:
- name: EMPNO
type: CHAR(6)
primary_key: true
- name: DEPTNO
type: CHAR(4)
primary_key: true
- name: DEPT_NAME
type: VARCHAR(30)
cobol_field: DB-DEPT-NAME
subprograms:
- SUB01DAT
- SUB02MSG
- SUB03END