Skip to content

Commit c278f2b

Browse files
authored
Merge pull request #257 from diffix/edon/refactor
Refactor context members and names
2 parents c5b5ad4 + 14b662f commit c278f2b

File tree

13 files changed

+95
-75
lines changed

13 files changed

+95
-75
lines changed

src/OpenDiffix.CLI/Program.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -129,8 +129,8 @@ let dryRun query filePath anonParams =
129129

130130
let runQuery query filePath anonParams =
131131
use dataProvider = new SQLite.DataProvider(filePath) :> IDataProvider
132-
let context = EvaluationContext.make anonParams dataProvider
133-
QueryEngine.run context query
132+
let queryContext = QueryContext.make anonParams dataProvider
133+
QueryEngine.run queryContext query
134134

135135
let quoteString (string: string) =
136136
"\"" + string.Replace("\"", "\"\"") + "\""

src/OpenDiffix.Core.Tests/Analyzer.Tests.fs

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ let testTable: Table =
1818
}
1919

2020
let dataProvider = dummyDataProvider [ testTable ]
21-
let context = EvaluationContext.make AnonymizationParams.Default dataProvider
21+
let queryContext = QueryContext.make AnonymizationParams.Default dataProvider
2222

2323
let defaultQuery =
2424
{
@@ -32,10 +32,13 @@ let defaultQuery =
3232
}
3333

3434
let testParsedQuery queryString expected =
35-
queryString |> Parser.parse |> Analyzer.analyze context |> should equal expected
35+
queryString
36+
|> Parser.parse
37+
|> Analyzer.analyze queryContext
38+
|> should equal expected
3639

3740
let testQueryError queryString =
38-
(fun () -> queryString |> Parser.parse |> Analyzer.analyze context |> ignore)
41+
(fun () -> queryString |> Parser.parse |> Analyzer.analyze queryContext |> ignore)
3942
|> shouldFail
4043

4144
[<Fact>]
@@ -277,14 +280,19 @@ type Tests(db: DBFixture) =
277280
NoiseSD = 0.
278281
}
279282

280-
let context = EvaluationContext.make anonParams db.DataProvider
283+
let queryContext = QueryContext.make anonParams db.DataProvider
281284

282285
let idColumn = ColumnReference(4, IntegerType)
283286
let companyColumn = ColumnReference(2, StringType)
284287
let aidColumns = [ companyColumn; idColumn ] |> ListExpr
285288

286289
let analyzeQuery query =
287-
let query, _ = query |> Parser.parse |> Analyzer.analyze context |> Analyzer.anonymize context
290+
let query, _ =
291+
query
292+
|> Parser.parse
293+
|> Analyzer.analyze queryContext
294+
|> Analyzer.anonymize queryContext
295+
288296
query
289297

290298
let ensureQueryFails query error =
@@ -296,7 +304,13 @@ type Tests(db: DBFixture) =
296304

297305
let assertSqlSeed query (seedMaterial: string) =
298306
let expectedSeed = seedMaterial |> System.Text.Encoding.UTF8.GetBytes |> Hash.bytes
299-
let _query, executionContext = query |> Parser.parse |> Analyzer.analyze context |> Analyzer.anonymize context
307+
308+
let _query, executionContext =
309+
query
310+
|> Parser.parse
311+
|> Analyzer.analyze queryContext
312+
|> Analyzer.anonymize queryContext
313+
300314
executionContext.NoiseLayers.BucketSeed |> should equal expectedSeed
301315

302316
[<Fact>]

src/OpenDiffix.Core.Tests/Anonymizer.Tests.fs

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ let strColumn = ColumnReference(1, StringType)
2525
let companyColumn = ColumnReference(2, StringType)
2626
let allAidColumns = ListExpr [ aidColumn; companyColumn ]
2727

