84 lines
3.2 KiB
Kotlin
84 lines
3.2 KiB
Kotlin
package solutions.bitbadger.documents.java
|
|
|
|
import solutions.bitbadger.documents.common.Configuration
|
|
import solutions.bitbadger.documents.common.DocumentException
|
|
import solutions.bitbadger.documents.common.DocumentIndex
|
|
import solutions.bitbadger.documents.common.query.Definition
|
|
import java.sql.Connection
|
|
|
|
/**
|
|
* 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
|
|
*/
|
|
@JvmStatic
|
|
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)
|
|
*/
|
|
@JvmStatic
|
|
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
|
|
*/
|
|
@JvmStatic
|
|
fun ensureFieldIndex(tableName: String, indexName: String, fields: Collection<String>, 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
|
|
*/
|
|
@JvmStatic
|
|
fun ensureFieldIndex(tableName: String, indexName: String, fields: Collection<String>) =
|
|
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
|
|
*/
|
|
@Throws(DocumentException::class)
|
|
@JvmStatic
|
|
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
|
|
*/
|
|
@Throws(DocumentException::class)
|
|
@JvmStatic
|
|
fun ensureDocumentIndex(tableName: String, indexType: DocumentIndex) =
|
|
Configuration.dbConn().use { ensureDocumentIndex(tableName, indexType, it) }
|
|
}
|