init
This commit is contained in:
59
docs/ai/DataPRO/UnitTest/DatabaseUnitTesting/Properties.md
Normal file
59
docs/ai/DataPRO/UnitTest/DatabaseUnitTesting/Properties.md
Normal 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
|
||||
86
docs/ai/DataPRO/UnitTest/DatabaseUnitTesting/Utilities.md
Normal file
86
docs/ai/DataPRO/UnitTest/DatabaseUnitTesting/Utilities.md
Normal 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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user