28-
let context =
28+
let executionContext =
2929
{ ExecutionContext.Default with
3030
QueryContext =
3131
{ QueryContext.Default with
@@ -45,7 +45,7 @@ let anonymizedAggregationContext =
4545
let threshold = { Lower = 2; Upper = 2 }
4646

4747
let anonParams =
48-
{ context.QueryContext.AnonymizationParams with
48+
{ executionContext.AnonymizationParams with
4949
OutlierCount = threshold
5050
TopCount = threshold
5151
}
@@ -54,7 +54,8 @@ let anonymizedAggregationContext =
5454
QueryContext = { QueryContext.Default with AnonymizationParams = anonParams }
5555
}
5656

57-
let evaluateAggregator fn args = evaluateAggregator context fn args
57+
let evaluateAggregator fn args =
58+
evaluateAggregator executionContext fn args
5859

5960
let mergeAids = AggregateFunction(MergeAids, AggregateOptions.Default)
6061
let distinctDiffixCount = AggregateFunction(DiffixCount, { AggregateOptions.Default with Distinct = true })
@@ -273,22 +274,22 @@ let ``allows null-values for some of the AID rows`` () =
273274
let allAidColumns = ListExpr [ aid1; aid2 ]
274275

275276
rows
276-
|> TestHelpers.evaluateAggregator context diffixCount [ allAidColumns; value ]
277+
|> TestHelpers.evaluateAggregator executionContext diffixCount [ allAidColumns; value ]
277278
|> should equal (Integer 5L)
278279

279280
rows
280-
|> TestHelpers.evaluateAggregator context distinctDiffixCount [ allAidColumns; value ]
281+
|> TestHelpers.evaluateAggregator executionContext distinctDiffixCount [ allAidColumns; value ]
281282
|> should equal (Integer 5L)
282283

283284
// The aggregate result should not be affected by the order of the AIDs
284285
let allAidsFlipped = ListExpr [ aid2; aid1 ]
285286

286287
rows
287-
|> TestHelpers.evaluateAggregator context diffixCount [ allAidsFlipped; value ]
288+
|> TestHelpers.evaluateAggregator executionContext diffixCount [ allAidsFlipped; value ]
288289
|> should equal (Integer 5L)
289290

290291
rows
291-
|> TestHelpers.evaluateAggregator context distinctDiffixCount [ allAidsFlipped; value ]
292+
|> TestHelpers.evaluateAggregator executionContext distinctDiffixCount [ allAidsFlipped; value ]
292293
|> should equal (Integer 5L)
293294

294295
[<Fact>]
@@ -313,7 +314,7 @@ let ``account for values where AID-value is null`` () =
313314
let allAidColumns = ListExpr [ aid1; aid2 ]
314315

315316
rows
316-
|> TestHelpers.evaluateAggregator context diffixCount [ allAidColumns; value ]
317+
|> TestHelpers.evaluateAggregator executionContext diffixCount [ allAidColumns; value ]
317318
|> should equal (Integer 8L)
318319

319320
[<Fact>]
@@ -325,11 +326,11 @@ let ``low count accepts rows with shared contribution`` () =
325326
let highUserRows = [ [| aidList [ "Paul"; "Cristian"; "Felix"; "Edon" ] |] ]
326327

327328
lowUserRows
328-
|> TestHelpers.evaluateAggregator context diffixLowCount [ aidsExpression ]
329+
|> TestHelpers.evaluateAggregator executionContext diffixLowCount [ aidsExpression ]
329330
|> should equal (Boolean true)
330331

331332
highUserRows
332-
|> TestHelpers.evaluateAggregator context diffixLowCount [ aidsExpression ]
333+
|> TestHelpers.evaluateAggregator executionContext diffixLowCount [ aidsExpression ]
333334
|> should equal (Boolean false)
334335

335336
[<Fact>]
@@ -357,7 +358,7 @@ let ``count accepts rows with shared contribution`` () =
357358
// Total: = 7.0
358359

359360
rows
360-
|> TestHelpers.evaluateAggregator context diffixCount [ aidsExpression ]
361+
|> TestHelpers.evaluateAggregator executionContext diffixCount [ aidsExpression ]
361362
|> should equal (Integer 5L)
362363

363364
[<Fact>]
@@ -385,5 +386,5 @@ let ``count distinct accepts rows with shared contribution`` () =
385386
]
386387

387388
rows
388-
|> TestHelpers.evaluateAggregator context distinctDiffixCount [ aidsExpression; dataColumn ]
389+
|> TestHelpers.evaluateAggregator executionContext distinctDiffixCount [ aidsExpression; dataColumn ]
389390
|> should equal (Integer 5L)

src/OpenDiffix.Core.Tests/Executor.Tests.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,13 @@ type Tests(db: DBFixture) =
2626
let countDistinct expression =
2727
FunctionExpr(AggregateFunction(Count, { Distinct = true; OrderBy = [] }), [ expression ])
2828

29-
let context =
29+
let executionContext =
3030
{ ExecutionContext.Default with
3131
QueryContext = { QueryContext.Default with DataProvider = db.DataProvider }
3232
}
3333

3434
let execute plan =
35-
plan |> Executor.execute context |> Seq.toList
35+
plan |> Executor.execute executionContext |> Seq.toList
3636

3737
[<Fact>]
3838
let ``execute scan`` () =

src/OpenDiffix.Core.Tests/Normalizer.Tests.fs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,13 @@ let testTable =
1616
}
1717

