db-drift 1.0.0__tar.gz → 1.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {db_drift-1.0.0 → db_drift-1.1.0}/.github/SECURITY.md +4 -2
- {db_drift-1.0.0 → db_drift-1.1.0}/.github/workflows/ci.yml +2 -2
- {db_drift-1.0.0 → db_drift-1.1.0}/.github/workflows/release.yml +3 -3
- db_drift-1.1.0/CHANGELOG.md +11 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/PKG-INFO +4 -4
- db_drift-1.1.0/docs/error-handling.md +112 -0
- db_drift-1.1.0/docs/favicon.png +0 -0
- db_drift-1.1.0/examples/example_diff_report.html +414 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/pyproject.toml +7 -7
- db_drift-1.1.0/ruff.toml +101 -0
- db_drift-1.1.0/src/db_drift/__init__.py +1 -0
- db_drift-1.1.0/src/db_drift/__main__.py +103 -0
- db_drift-1.1.0/src/db_drift/cli/cli.py +35 -0
- db_drift-1.1.0/src/db_drift/cli/utils.py +9 -0
- db_drift-1.1.0/src/db_drift/utils/custom_logging.py +52 -0
- db_drift-1.1.0/src/db_drift/utils/exceptions/__init__.py +36 -0
- db_drift-1.1.0/src/db_drift/utils/exceptions/base.py +49 -0
- db_drift-1.1.0/src/db_drift/utils/exceptions/cli.py +68 -0
- db_drift-1.1.0/src/db_drift/utils/exceptions/config.py +117 -0
- db_drift-1.1.0/src/db_drift/utils/exceptions/database.py +153 -0
- db_drift-1.1.0/src/db_drift/utils/exceptions/formatting.py +175 -0
- db_drift-1.1.0/src/db_drift/utils/exceptions/status_codes.py +15 -0
- db_drift-1.1.0/tests/cli/__init__.py +1 -0
- db_drift-1.1.0/tests/cli/test_version.py +106 -0
- db_drift-1.1.0/tests/exceptions/__init__.py +1 -0
- db_drift-1.1.0/tests/exceptions/test_exceptions.py +198 -0
- {db_drift-1.0.0 → db_drift-1.1.0/tests}/ruff.toml +1 -0
- db_drift-1.1.0/uv.lock +1617 -0
- db_drift-1.0.0/CHANGELOG.md +0 -8
- db_drift-1.0.0/src/db_drift/__init__.py +0 -2
- db_drift-1.0.0/uv.lock +0 -1169
- {db_drift-1.0.0 → db_drift-1.1.0}/.github/FUNDING.yml +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/.github/ISSUE_TEMPLATE/question.md +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/.github/dependabot.yml +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/.gitignore +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/.python-version +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/CODE_OF_CONDUCT.md +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/CONTRIBUTING.md +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/LICENSE +0 -0
- {db_drift-1.0.0 → db_drift-1.1.0}/README.md +0 -0
- /db_drift-1.0.0/examples/.gitkeep → /db_drift-1.1.0/src/db_drift/cli/__init__.py +0 -0
- /db_drift-1.0.0/tests/.gitkeep → /db_drift-1.1.0/src/db_drift/utils/__init__.py +0 -0
@@ -1,12 +1,14 @@
|
|
1
1
|
# Security Policy
|
2
2
|
|
3
|
-
|
3
|
+
This project is still under active development, in a very early stage, the releases are not stable yet, and we are not ready to support security issues at this time. However, we take security seriously and will update this policy as the project matures.
|
4
|
+
|
5
|
+
<!-- ## Supported Versions
|
4
6
|
|
5
7
|
We actively support the following versions of db-drift:
|
6
8
|
|
7
9
|
| Version | Supported |
|
8
10
|
| ------- | ------------------ |
|
9
|
-
|
|
11
|
+
| 1.x.x | :white_check_mark: | -->
|
10
12
|
|
11
13
|
## Reporting a Vulnerability
|
12
14
|
|
@@ -12,10 +12,10 @@ jobs:
|
|
12
12
|
python-version: ["3.13"]
|
13
13
|
|
14
14
|
steps:
|
15
|
-
- uses: actions/checkout@
|
15
|
+
- uses: actions/checkout@v5
|
16
16
|
|
17
17
|
- name: Set up Python
|
18
|
-
uses: actions/setup-python@
|
18
|
+
uses: actions/setup-python@v6
|
19
19
|
|
20
20
|
- name: Install uv
|
21
21
|
uses: astral-sh/setup-uv@v6
|
@@ -18,13 +18,13 @@ jobs:
|
|
18
18
|
|
19
19
|
steps:
|
20
20
|
- name: Checkout
|
21
|
-
uses: actions/checkout@
|
21
|
+
uses: actions/checkout@v5
|
22
22
|
with:
|
23
23
|
fetch-depth: 0
|
24
24
|
token: ${{ secrets.GITHUB_TOKEN }}
|
25
25
|
|
26
26
|
- name: Set up Python
|
27
|
-
uses: actions/setup-python@
|
27
|
+
uses: actions/setup-python@v6
|
28
28
|
with:
|
29
29
|
python-version: '3.13'
|
30
30
|
|
@@ -37,7 +37,7 @@ jobs:
|
|
37
37
|
|
38
38
|
- name: Python Semantic Release
|
39
39
|
id: release
|
40
|
-
uses: python-semantic-release/python-semantic-release@v10.
|
40
|
+
uses: python-semantic-release/python-semantic-release@v10.4.1
|
41
41
|
with:
|
42
42
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
43
43
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
6
|
+
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
<!-- insertion marker -->
|
9
|
+
## [v1.0.0](https://github.com/dyka3773/db-drift/releases/tag/v1.0.0) - 2025-08-04
|
10
|
+
|
11
|
+
<small>[Compare with first commit](https://github.com/dyka3773/db-drift/compare/4741274c923649ec7b499260bc11141a04b5d000...v1.0.0)</small>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: db-drift
|
3
|
-
Version: 1.
|
3
|
+
Version: 1.1.0
|
4
4
|
Summary: A command line tool to visualize the differences between two DB states.
|
5
5
|
Project-URL: source, https://github.com/dyka3773/db-drift
|
6
6
|
Author-email: Hercules Konsoulas <dyka3773@gmail.com>
|
@@ -17,13 +17,13 @@ Classifier: Topic :: Software Development :: Build Tools
|
|
17
17
|
Classifier: Topic :: Software Development :: Version Control
|
18
18
|
Classifier: Topic :: Utilities
|
19
19
|
Classifier: Typing :: Typed
|
20
|
-
Requires-Python: >=3.
|
20
|
+
Requires-Python: >=3.10
|
21
21
|
Requires-Dist: oracledb>=3.3.0
|
22
22
|
Requires-Dist: psycopg[binary]>=3.2.9
|
23
23
|
Requires-Dist: pymysql>=1.1.1
|
24
24
|
Requires-Dist: python-dotenv>=1.1.1
|
25
|
-
Requires-Dist: pyyaml>=6.0.
|
26
|
-
Requires-Dist: sqlmodel>=0.0.
|
25
|
+
Requires-Dist: pyyaml>=6.0.3
|
26
|
+
Requires-Dist: sqlmodel>=0.0.25
|
27
27
|
Requires-Dist: sshtunnel>=0.4.0
|
28
28
|
Description-Content-Type: text/markdown
|
29
29
|
|
@@ -0,0 +1,112 @@
|
|
1
|
+
<!-- omit in toc -->
|
2
|
+
# Exception Handling and Error Codes
|
3
|
+
|
4
|
+
This document describes the exception handling system and error codes used in db-drift.
|
5
|
+
|
6
|
+
<!-- omit in toc -->
|
7
|
+
## Table of Contents
|
8
|
+
- [Error Code Standards](#error-code-standards)
|
9
|
+
- [Standard Exit Codes](#standard-exit-codes)
|
10
|
+
- [Exception Hierarchy](#exception-hierarchy)
|
11
|
+
- [Base Exceptions](#base-exceptions)
|
12
|
+
- [CLI Exceptions](#cli-exceptions)
|
13
|
+
- [Database Exceptions](#database-exceptions)
|
14
|
+
- [Configuration Exceptions](#configuration-exceptions)
|
15
|
+
- [Debug Mode](#debug-mode)
|
16
|
+
- [Error Handling Best Practices](#error-handling-best-practices)
|
17
|
+
- [For Developers](#for-developers)
|
18
|
+
- [For Users](#for-users)
|
19
|
+
|
20
|
+
|
21
|
+
## Error Code Standards
|
22
|
+
|
23
|
+
db-drift follows Unix-style exit codes and BSD sysexits.h standards for consistency. All exit codes are defined in the `ExitCode` enum located in `src/db_drift/utils/exceptions/status_codes.py`.
|
24
|
+
|
25
|
+
### Standard Exit Codes
|
26
|
+
|
27
|
+
| Exit Code | Constant | Description | Exception Type |
|
28
|
+
|-----------|----------|-------------|----------------|
|
29
|
+
| 0 | `ExitCode.SUCCESS` | Success | - |
|
30
|
+
| 1 | `ExitCode.GENERAL_ERROR` | General error | `DbDriftSystemError`, unexpected errors |
|
31
|
+
| 2 | `ExitCode.USAGE_ERROR` | CLI usage error | `CliError`, `CliArgumentError`, `CliUsageError` |
|
32
|
+
| 65 | `ExitCode.DATA_ERROR` | Data format error | `DatabaseSchemaError` |
|
33
|
+
| 66 | `ExitCode.NO_INPUT` | Cannot open input file | File not found errors |
|
34
|
+
| 69 | `ExitCode.UNAVAILABLE` | Service unavailable | Database connection failures |
|
35
|
+
| 70 | `ExitCode.SOFTWARE_ERROR` | Internal software error | `DatabaseQueryError` |
|
36
|
+
| 77 | `ExitCode.NO_PERMISSION` | Permission denied | File/directory permission errors |
|
37
|
+
| 78 | `ExitCode.CONFIG_ERROR` | Configuration error | `ConfigError`, `MissingConfigError` |
|
38
|
+
| 130 | `ExitCode.SIGINT` | User interruption | Ctrl+C (SIGINT) |
|
39
|
+
|
40
|
+
## Exception Hierarchy
|
41
|
+
|
42
|
+
### Base Exceptions
|
43
|
+
|
44
|
+
- `DbDriftError`: Base class for all application exceptions
|
45
|
+
- `DbDriftUserError`: User-caused errors (exit code 2)
|
46
|
+
- `DbDriftSystemError`: System-level errors (exit code 1)
|
47
|
+
- `DbDriftInterruptError`: User interruption (exit code 130)
|
48
|
+
|
49
|
+
### CLI Exceptions
|
50
|
+
|
51
|
+
- `CliError`: Base CLI exception (exit code 2)
|
52
|
+
- `CliArgumentError`: Invalid command-line arguments
|
53
|
+
- `CliUsageError`: Incorrect usage patterns
|
54
|
+
- `CliConfigError`: CLI configuration issues
|
55
|
+
|
56
|
+
### Database Exceptions
|
57
|
+
|
58
|
+
- `DatabaseError`: Base database exception (exit code 1)
|
59
|
+
- `DatabaseConnectionError`: Connection failures
|
60
|
+
- `DatabaseQueryError`: Query execution errors
|
61
|
+
- `DatabaseSchemaError`: Schema-related errors
|
62
|
+
- `DatabaseAuthenticationError`: Authentication failures
|
63
|
+
- `DatabaseTimeoutError`: Operation timeouts
|
64
|
+
|
65
|
+
### Configuration Exceptions
|
66
|
+
|
67
|
+
- `ConfigError`: Base configuration exception (exit code 2)
|
68
|
+
- `MissingConfigError`: Missing required configuration
|
69
|
+
- `ConfigValidationError`: Invalid configuration values
|
70
|
+
- `ConfigFormatError`: Configuration file format errors
|
71
|
+
|
72
|
+
## Debug Mode
|
73
|
+
|
74
|
+
Set the environment variable `DB_DRIFT_DEBUG=1` to enable debug mode:
|
75
|
+
|
76
|
+
- Shows full Python tracebacks
|
77
|
+
- Provides detailed error information
|
78
|
+
- Useful for development and troubleshooting
|
79
|
+
|
80
|
+
Example:
|
81
|
+
```bash
|
82
|
+
DB_DRIFT_DEBUG=1 db-drift --source db1 --target db2
|
83
|
+
```
|
84
|
+
|
85
|
+
## Error Handling Best Practices
|
86
|
+
|
87
|
+
### For Developers
|
88
|
+
|
89
|
+
1. **Use specific exceptions**: Choose the most specific exception type
|
90
|
+
2. **Provide helpful messages**: Include context and suggestions
|
91
|
+
3. **Set appropriate exit codes**: Follow the standard codes above
|
92
|
+
4. **Log errors properly**: Use `logger.exception()` for caught exceptions
|
93
|
+
|
94
|
+
Example:
|
95
|
+
```python
|
96
|
+
try:
|
97
|
+
connect_to_database(connection_string)
|
98
|
+
except ConnectionError as e:
|
99
|
+
raise DatabaseConnectionError(
|
100
|
+
f"Failed to connect to {host}:{port}",
|
101
|
+
host=host,
|
102
|
+
port=port,
|
103
|
+
database=database_name
|
104
|
+
) from e
|
105
|
+
```
|
106
|
+
|
107
|
+
### For Users
|
108
|
+
|
109
|
+
1. **Check exit codes**: Use `echo $?` (Unix) or `echo %ERRORLEVEL%` (Windows)
|
110
|
+
2. **Enable debug mode**: Set `DB_DRIFT_DEBUG=1` for detailed errors
|
111
|
+
3. **Read suggestions**: Error messages often include helpful suggestions
|
112
|
+
4. **Check logs**: Detailed logs are written to `.logs/db-drift.log`
|
Binary file
|
@@ -0,0 +1,414 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
|
4
|
+
<head>
|
5
|
+
<meta charset="UTF-8">
|
6
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
8
|
+
|
9
|
+
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/css/bootstrap.min.css" rel="stylesheet"
|
10
|
+
integrity="sha384-aFq/bzH65dt+w6FI2ooMVUpc+21e0SRygnTpmBvdBgSdnuTN7QbdgL+OapgHtvPp" crossorigin="anonymous">
|
11
|
+
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha2/dist/js/bootstrap.bundle.min.js"
|
12
|
+
integrity="sha384-qKXV1j0HvMUeCBQ+QVp7JcfGl760yU08IQ+GpUo5hlbpg51QRiuqHAJz8+BrxE/N" crossorigin="anonymous">
|
13
|
+
</script>
|
14
|
+
<style type="text/css">
|
15
|
+
table {
|
16
|
+
/* This will make every table use its full width*/
|
17
|
+
margin: auto;
|
18
|
+
width: 100% !important;
|
19
|
+
}
|
20
|
+
|
21
|
+
.col {
|
22
|
+
/* This will vertically align all the columns */
|
23
|
+
vertical-align: middle !important;
|
24
|
+
}
|
25
|
+
|
26
|
+
th[colspan="2"],
|
27
|
+
td[colspan="2"] {
|
28
|
+
/* This will horizontally align the key columns like:
|
29
|
+
- The table headers
|
30
|
+
- Special cases like "REMOVED" and "NOT PRESENT" when referring to an object
|
31
|
+
*/
|
32
|
+
text-align: center;
|
33
|
+
}
|
34
|
+
|
35
|
+
td>table {
|
36
|
+
/* This will make the tables inside the columns use their full size */
|
37
|
+
width: 100% !important;
|
38
|
+
height: 100% !important;
|
39
|
+
}
|
40
|
+
|
41
|
+
td>table>tbody>tr>td {
|
42
|
+
/* This will make the columns that are inside tables that are inside columns have a small padding*/
|
43
|
+
padding: 0.4rem !important;
|
44
|
+
}
|
45
|
+
|
46
|
+
td:has(> table) {
|
47
|
+
/* This will make the columns have a table inside them have no padding
|
48
|
+
This enables us to use the table's colours in whole size of the column */
|
49
|
+
padding: 0 !important;
|
50
|
+
}
|
51
|
+
|
52
|
+
th {
|
53
|
+
/* This will make the table headers occupy 50% of the table each */
|
54
|
+
width: 50%;
|
55
|
+
}
|
56
|
+
</style>
|
57
|
+
|
58
|
+
<title>DB Diff Report</title>
|
59
|
+
</head>
|
60
|
+
|
61
|
+
<body>
|
62
|
+
<header class="navbar navbar-light bg-light">
|
63
|
+
<div class="container-fluid">
|
64
|
+
<a class="navbar-brand" href="#">
|
65
|
+
Database Differences Report
|
66
|
+
</a>
|
67
|
+
</div>
|
68
|
+
</header>
|
69
|
+
|
70
|
+
<main class="container">
|
71
|
+
|
72
|
+
<div class="table-responsive">
|
73
|
+
<table class="table table-bordered caption-top">
|
74
|
+
<caption class="caption-top">
|
75
|
+
<h5>TABLES</h5>
|
76
|
+
</caption>
|
77
|
+
<thead>
|
78
|
+
<tr>
|
79
|
+
<th class="col" colspan="2">
|
80
|
+
<h5>Version: v1.0.0</h5>
|
81
|
+
</th>
|
82
|
+
<th class="col" colspan="2">
|
83
|
+
<h5>Version: v1.1.0</h5>
|
84
|
+
</th>
|
85
|
+
</tr>
|
86
|
+
</thead>
|
87
|
+
<tbody>
|
88
|
+
|
89
|
+
|
90
|
+
<tr>
|
91
|
+
<td class="col bg-danger-subtle" colspan="2" style="text-align:center">TABLE_1</td>
|
92
|
+
<td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
|
93
|
+
</tr>
|
94
|
+
<tr>
|
95
|
+
<td class="col bg-danger-subtle" style="text-align:center">TABLE_2</td>
|
96
|
+
<td class="col bg-danger-subtle">
|
97
|
+
<table class="table-borderless">
|
98
|
+
<tr>
|
99
|
+
<td class="col">
|
100
|
+
COL1: TIMESTAMP(6)
|
101
|
+
</td>
|
102
|
+
</tr>
|
103
|
+
<tr>
|
104
|
+
<td class="col">
|
105
|
+
COL2: VARCHAR2
|
106
|
+
</td>
|
107
|
+
</tr>
|
108
|
+
<tr>
|
109
|
+
<td class="col">
|
110
|
+
COL3: VARCHAR2
|
111
|
+
</td>
|
112
|
+
</tr>
|
113
|
+
<tr>
|
114
|
+
<td class="col">
|
115
|
+
COL4: NUMBER
|
116
|
+
</td>
|
117
|
+
</tr>
|
118
|
+
<tr>
|
119
|
+
<td class="col">
|
120
|
+
COL5: VARCHAR2
|
121
|
+
</td>
|
122
|
+
</tr>
|
123
|
+
<tr>
|
124
|
+
<td class="col">
|
125
|
+
COL6: NUMBER
|
126
|
+
</td>
|
127
|
+
</tr>
|
128
|
+
<tr>
|
129
|
+
<td class="col">
|
130
|
+
COL7: VARCHAR2
|
131
|
+
</td>
|
132
|
+
</tr>
|
133
|
+
<tr>
|
134
|
+
<td class="col">
|
135
|
+
COL8: NUMBER
|
136
|
+
</td>
|
137
|
+
</tr>
|
138
|
+
<tr>
|
139
|
+
<td class="col">
|
140
|
+
COL9: NUMBER
|
141
|
+
</td>
|
142
|
+
</tr>
|
143
|
+
</table>
|
144
|
+
</td>
|
145
|
+
<td class="col" colspan="2">PROPERTIES WERE REMOVED</td>
|
146
|
+
</tr>
|
147
|
+
<tr>
|
148
|
+
<td class="col" style="text-align:center">TABLE_3</td>
|
149
|
+
<td class="col bg-warning-subtle">
|
150
|
+
<table class="table-borderless">
|
151
|
+
<tr>
|
152
|
+
<td class="col
|
153
|
+
bg-warning-subtle
|
154
|
+
">
|
155
|
+
<span class="badge bg-dark-subtle text-dark rounded-pill">documentation</span>
|
156
|
+
This is the previous documentation for TABLE_3.
|
157
|
+
</td>
|
158
|
+
</tr>
|
159
|
+
</table>
|
160
|
+
</td>
|
161
|
+
<td class="col" style="text-align:center">TABLE_3</td>
|
162
|
+
<td class="col">
|
163
|
+
<table class="table-borderless">
|
164
|
+
<tr>
|
165
|
+
<td class="col
|
166
|
+
bg-warning-subtle
|
167
|
+
">
|
168
|
+
<span class="badge bg-dark-subtle text-dark rounded-pill">documentation</span>
|
169
|
+
This is the new documentation for TABLE_3.
|
170
|
+
</td>
|
171
|
+
</tr>
|
172
|
+
</table>
|
173
|
+
</td>
|
174
|
+
</tr>
|
175
|
+
|
176
|
+
|
177
|
+
</tbody>
|
178
|
+
</table>
|
179
|
+
</div>
|
180
|
+
|
181
|
+
<div class="table-responsive">
|
182
|
+
<table class="table table-bordered caption-top">
|
183
|
+
<caption class="caption-top">
|
184
|
+
<h5>INDEXES</h5>
|
185
|
+
</caption>
|
186
|
+
<thead>
|
187
|
+
<tr>
|
188
|
+
<th class="col" colspan="2">
|
189
|
+
<h5>Version: v1.0.0</h5>
|
190
|
+
</th>
|
191
|
+
<th class="col" colspan="2">
|
192
|
+
<h5>Version: v1.1.0</h5>
|
193
|
+
</th>
|
194
|
+
</tr>
|
195
|
+
</thead>
|
196
|
+
<tbody>
|
197
|
+
|
198
|
+
|
199
|
+
<tr>
|
200
|
+
<td class="col bg-danger-subtle" style="text-align:center">TABLE_1_PK</td>
|
201
|
+
<td class="col bg-danger-subtle">
|
202
|
+
<table class="table-borderless">
|
203
|
+
<tr>
|
204
|
+
<td class="col">
|
205
|
+
table: TABLE_1, columns: [COL1], uniqueness: UNIQUE, prefix_length:
|
206
|
+
None, tablespace: SOME_TABLESPACE
|
207
|
+
</td>
|
208
|
+
</tr>
|
209
|
+
</table>
|
210
|
+
</td>
|
211
|
+
<td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
|
212
|
+
</tr>
|
213
|
+
<tr>
|
214
|
+
<td class="col bg-danger-subtle" style="text-align:center">TABLE4_COL1_UK</td>
|
215
|
+
<td class="col bg-danger-subtle">
|
216
|
+
<table class="table-borderless">
|
217
|
+
<tr>
|
218
|
+
<td class="col">
|
219
|
+
table: TABLE_4, columns: [COL1], uniqueness: UNIQUE, prefix_length: None,
|
220
|
+
tablespace: SOME_TABLESPACE
|
221
|
+
</td>
|
222
|
+
</tr>
|
223
|
+
</table>
|
224
|
+
</td>
|
225
|
+
<td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
|
226
|
+
</tr>
|
227
|
+
<tr>
|
228
|
+
<td class="col bg-danger-subtle" style="text-align:center">TABLE4_COL2_IDX</td>
|
229
|
+
<td class="col bg-danger-subtle">
|
230
|
+
<table class="table-borderless">
|
231
|
+
<tr>
|
232
|
+
<td class="col">
|
233
|
+
table: TABLE_4, columns: [COL2], uniqueness: NONUNIQUE, prefix_length:
|
234
|
+
None, tablespace: SOME_TABLESPACE
|
235
|
+
</td>
|
236
|
+
</tr>
|
237
|
+
</table>
|
238
|
+
</td>
|
239
|
+
<td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
|
240
|
+
</tr>
|
241
|
+
<tr>
|
242
|
+
<td class="col bg-light" colspan="2">OBJECT NOT PRESENT</td>
|
243
|
+
<td class="col bg-success-subtle" style="text-align:center">TABLE5_IDX</td>
|
244
|
+
<td class="col bg-success-subtle">
|
245
|
+
<table class="table-borderless">
|
246
|
+
<tr>
|
247
|
+
<td class="col">
|
248
|
+
table: TABLE_5, columns: [COL1], uniqueness: NONUNIQUE,
|
249
|
+
prefix_length: None, tablespace: None
|
250
|
+
</td>
|
251
|
+
</tr>
|
252
|
+
</table>
|
253
|
+
</td>
|
254
|
+
</tr>
|
255
|
+
|
256
|
+
|
257
|
+
</tbody>
|
258
|
+
</table>
|
259
|
+
</div>
|
260
|
+
|
261
|
+
<div class="table-responsive">
|
262
|
+
<table class="table table-bordered caption-top">
|
263
|
+
<caption class="caption-top">
|
264
|
+
<h5>CONSTRAINTS</h5>
|
265
|
+
</caption>
|
266
|
+
<thead>
|
267
|
+
<tr>
|
268
|
+
<th class="col" colspan="2">
|
269
|
+
<h5>Version: v1.0.0</h5>
|
270
|
+
</th>
|
271
|
+
<th class="col" colspan="2">
|
272
|
+
<h5>Version: v1.1.0</h5>
|
273
|
+
</th>
|
274
|
+
</tr>
|
275
|
+
</thead>
|
276
|
+
<tbody>
|
277
|
+
|
278
|
+
|
279
|
+
<tr>
|
280
|
+
<td class="col bg-danger-subtle" style="text-align:center">TABLE_1_FK</td>
|
281
|
+
<td class="col bg-danger-subtle">
|
282
|
+
<table class="table-borderless">
|
283
|
+
<tr>
|
284
|
+
<td class="col">
|
285
|
+
table: TABLE_1, type: REFERENTIAL INTEGRITY (FOREIGN KEY), rule: NO
|
286
|
+
ACTION
|
287
|
+
</td>
|
288
|
+
</tr>
|
289
|
+
</table>
|
290
|
+
</td>
|
291
|
+
<td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
|
292
|
+
</tr>
|
293
|
+
<tr>
|
294
|
+
<td class="col bg-danger-subtle" style="text-align:center">TABLE_1_PK</td>
|
295
|
+
<td class="col bg-danger-subtle">
|
296
|
+
<table class="table-borderless">
|
297
|
+
<tr>
|
298
|
+
<td class="col">
|
299
|
+
table: TABLE_1, columns: [COL2], type: PRIMARY KEY
|
300
|
+
</td>
|
301
|
+
</tr>
|
302
|
+
</table>
|
303
|
+
</td>
|
304
|
+
<td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
|
305
|
+
</tr>
|
306
|
+
<tr>
|
307
|
+
<td class="col bg-danger-subtle" style="text-align:center">TABLE4_FK</td>
|
308
|
+
<td class="col bg-danger-subtle">
|
309
|
+
<table class="table-borderless">
|
310
|
+
<tr>
|
311
|
+
<td class="col">
|
312
|
+
table: TABLE_4, type: REFERENTIAL INTEGRITY (FOREIGN KEY), rule: NO ACTION
|
313
|
+
</td>
|
314
|
+
</tr>
|
315
|
+
</table>
|
316
|
+
</td>
|
317
|
+
<td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
|
318
|
+
</tr>
|
319
|
+
|
320
|
+
|
321
|
+
</tbody>
|
322
|
+
</table>
|
323
|
+
</div>
|
324
|
+
|
325
|
+
<div class="table-responsive">
|
326
|
+
<table class="table table-bordered caption-top">
|
327
|
+
<caption class="caption-top">
|
328
|
+
<h5>PACKAGES</h5>
|
329
|
+
</caption>
|
330
|
+
<thead>
|
331
|
+
<tr>
|
332
|
+
<th class="col" colspan="2">
|
333
|
+
<h5>Version: v1.0.0</h5>
|
334
|
+
</th>
|
335
|
+
<th class="col" colspan="2">
|
336
|
+
<h5>Version: v1.1.0</h5>
|
337
|
+
</th>
|
338
|
+
</tr>
|
339
|
+
</thead>
|
340
|
+
<tbody>
|
341
|
+
|
342
|
+
|
343
|
+
<tr>
|
344
|
+
<td class="col" colspan="2">PKG_1</td>
|
345
|
+
<td class="col" style="text-align:center">PKG_1</td>
|
346
|
+
<td class="col bg-warning-subtle">Package Body and Definition has been changed</td>
|
347
|
+
</tr>
|
348
|
+
|
349
|
+
|
350
|
+
</tbody>
|
351
|
+
</table>
|
352
|
+
</div>
|
353
|
+
|
354
|
+
<div class="table-responsive">
|
355
|
+
<table class="table table-bordered caption-top">
|
356
|
+
<caption class="caption-top">
|
357
|
+
<h5>JOBS</h5>
|
358
|
+
</caption>
|
359
|
+
<thead>
|
360
|
+
<tr>
|
361
|
+
<th class="col" colspan="2">
|
362
|
+
<h5>Version: v1.0.0</h5>
|
363
|
+
</th>
|
364
|
+
<th class="col" colspan="2">
|
365
|
+
<h5>Version: v1.1.0</h5>
|
366
|
+
</th>
|
367
|
+
</tr>
|
368
|
+
</thead>
|
369
|
+
<tbody>
|
370
|
+
|
371
|
+
|
372
|
+
<tr>
|
373
|
+
<td class="col bg-danger-subtle" style="text-align:center">JOB_1</td>
|
374
|
+
<td class="col bg-danger-subtle">
|
375
|
+
<table class="table-borderless">
|
376
|
+
<tr>
|
377
|
+
<td class="col">
|
378
|
+
action: JOB_1_SP, interval: FREQ=HOURLY
|
379
|
+
</td>
|
380
|
+
</tr>
|
381
|
+
</table>
|
382
|
+
</td>
|
383
|
+
<td class="col" colspan="2">OBJECT HAS BEEN REMOVED</td>
|
384
|
+
</tr>
|
385
|
+
<tr>
|
386
|
+
<td class="col bg-light" colspan="2">OBJECT NOT PRESENT</td>
|
387
|
+
<td class="col bg-success-subtle" style="text-align:center">JOB_2</td>
|
388
|
+
<td class="col bg-success-subtle">
|
389
|
+
<table class="table-borderless">
|
390
|
+
<tr>
|
391
|
+
<td class="col">
|
392
|
+
<span class="badge bg-dark-subtle text-dark rounded-pill">documentation</span> a
|
393
|
+
job that schedules a daily sync of an index in TABLE_5
|
394
|
+
</td>
|
395
|
+
</tr>
|
396
|
+
<tr>
|
397
|
+
<td class="col">
|
398
|
+
action: PKG_1.JOB_2_SP, interval:
|
399
|
+
FREQ=DAILY;BYHOUR=4;BYMINUTE=0;BYSECOND=0
|
400
|
+
</td>
|
401
|
+
</tr>
|
402
|
+
</table>
|
403
|
+
</td>
|
404
|
+
</tr>
|
405
|
+
|
406
|
+
|
407
|
+
</tbody>
|
408
|
+
</table>
|
409
|
+
</div>
|
410
|
+
|
411
|
+
</main>
|
412
|
+
</body>
|
413
|
+
|
414
|
+
</html>
|
@@ -1,12 +1,12 @@
|
|
1
1
|
[project]
|
2
2
|
name = "db-drift"
|
3
|
-
version = "1.
|
3
|
+
version = "1.1.0"
|
4
4
|
description = "A command line tool to visualize the differences between two DB states."
|
5
5
|
readme = "README.md"
|
6
6
|
authors = [
|
7
7
|
{ name = "Hercules Konsoulas", email = "dyka3773@gmail.com" }
|
8
8
|
]
|
9
|
-
requires-python = ">=3.
|
9
|
+
requires-python = ">=3.10"
|
10
10
|
license = "MIT"
|
11
11
|
keywords = [
|
12
12
|
"db-drift",
|
@@ -33,8 +33,8 @@ dependencies = [
|
|
33
33
|
"psycopg[binary]>=3.2.9",
|
34
34
|
"pymysql>=1.1.1",
|
35
35
|
"python-dotenv>=1.1.1",
|
36
|
-
"pyyaml>=6.0.
|
37
|
-
"sqlmodel>=0.0.
|
36
|
+
"pyyaml>=6.0.3",
|
37
|
+
"sqlmodel>=0.0.25",
|
38
38
|
"sshtunnel>=0.4.0",
|
39
39
|
]
|
40
40
|
|
@@ -47,10 +47,10 @@ db-drift = "db_drift:main"
|
|
47
47
|
[dependency-groups]
|
48
48
|
dev = [
|
49
49
|
"build>=1.3.0",
|
50
|
-
"git-changelog
|
50
|
+
"git-changelog==2.6.3",
|
51
51
|
"pytest>=8.4.1",
|
52
|
-
"python-semantic-release
|
53
|
-
"tox
|
52
|
+
"python-semantic-release==10.4.1",
|
53
|
+
"tox==4.30.3",
|
54
54
|
"twine>=6.1.0",
|
55
55
|
]
|
56
56
|
|