diff --git a/CHANGELOG.md b/CHANGELOG.md index b0aa9aa..c7d4ec9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ - Fixed supression summary info when running in "count entities" mode. - Fixed a crash happening when encountering invalid values in a `boolean` column. - Upgraded to using .NET 6.0 for the anonymizer service. +- Fixed type casting of generalized `integer` columns, which prevented expression normalization. ### Version 1.0.1 diff --git a/anonymizer/reference b/anonymizer/reference index dd464dc..4a80e4b 160000 --- a/anonymizer/reference +++ b/anonymizer/reference @@ -1 +1 @@ -Subproject commit dd464dc4bfe00ad75e3e8b3890bbc730f25ad291 +Subproject commit 4a80e4bfad0486136a6697d7e2f2b6291c701f07 diff --git a/src/shared/anonymizer.ts b/src/shared/anonymizer.ts index 55e68fc..7828116 100644 --- a/src/shared/anonymizer.ts +++ b/src/shared/anonymizer.ts @@ -52,12 +52,12 @@ class DiffixAnonymizer implements Anonymizer { }); } - private makeBinSQL = (columnName: string, { binSize }: NumericGeneralization) => { - return `floor_by(cast(${columnName} AS real), ${binSize})`; + private makeBinSQL = (columnName: string, columnType: string, { binSize }: NumericGeneralization) => { + return `floor_by(cast(${columnName} AS ${columnType}), ${binSize}) AS ${columnName}`; }; private makeSubstringSQL = (columnName: string, { substringStart, substringLength }: StringGeneralization) => { - return `substring(${columnName}, ${substringStart}, ${substringLength})`; + return `substring(${columnName}, ${substringStart}, ${substringLength}) AS ${columnName}`; }; private mapBucketToSQL = (column: BucketColumn) => { @@ -66,16 +66,14 @@ class DiffixAnonymizer implements Anonymizer { switch (column.type) { case 'integer': return column.generalization - ? this.makeBinSQL(columnName, column.generalization) + ` AS ${columnName}` + ? this.makeBinSQL(columnName, 'integer', column.generalization) : `cast(${columnName} AS integer) AS ${columnName}`; case 'real': return column.generalization - ? this.makeBinSQL(columnName, column.generalization) + ` AS ${columnName}` + ? this.makeBinSQL(columnName, 'real', column.generalization) : `cast(${columnName} AS real) AS ${columnName}`; case 'text': - return column.generalization - ? this.makeSubstringSQL(columnName, column.generalization) + ` AS ${columnName}` - : columnName; + return column.generalization ? this.makeSubstringSQL(columnName, column.generalization) : columnName; case 'boolean': return `cast(${columnName} AS boolean) AS ${columnName}`; }