"""
This module contains various database connection parameters and database engines.
"""

sqlalchemy_database_engines = {
    'MySQL': 'mysql+pymysql',
    'PostgreSQL': 'postgresql+psycopg2',
    'SQLite': 'sqlite',
    'Oracle': 'oracle+cx_oracle',
    'Microsoft SQL Server': 'mssql+pymssql',
    'Firebird': 'firebird',
    'Sybase': 'sybase',
    'Informix': 'informix',
    'Microsoft Access': 'access',
    'IBM DB2': 'ibm_db_sa',
    'Drizzle': 'drizzle',
    'SQL Anywhere': 'sqlany',
    'SAP HANA': 'hana',
    'MaxDB': 'maxdb',
    'SAP DB': 'sapdb',
    'HSQLDB': 'hsqldb',
    'SQLCipher': 'sqlcipher',
    'Teradata': 'teradata',
    'Presto': 'presto',
    'Snowflake': 'snowflake',
    'Amazon Redshift': 'redshift',
    'CockroachDB': 'cockroachdb',
    'MonetDB': 'monetdb',
    'Vertica': 'vertica',
    'Cubrid': 'cubrid',
    'Crate': 'crate',
    'Altibase': 'altibase',
    'OmniSci': 'omnisci',
    'ClickHouse': 'clickhouse',
    'MongoDB': 'mongo',
    'Amazon DocumentDB': 'documentdb',
    'DynamoDB': 'dynamodb',
    'Google Cloud Spanner': 'google',
    'Amazon Timestream': 'timestream',
    'Trino': 'trino',
    'Google BigQuery': 'bigquery',
    'MariaDB': 'mysql',
    'Exasol': 'exasol',
    'Netezza': 'netezza',
    'Greenplum': 'greenplum',
    'Kdb+': 'kdb+',
    'Solr': 'solr',
    'Nexus': 'nexus',
    'Cassandra': 'cassandra',
    'OpenTSDB': 'opentsdb',
    'Azure Cosmos DB': 'cosmosdb',
    'Google Bigtable': 'bigtable',
    'Apache HBase': 'hbase',
    'Apache Accumulo': 'accumulo',
    'MemSQL': 'memsql',
    'Amazon Athena': 'athena',
    'Amazon S3': 's3',
    'AWS Glue': 'glue',
    'Elasticsearch': 'elasticsearch',
    'Azure Data Explorer (Kusto)': 'kusto',
    'Google Firebase': 'firebase',
    'Microsoft Azure Cosmos DB': 'cosmosdb',
    'Apache Hadoop HDFS': 'hdfs',
    'Microsoft Azure Data Lake Storage': 'adl',
    'Apache Phoenix': 'phoenix',
    'Apache Ignite': 'ignite',
    'Apache Geode': 'geode',
    'GridGain': 'gridgain',
    'Google Firestore': 'firestore',
    'MongoDB Atlas': 'atlas',
    'Google Cloud Datastore': 'datastore'
}

