dbmigrate-pro 2.0.1__py3-none-any.whl

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.
@@ -0,0 +1,6 @@
1
+ """DBMigrate Pro Client - Thin CLI for DBMigrate API"""
2
+
3
+ from .cli import main, DBMigrateClient
4
+
5
+ __version__ = "1.0.0"
6
+ __all__ = ["main", "DBMigrateClient"]
@@ -0,0 +1,400 @@
1
+ """
2
+ DBMigrate Pro - Thin Client
3
+ This CLI connects to the DBMigrate API. All migration logic runs on our servers.
4
+ """
5
+
6
+ import os
7
+ import sys
8
+ import json
9
+ import argparse
10
+ import requests
11
+ from pathlib import Path
12
+ from typing import Optional
13
+ from dataclasses import dataclass
14
+
15
+
16
+ # API Configuration
17
+ API_BASE_URL = os.environ.get("DBMIGRATE_API_URL", "https://api.dbmigrate.io")
18
+ API_VERSION = "v1"
19
+
20
+
21
+ @dataclass
22
+ class ClientConfig:
23
+ """Client configuration stored locally"""
24
+ api_key: Optional[str] = None
25
+ email: Optional[str] = None
26
+
27
+ @classmethod
28
+ def load(cls) -> "ClientConfig":
29
+ config_file = Path.home() / ".dbmigrate" / "config.json"
30
+ if config_file.exists():
31
+ with open(config_file) as f:
32
+ data = json.load(f)
33
+ return cls(**data)
34
+ return cls()
35
+
36
+ def save(self):
37
+ config_dir = Path.home() / ".dbmigrate"
38
+ config_dir.mkdir(exist_ok=True)
39
+ config_file = config_dir / "config.json"
40
+ with open(config_file, "w") as f:
41
+ json.dump({"api_key": self.api_key, "email": self.email}, f)
42
+
43
+
44
+ class DBMigrateClient:
45
+ """Client for DBMigrate API"""
46
+
47
+ def __init__(self):
48
+ self.config = ClientConfig.load()
49
+ self.session = requests.Session()
50
+ if self.config.api_key:
51
+ self.session.headers["Authorization"] = f"Bearer {self.config.api_key}"
52
+ self.session.headers["Content-Type"] = "application/json"
53
+ self.session.headers["User-Agent"] = "dbmigrate-pro-cli/1.0"
54
+
55
+ def _api_url(self, endpoint: str) -> str:
56
+ return f"{API_BASE_URL}/{API_VERSION}/{endpoint}"
57
+
58
+ def _handle_response(self, response: requests.Response) -> dict:
59
+ """Handle API response and errors"""
60
+ if response.status_code == 401:
61
+ print("āŒ Authentication required. Run: dbmigrate login")
62
+ sys.exit(1)
63
+ elif response.status_code == 402:
64
+ data = response.json()
65
+ print(f"āŒ {data.get('error', 'Payment required')}")
66
+ print(f" Current plan: {data.get('plan', 'Free')}")
67
+ print(f" Usage: {data.get('used', 0)}/{data.get('limit', 0)} tables this month")
68
+ print(f"\nšŸ’” Upgrade at https://dbmigrate.io/pricing")
69
+ sys.exit(1)
70
+ elif response.status_code == 429:
71
+ print("āŒ Rate limit exceeded. Please wait and try again.")
72
+ sys.exit(1)
73
+ elif response.status_code >= 400:
74
+ error = response.json().get("error", "Unknown error")
75
+ print(f"āŒ Error: {error}")
76
+ sys.exit(1)
77
+
78
+ return response.json()
79
+
80
+ def login(self, email: str, password: str) -> dict:
81
+ """Login and get API key"""
82
+ response = self.session.post(
83
+ self._api_url("auth/login"),
84
+ json={"email": email, "password": password}
85
+ )
86
+ data = self._handle_response(response)
87
+
88
+ # Save credentials
89
+ self.config.api_key = data["api_key"]
90
+ self.config.email = email
91
+ self.config.save()
92
+
93
+ return data
94
+
95
+ def signup(self, email: str, password: str) -> dict:
96
+ """Create new account"""
97
+ response = self.session.post(
98
+ self._api_url("auth/signup"),
99
+ json={"email": email, "password": password}
100
+ )
101
+ return self._handle_response(response)
102
+
103
+ def status(self) -> dict:
104
+ """Get account status and usage"""
105
+ response = self.session.get(self._api_url("account/status"))
106
+ return self._handle_response(response)
107
+
108
+ def migrate(
109
+ self,
110
+ source_type: str,
111
+ target_type: str,
112
+ source_connection: str,
113
+ target_connection: Optional[str] = None,
114
+ include_tables: Optional[list] = None,
115
+ exclude_tables: Optional[list] = None,
116
+ include_data: bool = True,
117
+ include_procedures: bool = True,
118
+ ) -> dict:
119
+ """
120
+ Run a migration via the API.
121
+
122
+ The actual migration runs on our servers. Connection strings are
123
+ encrypted and never stored.
124
+ """
125
+ payload = {
126
+ "source_type": source_type,
127
+ "target_type": target_type,
128
+ "source_connection": source_connection,
129
+ "target_connection": target_connection,
130
+ "options": {
131
+ "include_tables": include_tables,
132
+ "exclude_tables": exclude_tables,
133
+ "include_data": include_data,
134
+ "include_procedures": include_procedures,
135
+ }
136
+ }
137
+
138
+ print("šŸ”„ Connecting to DBMigrate API...")
139
+ response = self.session.post(
140
+ self._api_url("migrations"),
141
+ json=payload,
142
+ timeout=300 # 5 minute timeout for large migrations
143
+ )
144
+
145
+ return self._handle_response(response)
146
+
147
+ def get_migration(self, migration_id: str) -> dict:
148
+ """Get migration status"""
149
+ response = self.session.get(self._api_url(f"migrations/{migration_id}"))
150
+ return self._handle_response(response)
151
+
152
+ def download_result(self, migration_id: str, output_dir: str) -> str:
153
+ """Download migration results"""
154
+ response = self.session.get(
155
+ self._api_url(f"migrations/{migration_id}/download"),
156
+ stream=True
157
+ )
158
+
159
+ if response.status_code != 200:
160
+ self._handle_response(response)
161
+
162
+ output_path = Path(output_dir)
163
+ output_path.mkdir(parents=True, exist_ok=True)
164
+
165
+ zip_file = output_path / f"migration_{migration_id}.zip"
166
+ with open(zip_file, "wb") as f:
167
+ for chunk in response.iter_content(chunk_size=8192):
168
+ f.write(chunk)
169
+
170
+ return str(zip_file)
171
+
172
+
173
+ # CLI Commands
174
+
175
+ def cmd_login(args):
176
+ """Login to DBMigrate"""
177
+ import getpass
178
+
179
+ email = args.email or input("Email: ")
180
+ password = getpass.getpass("Password: ")
181
+
182
+ client = DBMigrateClient()
183
+ result = client.login(email, password)
184
+
185
+ print("=" * 60)
186
+ print("āœ… Logged in successfully!")
187
+ print("=" * 60)
188
+ print(f" Email: {email}")
189
+ print(f" Plan: {result.get('plan', 'Free')}")
190
+ print(f" Tables remaining: {result.get('tables_remaining', 1)}")
191
+ print("=" * 60)
192
+
193
+
194
+ def cmd_signup(args):
195
+ """Create a new account"""
196
+ import getpass
197
+
198
+ email = args.email or input("Email: ")
199
+ password = getpass.getpass("Password: ")
200
+ confirm = getpass.getpass("Confirm password: ")
201
+
202
+ if password != confirm:
203
+ print("āŒ Passwords don't match")
204
+ sys.exit(1)
205
+
206
+ client = DBMigrateClient()
207
+ result = client.signup(email, password)
208
+
209
+ print("=" * 60)
210
+ print("šŸŽ‰ Account created!")
211
+ print("=" * 60)
212
+ print(f" Email: {email}")
213
+ print(f" Plan: Free (1 table to test)")
214
+ print()
215
+ print(" Now run: dbmigrate login")
216
+ print("=" * 60)
217
+
218
+
219
+ def cmd_status(args):
220
+ """Show account status"""
221
+ client = DBMigrateClient()
222
+ result = client.status()
223
+
224
+ plan = result.get("plan", "Free")
225
+ tables_used = result.get("tables_used", 0)
226
+ tables_limit = result.get("tables_limit", 1)
227
+ sp_used = result.get("sp_used", 0)
228
+ sp_limit = result.get("sp_limit", 0)
229
+
230
+ print("=" * 60)
231
+ print("DBMigrate Pro - Account Status")
232
+ print("=" * 60)
233
+ print(f" Email: {result.get('email', 'Not logged in')}")
234
+ print(f" Plan: {plan.upper()}")
235
+ print()
236
+ print("Usage This Month:")
237
+ print(f" Tables: {tables_used}/{tables_limit}")
238
+ print(f" Stored Procedures: {sp_used}/{sp_limit}")
239
+
240
+ if result.get("expires_at"):
241
+ print(f" Renews: {result['expires_at']}")
242
+
243
+ print("=" * 60)
244
+
245
+ if plan.lower() == "free":
246
+ print()
247
+ print("šŸ“¦ Upgrade for more migrations:")
248
+ print(" Starter ($99/mo): 50 tables, 20 SPs")
249
+ print(" Pro ($499/mo): 500 tables, 200 SPs")
250
+ print(" Enterprise ($2,499): Unlimited")
251
+ print()
252
+ print(" šŸ‘‰ https://dbmigrate.io/pricing")
253
+
254
+
255
+ def cmd_migrate(args):
256
+ """Run a migration"""
257
+ client = DBMigrateClient()
258
+
259
+ # Parse table lists
260
+ include_tables = args.include_tables.split(",") if args.include_tables else None
261
+ exclude_tables = args.exclude_tables.split(",") if args.exclude_tables else None
262
+
263
+ print("=" * 60)
264
+ print("DBMigrate Pro - Universal Database Migration")
265
+ print("=" * 60)
266
+ print(f"Source: {args.source}")
267
+ print(f"Target: {args.target}")
268
+ print("=" * 60)
269
+ print()
270
+
271
+ # Start migration
272
+ result = client.migrate(
273
+ source_type=args.source,
274
+ target_type=args.target,
275
+ source_connection=args.source_conn,
276
+ target_connection=args.target_conn,
277
+ include_tables=include_tables,
278
+ exclude_tables=exclude_tables,
279
+ include_data=not args.no_data,
280
+ include_procedures=not args.no_procedures,
281
+ )
282
+
283
+ migration_id = result.get("migration_id")
284
+ status = result.get("status")
285
+
286
+ if status == "completed":
287
+ print("āœ… Migration completed!")
288
+ print()
289
+ print(f" Tables migrated: {result.get('tables_migrated', 0)}")
290
+ print(f" SPs converted: {result.get('sp_converted', 0)}")
291
+ print(f" Duration: {result.get('duration', 'N/A')}")
292
+
293
+ # Download results
294
+ if args.output:
295
+ print()
296
+ print("šŸ“„ Downloading results...")
297
+ zip_file = client.download_result(migration_id, args.output)
298
+ print(f" Saved to: {zip_file}")
299
+
300
+ elif status == "processing":
301
+ print("ā³ Migration is processing...")
302
+ print(f" Migration ID: {migration_id}")
303
+ print()
304
+ print(" Check status: dbmigrate status --migration {migration_id}")
305
+
306
+ else:
307
+ print(f"āŒ Migration failed: {result.get('error', 'Unknown error')}")
308
+ sys.exit(1)
309
+
310
+ print("=" * 60)
311
+
312
+
313
+ def cmd_logout(args):
314
+ """Logout and clear credentials"""
315
+ config = ClientConfig()
316
+ config.api_key = None
317
+ config.email = None
318
+ config.save()
319
+ print("āœ… Logged out successfully")
320
+
321
+
322
+ def main():
323
+ """Main CLI entry point"""
324
+ parser = argparse.ArgumentParser(
325
+ prog="dbmigrate",
326
+ description="DBMigrate Pro - Universal Database Migration Tool",
327
+ formatter_class=argparse.RawDescriptionHelpFormatter,
328
+ epilog="""
329
+ Pricing:
330
+ Free: 1 table (test before you buy)
331
+ Starter: 50 tables/mo, 20 SPs $99/mo
332
+ Pro: 500 tables/mo, 200 SPs $499/mo
333
+ Enterprise: Unlimited $2,499/mo
334
+
335
+ Examples:
336
+ # Create account and login
337
+ dbmigrate signup
338
+ dbmigrate login
339
+
340
+ # Check your usage
341
+ dbmigrate status
342
+
343
+ # Run a migration
344
+ dbmigrate migrate -s postgresql -t mysql \\
345
+ --source-conn "postgresql://user:pass@host/db" \\
346
+ --output ./results
347
+
348
+ Supported: PostgreSQL, MySQL, Oracle, SQL Server, MongoDB,
349
+ Neo4j, Redis, Pinecone, ClickHouse, and 65+ more
350
+
351
+ Website: https://dbmigrate.io
352
+ """
353
+ )
354
+
355
+ subparsers = parser.add_subparsers(dest="command", help="Commands")
356
+
357
+ # Signup
358
+ signup_parser = subparsers.add_parser("signup", help="Create a new account")
359
+ signup_parser.add_argument("--email", "-e", help="Email address")
360
+
361
+ # Login
362
+ login_parser = subparsers.add_parser("login", help="Login to your account")
363
+ login_parser.add_argument("--email", "-e", help="Email address")
364
+
365
+ # Logout
366
+ subparsers.add_parser("logout", help="Logout and clear credentials")
367
+
368
+ # Status
369
+ subparsers.add_parser("status", help="Show account status and usage")
370
+
371
+ # Migrate
372
+ migrate_parser = subparsers.add_parser("migrate", help="Run a database migration")
373
+ migrate_parser.add_argument("--source", "-s", required=True, help="Source database type")
374
+ migrate_parser.add_argument("--target", "-t", required=True, help="Target database type")
375
+ migrate_parser.add_argument("--source-conn", "-c", required=True, help="Source connection string")
376
+ migrate_parser.add_argument("--target-conn", help="Target connection string (optional)")
377
+ migrate_parser.add_argument("--output", "-o", help="Output directory for results")
378
+ migrate_parser.add_argument("--include-tables", help="Tables to include (comma-separated)")
379
+ migrate_parser.add_argument("--exclude-tables", help="Tables to exclude (comma-separated)")
380
+ migrate_parser.add_argument("--no-data", action="store_true", help="Skip data migration")
381
+ migrate_parser.add_argument("--no-procedures", action="store_true", help="Skip SP conversion")
382
+
383
+ args = parser.parse_args()
384
+
385
+ if args.command == "signup":
386
+ cmd_signup(args)
387
+ elif args.command == "login":
388
+ cmd_login(args)
389
+ elif args.command == "logout":
390
+ cmd_logout(args)
391
+ elif args.command == "status":
392
+ cmd_status(args)
393
+ elif args.command == "migrate":
394
+ cmd_migrate(args)
395
+ else:
396
+ parser.print_help()
397
+
398
+
399
+ if __name__ == "__main__":
400
+ main()
@@ -0,0 +1,123 @@
1
+ Metadata-Version: 2.4
2
+ Name: dbmigrate-pro
3
+ Version: 2.0.1
4
+ Summary: [COMING SOON] Universal Database Migration Tool - Migrate any database to any database (74+ databases supported)
5
+ Project-URL: Homepage, https://dbmigrate.io
6
+ Project-URL: Documentation, https://docs.dbmigrate.io
7
+ Project-URL: Pricing, https://dbmigrate.io/pricing
8
+ Project-URL: Support, https://dbmigrate.io/support
9
+ Author-email: "DBMigrate Inc." <hello@dbmigrate.io>
10
+ License: Proprietary - https://dbmigrate.io/terms
11
+ License-File: LICENSE
12
+ Keywords: data-migration,database,etl,migration,mongodb,mysql,oracle,postgresql,schema,sql,stored-procedures
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: System Administrators
16
+ Classifier: License :: Other/Proprietary License
17
+ Classifier: Operating System :: OS Independent
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.8
20
+ Classifier: Programming Language :: Python :: 3.9
21
+ Classifier: Programming Language :: Python :: 3.10
22
+ Classifier: Programming Language :: Python :: 3.11
23
+ Classifier: Programming Language :: Python :: 3.12
24
+ Classifier: Topic :: Database
25
+ Requires-Python: >=3.8
26
+ Requires-Dist: requests>=2.28.0
27
+ Description-Content-Type: text/markdown
28
+
29
+ # DBMigrate Pro
30
+
31
+ **Universal Database Migration Tool** - Migrate any database to any database.
32
+
33
+ ---
34
+
35
+ ## āš ļø COMING SOON - NOT LIVE YET
36
+
37
+ **This package is currently in pre-release.** The API is not yet available.
38
+
39
+ šŸš€ **Launch Date:** January 29, 2026
40
+
41
+ šŸ“§ **Get notified:** Email hello@dbmigrate.io to join the waitlist.
42
+
43
+ ---
44
+
45
+ ## šŸš€ Quick Start (Available Soon)
46
+
47
+ ```bash
48
+ # Install
49
+ pip install dbmigrate-pro
50
+
51
+ # Create free account (1 table free to test)
52
+ dbmigrate signup
53
+
54
+ # Login
55
+ dbmigrate login
56
+
57
+ # Run migration
58
+ dbmigrate migrate \
59
+ --source postgresql \
60
+ --target mysql \
61
+ --source-conn "postgresql://user:pass@localhost/mydb" \
62
+ --output ./results
63
+ ```
64
+
65
+ ## šŸ’° Pricing
66
+
67
+ | Plan | Tables/Month | SP Conversions | Price |
68
+ |------|-------------|----------------|-------|
69
+ | **Free** | 1 | 0 | $0 (test before you buy) |
70
+ | **Starter** | 50 | 20 | $99/mo |
71
+ | **Pro** | 500 | 200 | $499/mo |
72
+ | **Enterprise** | Unlimited | Unlimited | $2,499/mo |
73
+
74
+ šŸ‘‰ **Upgrade at [dbmigrate.io/pricing](https://dbmigrate.io/pricing)**
75
+
76
+ ## šŸ—„ļø Supported Databases (74+)
77
+
78
+ ### Relational
79
+ PostgreSQL, MySQL, MariaDB, Oracle, SQL Server, SQLite, DB2, Snowflake, BigQuery, Redshift, Azure SQL, AWS RDS
80
+
81
+ ### Document
82
+ MongoDB, Couchbase, CouchDB, Amazon DocumentDB, Azure Cosmos DB, Firebase Firestore
83
+
84
+ ### Graph
85
+ Neo4j, Amazon Neptune, ArangoDB, JanusGraph, TigerGraph, Dgraph
86
+
87
+ ### Vector
88
+ Pinecone, Milvus, Weaviate, Qdrant, Chroma, pgvector
89
+
90
+ ### Time-Series
91
+ InfluxDB, TimescaleDB, QuestDB, Prometheus, VictoriaMetrics
92
+
93
+ ### Key-Value & Columnar
94
+ Redis, DynamoDB, Cassandra, ClickHouse, Elasticsearch
95
+
96
+ ## šŸ“– Commands
97
+
98
+ ```bash
99
+ # Account
100
+ dbmigrate signup # Create account
101
+ dbmigrate login # Login
102
+ dbmigrate status # Check usage
103
+ dbmigrate logout # Logout
104
+
105
+ # Migration
106
+ dbmigrate migrate -s SOURCE -t TARGET -c CONNECTION
107
+ ```
108
+
109
+ ## šŸ”’ Security
110
+
111
+ - All migrations run on our secure servers
112
+ - Connection strings are encrypted in transit and never stored
113
+ - SOC 2 Type II compliant infrastructure
114
+ - GDPR/HIPAA data handling available (Enterprise)
115
+
116
+ ## šŸ“ž Support
117
+
118
+ - **Free/Starter**: Email support (48hr response)
119
+ - **Pro**: Priority support (24hr response)
120
+ - **Enterprise**: Dedicated engineer, Slack channel
121
+
122
+ Website: https://dbmigrate.io
123
+ Email: support@dbmigrate.io
@@ -0,0 +1,7 @@
1
+ dbmigrate_client/__init__.py,sha256=fjUIQ4PjY8MJ6NB_Ja2KfUlWEInwpqfApVxKt7uCSrk,163
2
+ dbmigrate_client/cli.py,sha256=EdMX-BAgXziscWgz4KZZWKlezifSKuEkj6H-NwdHgyI,13409
3
+ dbmigrate_pro-2.0.1.dist-info/METADATA,sha256=PkqIitTOfuUPsNFJ_SjbYFlLgM_wF38Erz9o6_GGhPE,3583
4
+ dbmigrate_pro-2.0.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
5
+ dbmigrate_pro-2.0.1.dist-info/entry_points.txt,sha256=UjNq4HKY8Bxzn3JuNHWH_2HKYaaII61VDYnkc6e5dE8,52
6
+ dbmigrate_pro-2.0.1.dist-info/licenses/LICENSE,sha256=eKdi7-5Y4hsYWTb2dj7pMXq2RhePNsPMnH8PQrzHG3I,5716
7
+ dbmigrate_pro-2.0.1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.28.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ dbmigrate = dbmigrate_client:main
@@ -0,0 +1,151 @@
1
+ DBMigrate Commercial License Agreement
2
+ Version 1.0, January 2026
3
+
4
+ Copyright (c) 2026 DBMigrate Inc.
5
+ All Rights Reserved.
6
+
7
+ ================================================================================
8
+ COMMERCIAL LICENSE
9
+ ================================================================================
10
+
11
+ This license agreement ("Agreement") is between DBMigrate Inc. ("Company") and
12
+ the individual or entity ("Licensee") who has purchased a license to use
13
+ DBMigrate ("Software").
14
+
15
+ 1. GRANT OF LICENSE
16
+ -------------------
17
+ Subject to payment of the applicable license fees and compliance with this
18
+ Agreement, Company grants Licensee a non-exclusive, non-transferable license to:
19
+
20
+ a) Install and use the Software for internal business purposes
21
+ b) Use the Software to perform database migrations as described in the
22
+ documentation
23
+ c) Access updates and support according to the purchased plan
24
+
25
+ 2. LICENSE TIERS
26
+ ----------------
27
+ The Software is available under the following tiers:
28
+
29
+ STARTER ($299/month) - For individuals and small teams:
30
+ - Teams of 1-5 users
31
+ - Up to 100 tables per month
32
+ - Up to 50 stored procedure conversions
33
+ - Up to 5 database connections
34
+ - Single paradigm migrations only
35
+ - Email support (48-hour response)
36
+ - Best for: Small projects, startups, single migrations
37
+
38
+ PROFESSIONAL ($899/month) - For growing companies:
39
+ - Teams of 6-20 users
40
+ - Up to 500 tables per month
41
+ - Up to 250 stored procedure conversions
42
+ - Up to 20 database connections
43
+ - Cross-paradigm transformations included
44
+ - Priority support (24-hour response)
45
+ - Best for: Mid-size companies, multiple projects, ongoing migrations
46
+
47
+ BUSINESS ($2,499/month) - For enterprise teams:
48
+ - Teams of 21-100 users
49
+ - Up to 2,500 tables per month
50
+ - Up to 1,500 stored procedure conversions
51
+ - Unlimited database connections
52
+ - Data masking (GDPR/HIPAA/PCI-DSS compliant)
53
+ - WebSocket real-time API
54
+ - Parallel processing (multi-threaded)
55
+ - Premium support (8-hour response)
56
+ - Best for: Large enterprises, mission-critical migrations, compliance needs
57
+
58
+ ENTERPRISE ($7,500+/month) - For large organizations:
59
+ - Unlimited users
60
+ - Unlimited tables per month
61
+ - Unlimited stored procedure conversions
62
+ - Unlimited database connections
63
+ - All Business features, plus:
64
+ - Distributed horizontal scaling (Redis-based)
65
+ - Dedicated support engineer
66
+ - Custom SLA (up to 99.99% uptime)
67
+ - On-premise deployment option
68
+ - Custom integrations and training
69
+ - 24/7 support (1-hour response)
70
+ - Best for: Fortune 500, multi-region deployments, regulated industries
71
+
72
+ TIER SELECTION CRITERIA:
73
+ - Team Size: Number of users accessing the system
74
+ - Migration Volume: Tables and procedures converted per month
75
+ - Connections: Concurrent database connections needed
76
+ - Features: Cross-paradigm, masking, parallel processing needs
77
+ - Support: Response time and dedicated support requirements
78
+
79
+ 3. RESTRICTIONS
80
+ ---------------
81
+ Licensee shall NOT:
82
+
83
+ a) Redistribute, sublicense, rent, lease, or lend the Software
84
+ b) Modify, reverse engineer, decompile, or disassemble the Software
85
+ c) Remove or alter any proprietary notices
86
+ d) Use the Software to create a competing product
87
+ e) Exceed the usage limits of the purchased tier
88
+
89
+ 4. FREE TIER / EVALUATION
90
+ -------------------------
91
+ The Software may be used FREE for:
92
+
93
+ a) Evaluation and testing purposes (14-day trial)
94
+ b) Personal, non-commercial projects
95
+ c) Open-source projects (with attribution)
96
+ d) Educational and academic use
97
+
98
+ 5. INTELLECTUAL PROPERTY
99
+ ------------------------
100
+ The Software and all copies thereof are proprietary to Company and title
101
+ remains with Company. All rights not specifically granted are reserved.
102
+
103
+ 6. SUPPORT AND UPDATES
104
+ ----------------------
105
+ Support and updates are provided according to the purchased tier:
106
+
107
+ - Starter: Email support (48-hour response)
108
+ - Professional: Priority support (24-hour response)
109
+ - Business: Premium support (8-hour response)
110
+ - Enterprise: Dedicated support (1-hour response, 24/7)
111
+
112
+ 7. WARRANTY DISCLAIMER
113
+ ----------------------
114
+ THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
115
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
116
+ FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
117
+
118
+ 8. LIMITATION OF LIABILITY
119
+ --------------------------
120
+ IN NO EVENT SHALL COMPANY BE LIABLE FOR ANY INDIRECT, INCIDENTAL, SPECIAL,
121
+ EXEMPLARY, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THE SOFTWARE.
122
+
123
+ Company's total liability shall not exceed the amounts paid by Licensee in
124
+ the twelve (12) months preceding the claim.
125
+
126
+ 9. TERMINATION
127
+ --------------
128
+ This Agreement terminates automatically if Licensee fails to comply with its
129
+ terms. Upon termination, Licensee must cease all use and destroy all copies
130
+ of the Software.
131
+
132
+ 10. GOVERNING LAW
133
+ -----------------
134
+ This Agreement shall be governed by the laws of the State of Delaware, USA.
135
+
136
+ ================================================================================
137
+ CONTACT INFORMATION
138
+ ================================================================================
139
+
140
+ DBMigrate Inc.
141
+ Email: legal@dbmigrate.io
142
+ Sales: sales@dbmigrate.io
143
+ Support: support@dbmigrate.io
144
+
145
+ Website: https://dbmigrate.io
146
+ Documentation: https://docs.dbmigrate.io
147
+
148
+ ================================================================================
149
+
150
+ By installing or using the Software, you acknowledge that you have read this
151
+ Agreement, understand it, and agree to be bound by its terms.