1818
let dataProvider = dummyDataProvider [ testTable ]
19-
let context = EvaluationContext.make AnonymizationParams.Default dataProvider
19+
let queryContext = QueryContext.make AnonymizationParams.Default dataProvider
2020

2121
let queryPlan statement =
22-
statement |> Parser.parse |> Analyzer.analyze context |> Normalizer.normalize
22+
statement
23+
|> Parser.parse
24+
|> Analyzer.analyze queryContext
25+
|> Normalizer.normalize
2326

2427
let equivalentQueries expectedQuery testQuery =
2528
let testPlan = queryPlan testQuery

src/OpenDiffix.Core.Tests/QueryEngine.Tests.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ type Tests(db: DBFixture) =
2222
}
2323

2424
let runQueryWithCustomAnonParams anonymizationParams query =
25-
let context = EvaluationContext.make anonymizationParams db.DataProvider
26-
run context query
25+
let queryContext = QueryContext.make anonymizationParams db.DataProvider
26+
run queryContext query
2727

2828
let runQuery = runQueryWithCustomAnonParams anonParams
2929

src/OpenDiffix.Core.Tests/QueryValidator.Tests.fs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ let testTable: Table =
1616

1717

1818
let dataProvider = dummyDataProvider [ testTable ]
19-
let context = EvaluationContext.make AnonymizationParams.Default dataProvider
19+
let queryContext = QueryContext.make AnonymizationParams.Default dataProvider
2020

2121
let aidColIndex = Table.findColumn testTable "int_col" |> fst
2222

2323
let analyzeQuery queryString =
2424
queryString
2525
|> Parser.parse
26-
|> Analyzer.analyze context
26+
|> Analyzer.analyze queryContext
2727
|> QueryValidator.validateQuery
2828

2929
let ensureFailParsedQuery queryString (errorFragment: string) =

src/OpenDiffix.Core/Aggregator.fs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,11 @@ type private DiffixCount(minCount) =
124124
| [ aidInstances; _ ] -> updateAidMaps aidInstances 1L
125125
| _ -> invalidArgs args
126126

127-
member this.Final context =
127+
member this.Final executionContext =
128128
if isNull state then
129129
Integer minCount
130130
else
131-
match Anonymizer.count context state with
131+
match Anonymizer.count executionContext state with
132132
| Null -> Integer minCount
133133
| Integer value -> Integer(max value minCount)
134134
| value -> value
@@ -161,8 +161,8 @@ type private DiffixCountDistinct(minCount) =
161161
)
162162
| _ -> invalidArgs args
163163

