feat: DB管线补全 + 新增orchestrator_db/program_schema/to_sql + 清理临时脚本
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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}")
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user