jdbc_database_jars = {
    'MySQL': 'com.mysql:mysql-connector-j:9.1.0',
    'PostgreSQL': 'org.postgresql:postgresql:42.2.6',
    'SQLite': 'org.xerial:sqlite-jdbc:3.34.0',
    'Oracle': 'com.oracle.database.jdbc:ojdbc8:19.8.0.0',
    'Microsoft SQL Server': 'com.microsoft.sqlserver:mssql-jdbc:9.4.0.jre11',
    'Firebird': 'org.firebirdsql.jdbc:jaybird-jdk18:3.0.11',
    'Sybase': 'com.sybase.jdbc4:jconn4:7.07',
    'Informix': 'com.ibm.informix:jdbc:4.50.4.0',
    'Microsoft Access': 'net.ucanaccess:ucanaccess:5.0.0',
    'IBM DB2': 'com.ibm.db2:jcc:11.5.0.0',
    'Drizzle': 'org.drizzle.jdbc:drizzle-jdbc:1.3',
    'SQL Anywhere': 'sap.com.sybase.sqlanywhere:SAPSQLAnywhere:16.0.0.2798',
    'SAP HANA': 'com.sap.db.jdbc:sapdbc:10.0.23',
    'MaxDB': 'com.sap.db.jdbc:ngdbc:7.7.09',
    'SAP DB': 'com.sap.db.jdbc:ngdbc:7.7.09',
    'HSQLDB': 'org.hsqldb:hsqldb:2.5.2',
    'SQLCipher': 'net.zetetic:android-database-sqlcipher:4.4.0',
    'Teradata': 'com.teradata.jdbc:teradata-driver:17.10.0.10',
    'Presto': 'com.facebook.presto:presto-jdbc:0.257',
    'Snowflake': 'net.snowflake:snowflake-jdbc:3.23.2',
    'Amazon Redshift': 'com.amazon.redshift:redshift-jdbc42-no-awssdk:1.2.54.1059',
    'CockroachDB': 'org.postgresql:postgresql:42.2.23.jre7',
    'MonetDB': 'nl.cwi.monetdb:monetdb-jdbc:2.42.1',
    'Vertica': 'com.vertica.jdbc:vertica-jdbc:10.1.1',
    'Cubrid': 'cubrid.jdbc:cubrid-jdbc:10.2.2.1007',
    'Crate': 'io.crate:crate-jdbc:4.6.2',
    'Altibase': 'Altibase:Altibase-jdbc:7.1.0',
    'OmniSci': 'com.omnisci.jdbc:omnisci-jdbc:5.8.1',
    'ClickHouse': 'ru.yandex.clickhouse:clickhouse-jdbc:0.3.0',
    'MongoDB': 'org.mongodb:mongodb-driver-sync:4.4.2',
    'Amazon DocumentDB': 'org.mongodb:mongodb-driver-sync:4.4.2',
    'DynamoDB': 'software.amazon.awssdk:ddb-local:1.17.0',
    'Google Cloud Spanner': 'com.google.cloud:google-cloud-spanner:2.8.0',
    'Amazon Timestream': 'com.amazonaws:aws-java-sdk-timestreamquery:1.12.95',
    'Trino': 'io.trino:trino-jdbc:363',
    'Google BigQuery': 'com.google.cloud:google-cloud-bigquery:2.1.1',
    'MariaDB': 'org.mariadb.jdbc:mariadb-java-client:2.7.3',
    'Exasol': 'com.exasol:exasol-jdbc:7.1.0',
    'Netezza': 'org.netezza:nzjdbc:7.2.0.6',
    'Greenplum': 'org.postgresql:postgresql:42.2.23.jre7',
    'Kdb+': 'com.kx:jdbc:3.1.8',
    'Solr': 'com.lucidworks.spark:lucidworks-spark:3.2.0',
    'Nexus': 'org.sonatype.nexus:nexus-core:3.30.0',
    'Cassandra': 'com.datastax.oss:java-driver-core:4.11.0',
    'OpenTSDB': 'net.opentsdb:opentsdb:2.5.2',
    'Azure Cosmos DB': 'com.microsoft.azure:azure-cosmosdb-spark_3-1_2-12:4.2.0',
    'Google Bigtable': 'com.google.cloud.bigtable:bigtable-hbase-2.x-hadoop:1.16.0',
    'Apache HBase': 'org.apache.hbase:hbase-client:2.4.8',
    'Apache Accumulo': 'org.apache.accumulo:accumulo-core:2.0.1',
    'MemSQL': 'com.memsql:memsql-connector:3.1.0',
    'Amazon Athena': 'software.amazon.athena.jdbc:athena-jdbc:2.2.0',
    'Amazon S3': 'org.apache.hadoop:hadoop-aws:3.3.2,com.amazonaws:aws-java-sdk-pom:1.12.365',
    'AWS Glue': 'software.amazon.awssdk:aws-glue-datacatalog-client:2.16.58',
    'Elasticsearch': 'org.elasticsearch.client:elasticsearch-rest-client:7.15.0',
    'Azure Data Explorer (Kusto)': 'com.microsoft.azure.kusto:kusto-ingest:2.2.3',
    'Google Firebase': 'com.google.firebase:firebase-admin:8.1.0',
    'Microsoft Azure Cosmos DB': 'com.microsoft.azure:azure-cosmosdb-spark_3-1_2-12:4.2.0',
    'Apache Hadoop HDFS': 'org.apache.hadoop:hadoop-hdfs:3.3.1',
    'Microsoft Azure Data Lake Storage': 'com.microsoft.azure:azure-storage:8.6.6',
    'Apache Phoenix': 'org.apache.phoenix:phoenix-core:5.5.4',
    'Apache Ignite': 'org.apache.ignite:ignite-core:2.11.0',
    'Apache Geode': 'org.apache.geode:geode-core:1.15.1',
    'GridGain': 'org.apache.ignite:ignite-core:2.11.0',
    'Google Firestore': 'com.google.firebase:firebase-admin:8.1.0',
    'MongoDB Atlas': 'org.mongodb:mongodb-driver-sync:4.4.2',
    'Google Cloud Datastore': 'com.google.cloud:google-cloud-datastore:2.4.0'
}