164-
member this.Final context =
165-
match Anonymizer.countDistinct context aidsCount aidsPerValue with
164+
member this.Final executionContext =
165+
match Anonymizer.countDistinct executionContext aidsCount aidsPerValue with
166166
| Null -> Integer minCount
167167
| Integer value -> Integer(max value minCount)
168168
| value -> value
@@ -188,11 +188,11 @@ type private DiffixLowCount() =
188188

189189
| _ -> invalidArgs args
190190

191-
member this.Final context =
191+
member this.Final executionContext =
192192
if isNull state then
193193
Boolean true
194194
else
195-
Anonymizer.isLowCount context state |> Boolean
195+
Anonymizer.isLowCount executionContext state |> Boolean
196196

197197
type private MergeAids() =
198198
let state = HashSet<Value>()
@@ -213,12 +213,12 @@ type private MergeAids() =
213213

214214
type T = IAggregator
215215

216-
let create executionContext globalBucket fn : T =
216+
let create (executionContext: ExecutionContext) globalBucket fn : T =
217217
let minDiffixCount =
218218
if globalBucket then
219219
0L
220220
else
221-
int64 executionContext.QueryContext.AnonymizationParams.Suppression.LowThreshold
221+
int64 executionContext.AnonymizationParams.Suppression.LowThreshold
222222

223223
match fn with
224224
| AggregateFunction (Count, { Distinct = false }) -> Count() :> T

src/OpenDiffix.Core/Analyzer.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,9 +369,9 @@ let private computeNoiseLayers anonParams query =
369369
// Public API
370370
// ----------------------------------------------------------------
371371

372-
let analyze context (parseTree: ParserTypes.SelectQuery) : Query =
373-
let schema = context.DataProvider.GetSchema()
374-
let anonParams = context.AnonymizationParams
372+
let analyze queryContext (parseTree: ParserTypes.SelectQuery) : Query =
373+
let schema = queryContext.DataProvider.GetSchema()
374+
let anonParams = queryContext.AnonymizationParams
375375
let query = mapQuery schema anonParams false parseTree
376376
query
377377

src/OpenDiffix.Core/Anonymizer.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ let private generateNoise salt stepName stdDev noiseLayers =
5656
let isLowCount (executionContext: ExecutionContext) (aidSets: HashSet<AidHash> seq) =
5757
aidSets
5858
|> Seq.map (fun aidSet ->
59-
let anonParams = executionContext.QueryContext.AnonymizationParams
59+
let anonParams = executionContext.AnonymizationParams
6060

6161
if aidSet.Count < anonParams.Suppression.LowThreshold then
6262
true
@@ -101,7 +101,7 @@ let inline private aidFlattening
101101
(unaccountedFor: int64)
102102
(aidContributions: (AidHash * ^Contribution) list)
103103
: AidCount option =
104-
let anonParams = executionContext.QueryContext.AnonymizationParams
104+
let anonParams = executionContext.AnonymizationParams
105105

106106
if aidContributions.Length < anonParams.OutlierCount.Lower + anonParams.TopCount.Lower then
107107
None
@@ -139,7 +139,7 @@ let inline private aidFlattening
139139
let flattenedAvg = flattenedSum / float aidContributions.Length
140140

141141
let noiseScale = max flattenedAvg (0.5 * topGroupAverage)
142-
let noiseSD = executionContext.QueryContext.AnonymizationParams.NoiseSD * noiseScale
142+
let noiseSD = executionContext.AnonymizationParams.NoiseSD * noiseScale
143143

144144
let noise =
145145
[ executionContext.NoiseLayers.BucketSeed; aidContributions |> Seq.map fst |> seedFromAidSet ]

src/OpenDiffix.Core/CommonTypes.fs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,4 +184,6 @@ type ExecutionContext =
184184
QueryContext: QueryContext
185185
NoiseLayers: NoiseLayers
186186
}
187+
member this.AnonymizationParams = this.QueryContext.AnonymizationParams
188+
member this.DataProvider = this.QueryContext.DataProvider
187189
static member Default = { QueryContext = QueryContext.Default; NoiseLayers = { BucketSeed = 0UL } }

0 commit comments

Comments
 (0)