61 lines
2.3 KiB
Kotlin
61 lines
2.3 KiB
Kotlin
package solutions.bitbadger.documents.query
|
|
|
|
import solutions.bitbadger.documents.Field
|
|
import solutions.bitbadger.documents.FieldMatch
|
|
import solutions.bitbadger.documents.query.byId as byIdBase
|
|
import solutions.bitbadger.documents.query.byFields as byFieldsBase
|
|
|
|
/**
|
|
* Functions to retrieve documents
|
|
*/
|
|
object Find {
|
|
|
|
/**
|
|
* Query to retrieve all documents from a table
|
|
*
|
|
* @param tableName The table from which documents should be retrieved (may include schema)
|
|
* @return A query to retrieve documents
|
|
*/
|
|
fun all(tableName: String) =
|
|
"SELECT data FROM $tableName"
|
|
|
|
/**
|
|
* Query to retrieve a document by its ID
|
|
*
|
|
* @param tableName The table from which documents should be retrieved (may include schema)
|
|
* @param docId The ID of the document (optional, used for type checking)
|
|
* @return A query to retrieve a document by its ID
|
|
*/
|
|
fun <TKey> byId(tableName: String, docId: TKey? = null) =
|
|
byIdBase(all(tableName), docId)
|
|
|
|
/**
|
|
* Query to retrieve documents matching the given fields
|
|
*
|
|
* @param tableName The table from which documents should be retrieved (may include schema)
|
|
* @param fields The field comparisons for matching documents to retrieve
|
|
* @param howMatched How fields should be compared (optional, defaults to ALL)
|
|
* @return A query to retrieve documents matching the given fields
|
|
*/
|
|
fun byFields(tableName: String, fields: Collection<Field<*>>, howMatched: FieldMatch? = null) =
|
|
byFieldsBase(all(tableName), fields, howMatched)
|
|
|
|
/**
|
|
* Query to retrieve documents via JSON containment (PostgreSQL only)
|
|
*
|
|
* @param tableName The table from which documents should be retrieved (may include schema)
|
|
* @return A query to retrieve documents via JSON containment
|
|
*/
|
|
fun byContains(tableName: String) =
|
|
statementWhere(all(tableName), Where.jsonContains())
|
|
|
|
/**
|
|
* Query to retrieve documents via a JSON path match (PostgreSQL only)
|
|
*
|
|
* @param tableName The table from which documents should be retrieved (may include schema)
|
|
* @return A query to retrieve documents via a JSON path match
|
|
*/
|
|
fun byJsonPath(tableName: String) =
|
|
statementWhere(all(tableName), Where.jsonPathMatches())
|
|
}
|