jdbc_connection_strings = {
    'MySQL': 'jdbc:mysql://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'PostgreSQL': 'jdbc:postgresql://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'SQLite': 'jdbc:sqlite:/path/to/database.db',
    'Oracle': 'jdbc:oracle:thin:@{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Microsoft SQL Server': 'jdbc:sqlserver://{HOSTNAME}:{PORT};databaseName={DATABASE};user={USERNAME};password={PASSWORD}',
    'Firebird': 'jdbc:firebirdsql://{HOSTNAME}/{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Sybase': 'jdbc:sybase:Tds:{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Informix': 'jdbc:informix-sqli://{HOSTNAME}:{PORT}/{DATABASE}:INFORMIXSERVER={server}?user={USERNAME}&password={PASSWORD}',
    'Microsoft Access': 'jdbc:ucanaccess://{path_to_database}',
    'IBM DB2': 'jdbc:db2://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Drizzle': 'jdbc:drizzle://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'SQL Anywhere': 'jdbc:sqlanywhere:{connection_string}',
    'SAP HANA': 'jdbc:sap://{HOSTNAME}:{PORT}?user={USERNAME}&password={PASSWORD}',
    'MaxDB': 'jdbc:sapdb://{HOSTNAME}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'HSQLDB': 'jdbc:hsqldb:file:{path_to_database}',
    'SQLCipher': 'jdbc:sqlite:/path/to/database.db',
    'Teradata': 'jdbc:teradata://{HOSTNAME}/DATABASE={DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Presto': 'jdbc:presto://{HOSTNAME}:{PORT}/hive/{catalog}',
    'Snowflake': 'jdbc:snowflake://{HOSTNAME}.snowflakecomputing.com/?warehouse={WAREHOUSE}&db={DATABASE}&schema={SCHEMA}&role={ROLE}&user={USERNAME}&password={PASSWORD}',
    'Amazon Redshift': 'jdbc:redshift://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'CockroachDB': 'jdbc:postgresql://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'MonetDB': 'jdbc:monetdb://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Vertica': 'jdbc:vertica://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Cubrid': 'jdbc:cubrid:thin:@{HOSTNAME}:{PORT}:{DATABASE}::?user={USERNAME}&password={PASSWORD}',
    'Crate': 'jdbc:crate://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Altibase': 'jdbc:Altibase://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'OmniSci': 'jdbc:omnisci:{HOSTNAME}:{PORT}:{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'ClickHouse': 'jdbc:clickhouse://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'MongoDB': 'mongodb://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}',
    'Amazon DocumentDB': 'mongodb://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}',
    'DynamoDB': 'jdbc:dynamodb://localHOSTNAME:8000/',
    'Google Cloud Spanner': 'jdbc:cloudspanner:/projects/{project_id}/instances/{instance_id}/databases/{DATABASE}',
    'Amazon Timestream': 'jdbc:timestream://{HOSTNAME}:{PORT}',
    'Trino': 'jdbc:trino://{HOSTNAME}:{PORT}/{catalog}/{schema}',
    'Google BigQuery': 'jdbc:bigquery://{project_id}',
    'MariaDB': 'jdbc:mariadb://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Exasol': 'jdbc:exa:{HOSTNAME}:{PORT};{key}={value}',
    'Netezza': 'jdbc:netezza://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Greenplum': 'jdbc:postgresql://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Kdb+': 'jdbc:q:{HOSTNAME}:{PORT}:{DATABASE}',
    'Solr': 'jdbc:solr://{HOSTNAME}:{PORT}/{collection}',
    'Nexus': 'jdbc:nexus://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Cassandra': 'jdbc:cassandra://{HOSTNAME}:{PORT}/{keyspace}?user={USERNAME}&password={PASSWORD}',
    'OpenTSDB': 'jdbc:opentsdb://{HOSTNAME}:{PORT}/{DATABASE}',
    'Azure Cosmos DB': 'jdbc:cosmosdb://{HOSTNAME}:{PORT};{key}={value}',
    'Google Bigtable': 'jdbc:bigtable://{project_id}',
    'Apache HBase': 'jdbc:hbase://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Apache Accumulo': 'jdbc:accumulo://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'MemSQL': 'jdbc:memsql://{HOSTNAME}:{PORT}/{DATABASE}?user={USERNAME}&password={PASSWORD}',
    'Amazon Athena': 'jdbc:awsathena://{HOSTNAME}:{PORT}/{schema}',
    'Amazon S3': 'jdbc:s3://{bucket}/{object}',
    'AWS Glue': 'jdbc:awsglue://{HOSTNAME}:{PORT}',
    'Elasticsearch': 'jdbc:elasticsearch://{HOSTNAME}:{PORT}/{index}',
    'Azure Data Explorer (Kusto)': 'jdbc:kusto://{cluster}:{PORT};DatabaseName={DATABASE};AppClientId={client_id};AppClientSecret={client_secret}',
    'Google Firebase': 'jdbc:firebase://{HOSTNAME}:{PORT}',
    'Microsoft Azure Cosmos DB': 'jdbc:cosmosdb://{HOSTNAME}:{PORT};{key}={value}',
    'Apache Hadoop HDFS': 'jdbc:hdfs://{HOSTNAME}:{PORT}/{path}',
    'Microsoft Azure Data Lake Storage': 'jdbc:adl://{account}.azuredatalakestore.net/{path}',
    'Apache Phoenix': 'jdbc:phoenix:{zookeeper_quorum}:{PORT}:{root_node}',
    'Apache Ignite': 'jdbc:ignite:thin://{HOSTNAME}:{PORT}',
    'Apache Geode': 'jdbc:geode://{HOSTNAME}:{PORT}',
    'GridGain': 'jdbc:ignite:thin://{HOSTNAME}:{PORT}',
    'Google Firestore': 'jdbc:googlefirestore://{project_id}/{DATABASE}',
    'MongoDB Atlas': 'mongodb+srv://{USERNAME}:{PASSWORD}@{cluster}/{DATABASE}',
    'Google Cloud Datastore': 'jdbc:datastore://{project_id}'
}

jdbc_engine_drivers = {
    "MySQL": "com.mysql.cj.jdbc.Driver",
    "PostgreSQL": "org.postgresql.Driver",
    "SQLite": "org.sqlite.JDBC",
    "Oracle": "oracle.jdbc.driver.OracleDriver",
    "Microsoft SQL Server": "com.microsoft.sqlserver.jdbc.SQLServerDriver",
    "Firebird": "org.firebirdsql.jdbc.FBDriver",
    "Sybase": "net.sourceforge.jtds.jdbc.Driver",
    "Informix": "com.informix.jdbc.IfxDriver",
    "Microsoft Access": "net.ucanaccess.jdbc.UcanaccessDriver",
    "IBM DB2": "com.ibm.db2.jcc.DB2Driver",
    "Drizzle": "org.drizzle.jdbc.DrizzleDriver",
    "SQL Anywhere": "sap.com.sybase.jdbc4.sqlanywhere.IDriver",
    "SAP HANA": "com.sap.db.jdbc.Driver",
    "MaxDB": "com.sap.db.jdbc.Driver",
    "SAP DB": "com.sap.db.jdbc.Driver",
    "HSQLDB": "org.hsqldb.jdbc.JDBCDriver",
    "SQLCipher": "org.sqlite.JDBC",
    "Teradata": "com.teradata.jdbc.TeraDriver",
    "Presto": "com.facebook.presto.jdbc.PrestoDriver",
    "Snowflake": "net.snowflake.client.jdbc.SnowflakeDriver",
    "Amazon Redshift": "com.amazon.redshift.jdbc.Driver",
    "CockroachDB": "org.postgresql.Driver",
    "MonetDB": "nl.cwi.monetdb.jdbc.MonetDriver",
    "Vertica": "com.vertica.jdbc.Driver",
    "Cubrid": "cubrid.jdbc.driver.CUBRIDDriver",
    "Crate": "io.crate.client.jdbc.CrateDriver",
    "Altibase": "Altibase.jdbc.driver.AltibaseDriver",
    "OmniSci": "com.mapd.thrift.jdbc.MapDDriver",
    "ClickHouse": "ru.yandex.clickhouse.ClickHouseDriver",
    "MongoDB": "mongodb.jdbc.MongoDriver",
    "Amazon DocumentDB": "com.mongodb.client.MongoDriver",
    "Google Cloud Spanner": "com.google.cloud.spanner.jdbc.JdbcDriver",
    "Amazon Timestream": "com.amazonaws.timestream.jdbc.TimestreamDriver",
    "Trino": "io.trino.jdbc.TrinoDriver",
    "Google BigQuery": "com.simba.googlebigquery.jdbc42.Driver",
    "MariaDB": "org.mariadb.jdbc.Driver",
    "Exasol": "com.exasol.jdbc.EXADriver",
    "Netezza": "org.netezza.Driver",
    "Greenplum": "org.postgresql.Driver",
    "Kdb+": "kx.KdbDriver",
    "Solr": "org.apache.solr.client.solrj.io.sql.DriverImpl",
    "Nexus": "Nexus.jdbc.Driver",
    "Cassandra": "com.datastax.oss.driver.api.core.CqlSessionBuilder",
    "OpenTSDB": "net.opentsdb.tsdb.jdbc.Driver",
    "Azure Cosmos DB": "com.microsoft.azure.cosmosdb.spark.DefaultSource",
    "Google Bigtable": "com.google.cloud.bigtable.hbase.BigtableDriver",
    "Apache HBase": "org.apache.hadoop.hbase.client.Driver",
    "Apache Accumulo": "org.apache.accumulo.core.client.mapred.AccumuloInputFormat",
    "MemSQL": "com.memsql.jdbc.MemSQLDriver",
    "Amazon Athena": "com.amazonaws.athena.jdbc.AthenaDriver",
    "Amazon S3": "com.amazonaws.services.s3.jdbc.S3Driver",
    "AWS Glue": "com.amazonaws.services.glue.jdbc.GlueDriver",
    "Elasticsearch": "org.elasticsearch.xpack.sql.jdbc.jdbc.JdbcDriver",
    "Azure Data Explorer (Kusto)": "com.microsoft.kusto.spark.KustoDriver",
    "Google Firebase": "com.google.firebase.firestore.FirestoreDataConverter",
    "Microsoft Azure Cosmos DB": "com.microsoft.azure.cosmosdb.jdbc.CosmosDBDriver",
    "Apache Hadoop HDFS": "org.apache.hadoop.hdfs.DistributedFileSystem",
    "Microsoft Azure Data Lake Storage": "com.microsoft.azure.datalake.store.ADLStoreClient",
    "Apache Phoenix": "org.apache.phoenix.jdbc.PhoenixDriver",
    "Apache Ignite": "org.apache.ignite.internal.jdbc2.JdbcDriver",
    "Apache Geode": "org.apache.geode.client.GeodeDriver",
    "GridGain": "org.gridgain.grid.jdbc.GridJdbcDriver",
    "Google Firestore": "com.google.firestore.v1.FirestoreGrpc",
    "MongoDB Atlas": "org.mongodb.spark.sql.DefaultSource",
    "Google Cloud Datastore": "com.google.cloud.datastore.Datastore",
    "DynamoDB": "com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper"
}
