package solutions.bitbadger.documents import java.sql.Connection import solutions.bitbadger.documents.query.Definition /** * Functions to define tables and indexes */ object Definition { /** * Create a document table if necessary * * @param tableName The table whose existence should be ensured (may include schema) * @param conn The connection on which the query should be executed */ fun ensureTable(tableName: String, conn: Connection) = Configuration.dialect("ensure $tableName exists").let { conn.customNonQuery(Definition.ensureTable(tableName, it)) conn.customNonQuery(Definition.ensureKey(tableName, it)) } /** * Create a document table if necessary * * @param tableName The table whose existence should be ensured (may include schema) */ fun ensureTable(tableName: String) = Configuration.dbConn().use { ensureTable(tableName, it) } /** * Create an index on field(s) within documents in the specified table if necessary * * @param tableName The table to be indexed (may include schema) * @param indexName The name of the index to create * @param fields One or more fields to be indexed< * @param conn The connection on which the query should be executed */ fun ensureFieldIndex(tableName: String, indexName: String, fields: Collection, conn: Connection) = conn.customNonQuery(Definition.ensureIndexOn(tableName, indexName, fields)) /** * Create an index on field(s) within documents in the specified table if necessary * * @param tableName The table to be indexed (may include schema) * @param indexName The name of the index to create * @param fields One or more fields to be indexed< */ fun ensureFieldIndex(tableName: String, indexName: String, fields: Collection) = Configuration.dbConn().use { ensureFieldIndex(tableName, indexName, fields, it) } /** * Create a document index on a table (PostgreSQL only) * * @param tableName The table to be indexed (may include schema) * @param indexType The type of index to ensure * @param conn The connection on which the query should be executed * @throws DocumentException If called on a SQLite connection */ fun ensureDocumentIndex(tableName: String, indexType: DocumentIndex, conn: Connection) = conn.customNonQuery(Definition.ensureDocumentIndexOn(tableName, indexType)) /** * Create a document index on a table (PostgreSQL only) * * @param tableName The table to be indexed (may include schema) * @param indexType The type of index to ensure * @throws DocumentException If called on a SQLite connection */ fun ensureDocumentIndex(tableName: String, indexType: DocumentIndex) = Configuration.dbConn().use { ensureDocumentIndex(tableName, indexType, it) } }