This commit is contained in:
2026-04-17 14:55:32 -04:00
commit bc3ac1d4c9
18017 changed files with 4371742 additions and 0 deletions

View File

@@ -0,0 +1,59 @@
---
source_files:
- DataPRO/UnitTest/DatabaseUnitTesting/Properties/Settings.Designer.cs
generated_at: "2026-04-17T16:45:48.166150+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "414dafff4d3f4086"
---
# Documentation: DatabaseUnitTesting.Properties.Settings
## 1. Purpose
This module is an auto-generated settings class that provides strongly-typed access to application configuration values for the `DatabaseUnitTesting` project. It exists to centralize configuration management for database unit testing, specifically storing connection parameters, database names, and snapshot identifiers. The class is generated by Visual Studio's `SettingsSingleFileGenerator` tool and serves as the configuration layer between the unit test code and the underlying `.settings` file.
---
## 2. Public Interface
### `Settings` (sealed partial class)
**Inherits from:** `global::System.Configuration.ApplicationSettingsBase`
| Member | Signature | Scope | Description |
|--------|-----------|-------|-------------|
| `Default` | `public static Settings Default { get; }` | Static | Returns the singleton default instance of the `Settings` class, synchronized for thread-safe access. |
| `ConnectionString` | `public string ConnectionString { get; }` | Application-scoped | Returns the database connection string for the unit test database. Read-only. Default value points to `FAJITA\DEV_SQL` server with `DataPRO_UnitTest` catalog. |
| `DBName` | `public string DBName { get; set; }` | User-scoped | Gets or sets the database name. Default value is `"DataPRO_UnitTest"`. |
| `DBSnapshot` | `public string DBSnapshot { get; set; }` | User-scoped | Gets or sets the database snapshot name. Default value is `"DataPRO_UnitTestSnapshot"`. |
---
## 3. Invariants
- **Auto-generated constraint**: This file is machine-generated by `Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator` version `17.10.0.0`. Manual modifications will be lost upon regeneration.
- **Singleton pattern**: The `defaultInstance` field is created once via `Synchronized()` and returned through the `Default` property.
- **Scope immutability**: `ConnectionString` is application-scoped (read-only at runtime); `DBName` and `DBSnapshot` are user-scoped (read/write).
- **Type safety**: All settings are typed as `string`; accessors perform explicit casts from the underlying settings dictionary.
---
## 4. Dependencies
### This module depends on:
- `System.Configuration.ApplicationSettingsBase` - Base class providing settings management infrastructure
- `System.Configuration.ApplicationScopedSettingAttribute` - Attribute for application-level settings
- `System.Configuration.UserScopedSettingAttribute` - Attribute for user-level settings
- `System.Configuration.SpecialSettingAttribute` - Marks `ConnectionString` as a special connection string type
- `System.Configuration.DefaultSettingValueAttribute` - Provides default values for each setting
- `System.Runtime.CompilerServices.CompilerGeneratedAttribute` - Indicates tool-generated code
- `System.CodeDom.Compiler.GeneratedCodeAttribute` - Metadata about the code generator
### What depends on this module:
- **Inferred**: Any code within the `DatabaseUnitTesting` project that accesses configuration values via `Settings.Default`.
---
## 5. Gotchas
1. **Hardcoded credentials in source control**: The `ConnectionString` default value contains a plaintext SQL Server `sa` password (`!!QQAAZZxxssww22`). This is a significant security risk and should be moved to a secure configuration mechanism (e.g

View File

@@ -0,0 +1,86 @@
---
source_files:
- DataPRO/UnitTest/DatabaseUnitTesting/Utilities/ObjectsToCompare.cs
- DataPRO/UnitTest/DatabaseUnitTesting/Utilities/DatabaseAdapter.cs
- DataPRO/UnitTest/DatabaseUnitTesting/Utilities/DatabaseComparer.cs
generated_at: "2026-04-17T15:54:33.868933+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "f31068a46fa2e835"
---
# Database Unit Testing Utilities Documentation
## 1. Purpose
This module provides internal utilities for comparing database objects between two databases, primarily designed to support database unit testing scenarios. It enables snapshot creation/management, object-level data comparison, and difference reporting. The three classes work together: `ObjectsToCompare` serves as a configuration container for comparison pairs, `DatabaseAdapter` provides low-level database operations (including snapshot management), and `DatabaseComparer` orchestrates the actual data comparison logic using set-based SQL operations.
---
## 2. Public Interface
### ObjectsToCompare (internal class)
A configuration container that holds metadata about two database objects to be compared.
**Constructor:**
```csharp
public ObjectsToCompare(string schema1Name, string object1Name, string schema2Name, string object2Name)
```
Initializes a new comparison pair with schema and object names for both sides.
**Properties:**
| Property | Type | Description |
|----------|------|-------------|
| `Schema1Name` | `string` | Schema name of the first object |
| `Object1Name` | `string` | Name of the first object |
| `Schema2Name` | `string` | Schema name of the second object |
| `Object2Name` | `string` | Name of the second object |
| `Qualified1` | `string` | Returns `_schema1Name + "." + _object1Name` |
| `Qualified2` | `string` | Returns `_schema2Name + "." + _object2Name` |
| `ColumnsToIgnore` | `IEnumerable<string>` | Returns the list of columns to exclude from comparison |
**Methods:**
```csharp
public void AddColumnToIgnore(string columnName)
```
Adds a column name to the internal `_columnsToIgnore` list.
---
### DatabaseAdapter (internal class)
Provides low-level database operations including snapshot management.
**Constructor:**
```csharp
internal DatabaseAdapter(SqlConnection connection)
```
Stores the connection and opens it if currently closed.
**Methods:**
```csharp
internal bool IsSnapshot(string name)
```
Queries `sys.databases` to check if the named database is a snapshot (checks if `source_database_id` is not null/DBNull).
```csharp
internal void UseDatabase(string databaseName)
```
Executes `USE [databaseName]` to switch the connection context.
```csharp
internal void CreateSnapshot(string databaseName, string snapshotName)
```
Creates a database snapshot with the file stored at `C:\Temp\[snapshotName]`.
```csharp
internal void DropSnapshot(string snapshotName)
```
Drops the specified snapshot. Throws `ArgumentException` if the named database is not a snapshot.
---
### DatabaseComparer (internal class)
Orchestrates comparison

View File

@@ -0,0 +1,71 @@
---
source_files:
- DataPRO/UnitTest/DatabaseUnitTesting/Utilities/Results/Row.cs
- DataPRO/UnitTest/DatabaseUnitTesting/Utilities/Results/Column.cs
- DataPRO/UnitTest/DatabaseUnitTesting/Utilities/Results/Database.cs
- DataPRO/UnitTest/DatabaseUnitTesting/Utilities/Results/Table.cs
- DataPRO/UnitTest/DatabaseUnitTesting/Utilities/Results/ResultSetParser.cs
- DataPRO/UnitTest/DatabaseUnitTesting/Utilities/Results/XmlFileAdapter.cs
generated_at: "2026-04-17T15:50:55.325776+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "f6d60a0ae7a270c5"
---
# Database Unit Testing Results Module Documentation
## 1. Purpose
This module provides an in-memory representation of database result sets for unit testing purposes. It enables parsing SQL query results into a structured object model (`Database`, `Table`, `Row`, `Column`), serializing and deserializing this model to/from XML files, and comparing database states for equality. The module serves as the core data model and I/O layer for database unit testing comparisons, allowing test results to be persisted and compared against expected outcomes.
---
## 2. Public Interface
All types in this module are `internal` to the `DatabaseUnitTesting.Utilities.Results` namespace.
### `Row` (class)
| Member | Signature | Description |
|--------|-----------|-------------|
| Constructor | `Row(string type)` | Creates a new row with the specified type (converted to lowercase). |
| `AddColumn` | `void AddColumn(Column column)` | Adds a column to the row. Invalidates the cached `KeyString`. |
| `KeyString` | `string KeyString { get; }` | Lazily computed and cached string key for comparison. Format: `_type` + `DELIMITER` + each column's `SortString`. |
| `ColumnCount` | `int ColumnCount { get; }` | Returns the number of columns in the row. |
| `DELIMITER` | `const string DELIMITER = "\x1e;;"` | Delimiter used when constructing `KeyString`. |
### `Column` (class)
| Member | Signature | Description |
|--------|-----------|-------------|
| Constructor | `Column(string name, object value)` | Creates a column with the given name and value. Value is converted via `Convert()`. `SortString` is constructed as `name.ToLower()` + `DELIMITER` + `_value`. |
| `Convert` | `static string Convert(object value)` | Converts `object` to string. Special handling for `byte[]` (hex format "0x...") and `DateTime` (custom format with trimmed trailing zeros/colons). Other types use `ToString()`. |
| `Name` | `string Name { get; }` | Returns the column name. |
| `Value` | `string Value { get; }` | Returns the converted string value. |
| `SortString` | `string SortString { get; }` | Returns the pre-computed sort/comparison string. |
| `DELIMITER` | `const string DELIMITER = "\x1f;;"` | Delimiter used in `SortString`. |
### `Database` (class)
| Member | Signature | Description |
|--------|-----------|-------------|
| `AddTable` | `void AddTable(Table table)` | Adds a table to the database. If the table already exists (by equality), increments its count. Updates `_tableCount` and `_hashCode`. |
| `ContainsTable` | `bool ContainsTable(Table table)` | Returns `true` if the database contains a table equal to the given one. |
| `GetCount` | `int GetCount(Table table)` | Returns the count of how many times the given table was added. |
| `TableCount` | `int TableCount { get; }` | Total number of tables added (including duplicates). |
| `Tables` | `IEnumerable<KeyValuePair<Table, int>> Tables { get; }` | Returns the internal dictionary of unique tables with their counts. |
| `GetHashCode` | `override int GetHashCode()` | Returns the cumulative hash code of all added tables. |
| `Equals` | `override bool Equals(object otherObject)` | Compares databases by `TableCount`, `GetHashCode()`, and verifies each table exists with the same count in the other database. |
### `Table` (class)
| Member | Signature | Description |
|--------|-----------|-------------|
| Constructor | `Table(string name1)` | Creates a table with `name1` and empty `name2`. |
| Constructor | `Table(string name1, string name2)` | Creates a table with both names (converted to lowercase). |
| `AddRow` | `void AddRow(Row row)` | Adds a row to the table. If a row with the same `KeyString` exists, increments its count. Updates `_rowCount` and `_hashCode`. |
| `AddField` | `void AddField(string name, string type)` | Adds a column to the schema row. Increments `_fieldCount`. Note: hash code update is commented out. |
| `LookupRow` | `bool LookupRow(string key, out int other)` | Looks up a row by its key string, returning the count via `out` parameter. |
| `Schema` | `Row Schema { get; set; }` | Gets or sets the schema row. Setting updates `_fieldCount`. |
| `Name1` | `string Name1 { get; }` | Returns the first name. |
| `Name2` | `string