# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors # License: MIT. See LICENSE # Database Module # -------------------- from shutil import which from frappe.database.database import savepoint def setup_database(force, verbose=None, no_mariadb_socket=False): import frappe if frappe.conf.db_type == "postgres": import frappe.database.postgres.setup_db return frappe.database.postgres.setup_db.setup_database() else: import frappe.database.mariadb.setup_db return frappe.database.mariadb.setup_db.setup_database( force, verbose, no_mariadb_socket=no_mariadb_socket ) def bootstrap_database(verbose=None, source_sql=None): import frappe if frappe.conf.db_type == "postgres": import frappe.database.postgres.setup_db return frappe.database.postgres.setup_db.bootstrap_database(verbose, source_sql) else: import frappe.database.mariadb.setup_db return frappe.database.mariadb.setup_db.bootstrap_database(verbose, source_sql) def drop_user_and_database(db_name, db_user): import frappe if frappe.conf.db_type == "postgres": import frappe.database.postgres.setup_db return frappe.database.postgres.setup_db.drop_user_and_database(db_name, db_user) else: import frappe.database.mariadb.setup_db return frappe.database.mariadb.setup_db.drop_user_and_database(db_name, db_user) def get_db(host=None, user=None, password=None, port=None, cur_db_name=None): import frappe if frappe.conf.db_type == "postgres": import frappe.database.postgres.database return frappe.database.postgres.database.PostgresDatabase( host, user, password, port, cur_db_name ) else: import frappe.database.mariadb.database return frappe.database.mariadb.database.MariaDBDatabase(host, user, password, port, cur_db_name) def get_command( host=None, port=None, user=None, password=None, db_name=None, extra=None, dump=False ): import frappe if frappe.conf.db_type == "postgres": if dump: bin, bin_name = which("pg_dump"), "pg_dump" else: bin, bin_name = which("psql"), "psql" if password: conn_string = f"postgresql://{user}:{password}@{host}:{port}/{db_name}" else: conn_string = f"postgresql://{user}@{host}:{port}/{db_name}" command = [conn_string] if extra: command.extend(extra) else: if dump: bin, bin_name = which("mariadb-dump") or which("mysqldump"), "mariadb-dump" else: bin, bin_name = which("mariadb") or which("mysql"), "mariadb" command = [ f"--user={user}", f"--host={host}", f"--port={port}", ] if password: command.append(f"--password={password}") if dump: command.extend( [ "--single-transaction", "--quick", "--lock-tables=false", ] ) else: command.extend( [ "--pager=less -SFX", "--safe-updates", "--no-auto-rehash", ] ) command.append(db_name) if extra: command.extend(extra) return bin, command, bin_name