feat: improve field type mapping and add sample dataset resource

- Update GUtils.java to handle case-insensitive column type mapping.
- Add "number" type mapping to support more database dialects.
- Add DevResources/Dataset.xml as a sample dataset definition.
This commit is contained in:
2026-03-02 13:23:42 +07:00
parent d501ecec22
commit 4cbfaed8c7
4 changed files with 63 additions and 2 deletions

View File

@@ -1 +1 @@
2025-09-24
2026-03-02

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8"?>
<DATASET ID="DS-PROJECT">
<SCHEMA>APP</SCHEMA>
<TABLENAME>PROJECTS</TABLENAME>
<KEYFIELDS>PROJ_ID</KEYFIELDS>
<SQL>
<SELECT>SELECT PROJ_ID
, PROJ_YEAR
, PJM_CODE
, STM_CODE
, BTM_CODE
, ACM_CODE, BUD.GET_ACTIVITY(ACM_CODE) ACM_NAME
, ACM_CODE VACM_CODE
, PLAN_TYPE
, PROJ_DURATION
, PROJ_START_YEAR
, PROJ_END_YEAR
, PROJ_FOR_STAFF
, PROJ_ALL_STAFF
, PROJ_TYPE
, PROJ_FROM_YEAR
, PROJ_PRINCIPLES
, PROJ_OBJECTIVE
, PROJ_BENEFIT
, PROJ_GOLD
, PROJ_TAGET_GROUP
, PROJ_LOCATION
, PROJ_ACTIVITY
, PROJ_PHASE
, PROJ_MONITORING
</SELECT>
<FROM>FROM PROJECTS</FROM>
<ORDER>ORDER BY PROJ_YEAR DESC, PROJ_ID</ORDER>
</SQL>
<FIELDS>
<FIELD NAME="PROJ_ID" TYPE="TEXT" LABEL="project.id" WIDTH="32"/>
<FIELD NAME="PROJ_YEAR" TYPE="NUMBER" LABEL="project.year" WIDTH="4"/>
<FIELD NAME="PJM_CODE" TYPE="TEXT" LABEL="project.pjm_code" WIDTH="20"/>
<FIELD NAME="STM_CODE" TYPE="TEXT" LABEL="project.stm_code" WIDTH="10" DEFAULT="${DEPT_CODE}"/>
<FIELD NAME="BTM_CODE" TYPE="TEXT" LABEL="project.btm_code" WIDTH="10" DEFAULT="01"/>
<FIELD NAME="ACM_CODE" TYPE="TEXT" LABEL="project.acm_code" WIDTH="20"/>
<FIELD NAME="PLAN_TYPE" TYPE="TEXT" LABEL="project.plan_type" WIDTH="15"/>
<FIELD NAME="PROJ_DURATION" TYPE="NUMBER" LABEL="project.duration" WIDTH="0"/>
<FIELD NAME="PROJ_START_YEAR" TYPE="NUMBER" LABEL="project.start_year" WIDTH="0"/>
<FIELD NAME="PROJ_END_YEAR" TYPE="NUMBER" LABEL="project.end_year" WIDTH="0"/>
<FIELD NAME="PROJ_FOR_STAFF" TYPE="NUMBER" LABEL="project.for_staff" WIDTH="0"/>
<FIELD NAME="PROJ_ALL_STAFF" TYPE="NUMBER" LABEL="project.all_staff" WIDTH="0"/>
<FIELD NAME="PROJ_TYPE" TYPE="TEXT" LABEL="project.type" WIDTH="15"/>
<FIELD NAME="PROJ_FROM_YEAR" TYPE="NUMBER" LABEL="project.from_year" WIDTH="0"/>
<FIELD NAME="PROJ_PRINCIPLES" TYPE="TEXT" LABEL="project.principles" WIDTH="2000"/>
<FIELD NAME="PROJ_OBJECTIVE" TYPE="TEXT" LABEL="project.objective" WIDTH="2000"/>
<FIELD NAME="PROJ_BENEFIT" TYPE="TEXT" LABEL="project.benefit" WIDTH="2000"/>
<FIELD NAME="PROJ_GOLD" TYPE="TEXT" LABEL="project.gold" WIDTH="2000"/>
<FIELD NAME="PROJ_TAGET_GROUP" TYPE="TEXT" LABEL="project.taget_group" WIDTH="2000"/>
<FIELD NAME="PROJ_LOCATION" TYPE="TEXT" LABEL="project.location" WIDTH="350"/>
<FIELD NAME="PROJ_ACTIVITY" TYPE="TEXT" LABEL="project.activity" WIDTH="2000"/>
<FIELD NAME="PROJ_PHASE" TYPE="TEXT" LABEL="project.phase" WIDTH="50"/>
<FIELD NAME="PROJ_MONITORING" TYPE="TEXT" LABEL="project.monitoring" WIDTH="2000"/>
</FIELDS>
</DATASET>

View File

@@ -34,6 +34,7 @@ public class GUtils {
TYPE_MAPPING.put("float", "NUMBER");
TYPE_MAPPING.put("integer", "NUMBER");
TYPE_MAPPING.put("numeric", "NUMBER");
TYPE_MAPPING.put("number", "NUMBER");
TYPE_MAPPING.put("smallint", "NUMBER");
TYPE_MAPPING.put("timestamp", "DATE");
TYPE_MAPPING.put("text", "STRING");
@@ -80,7 +81,7 @@ public class GUtils {
public static String getFieldType(DasColumn column) {
String columnType = column.getDasType().toDataType().typeName;
String fieldType = TYPE_MAPPING.get(columnType);
String fieldType = TYPE_MAPPING.get(columnType.toLowerCase());
if (fieldType == null) {
fieldType = TYPE_MAPPING.getOrDefault(userDefType.getOrDefault(columnType, "varchar"), "Object");
}