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 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>, 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()) }