{"record":{"id":"aac08b73d8d12a87","repo":"OtterMind/Chat2DB","slug":"exporttype","errorCode":"exportType","errorMessage":"exportType","messagePattern":"exportType","errorType":"validation","errorClass":"ParamBusinessException","httpStatus":null,"severity":"error","filePath":"chat2db-community-server/chat2db-community-domain/chat2db-community-domain-core/src/main/java/ai/chat2db/community/domain/core/impl/db/DbDmlExportServiceImpl.java","lineNumber":64,"sourceCode":"    @Override\n    public String resolveTableName(String sql, String databaseName, String schemaName) {\n        DbType dbType = currentDruidDbType();\n        if (dbType == null) {\n            return StringUtils.join(Lists.newArrayList(databaseName, schemaName), \"_\");\n        }\n        try {\n            return SqlUtils.getTableName(sql, dbType);\n        } catch (Exception ignored) { // impl-contract: fallback - export file naming falls back to database/schema when SQL parsing fails.\n            return StringUtils.join(Lists.newArrayList(databaseName, schemaName), \"_\");\n        }\n    }\n\n    @Override\n    public DbDmlExportPlan prepareExport(DbDmlExportRequest param) {\n        String sql = resolveSql(param);\n        ExportTypeEnum exportType = EasyEnumUtils.getEnum(ExportTypeEnum.class, param.getExportType());\n        if (exportType == null) {\n            throw new ParamBusinessException(\"exportType\");\n        }\n        String tableName = resolveTableName(sql, param.getDatabaseName(), param.getSchemaName());\n        param.setSql(sql);\n        return DbDmlExportPlan.builder()\n                .fileName(buildFileName(tableName))\n                .exportType(exportType)\n                .exportRequest(param)\n                .build();\n    }\n\n    @Override\n    public void export(DbDmlExportRequest param, OutputStream outputStream) throws IOException {\n        ExportTypeEnum exportType = ExportTypeEnum.from(param.getExportType());\n        if (ExportTypeEnum.CSV == exportType) {\n            exportCsv(param.getSql(), outputStream, param.getResultSetId());\n            return;\n        }\n        if (ExportTypeEnum.EXCEL == exportType) {","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/OtterMind/Chat2DB/blob/5ee1e990e73fbcae1969dc554be254fedb3ab888/chat2db-community-server/chat2db-community-domain/chat2db-community-domain-core/src/main/java/ai/chat2db/community/domain/core/impl/db/DbDmlExportServiceImpl.java#L46-L82","documentation":"Thrown by DbDmlExportServiceImpl.prepareExport after EasyEnumUtils.getEnum(ExportTypeEnum.class, param.getExportType()) returns null, meaning the supplied export type does not match any ExportTypeEnum (CSV/EXCEL/INSERT/SQL). It is a ParamBusinessException, so the resolved code is 'common.paramDetailError' with arg 'exportType', producing 'The parameter: exportType is incorrect'. This is an input-contract failure, not a runtime fault.","triggerScenarios":"Export endpoint invoked with exportType null, blank, or a value not present in ExportTypeEnum (typo, legacy code, out-of-range ordinal). prepareExport is the entry point that builds DbDmlExportPlan, so an invalid type aborts planning before any SQL is resolved.","commonSituations":"Frontend dropdown defaulting to '' and sent through; a newer client sending a format the server build does not recognize; test fixtures using a numeric/string value that does not round-trip through the enum.","solutions":["Send one of the valid ExportTypeEnum values (verify the enum constants in the current build) for exportType.","Validate exportType on the client/adapter before calling prepareExport and surface a clear message.","If a new export format is intended, extend ExportTypeEnum and the matching export branch rather than passing an unknown string."],"exampleFix":"// before\nparam.setExportType(\"PDF\"); // not an ExportTypeEnum\nservice.prepareExport(param); // -> ParamBusinessException\n\n// after\nparam.setExportType(ExportTypeEnum.EXCEL.name());\nservice.prepareExport(param);","handlingStrategy":"validation","validationCode":"ExportTypeEnum t = EasyEnumUtils.getEnum(ExportTypeEnum.class, param.getExportType());\nif (t == null) {\n    throw new ParamBusinessException(\"exportType\");\n}\nservice.prepareExport(param);","typeGuard":"// Narrow the export type before export\nboolean isKnownExportType(String v) {\n    if (v == null) return false;\n    for (ExportTypeEnum e : ExportTypeEnum.values()) {\n        if (e.name().equals(v)) return true;\n    }\n    return false;\n}","tryCatchPattern":null,"preventionTips":["Send exportType as ExportTypeEnum.name() from the client.","Populate dropdowns from ExportTypeEnum.values() so only valid options are offered."],"tags":["validation","request-validation","export","enum"],"backgroundTag":null,"analyzedSha":"5ee1e990e73fbcae1969dc554be254fedb3ab888","analyzedAt":"2026-08-14T07:05:03.077Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}