* @license MIT */ declare(strict_types=1); namespace BitBadger\PDODocument; /** * Functions to remove fields from documents */ class RemoveFields { /** * Remove fields from a document by the document's ID * * @param string $tableName The table in which the document should have fields removed * @param mixed $docId The ID of the document from which fields should be removed * @param string[] $fieldNames The names of the fields to be removed * @throws DocumentException If any is encountered */ public static function byId(string $tableName, mixed $docId, array $fieldNames): void { $nameParams = Parameters::fieldNames(':name', $fieldNames); Custom::nonQuery(Query\RemoveFields::byId($tableName, $nameParams, $docId), array_merge(Parameters::id($docId), $nameParams)); } /** * Remove fields from documents via a comparison on a JSON field in the document * * @param string $tableName The table in which documents should have fields removed * @param Field[] $fields The field comparison to match * @param string[] $fieldNames The names of the fields to be removed * @param FieldMatch|null $match How to handle multiple conditions (optional; defaults to All) * @throws DocumentException If any is encountered */ public static function byFields(string $tableName, array $fields, array $fieldNames, ?FieldMatch $match = null): void { $nameParams = Parameters::fieldNames(':name', $fieldNames); $namedFields = Parameters::nameFields($fields); Custom::nonQuery(Query\RemoveFields::byFields($tableName, $namedFields, $nameParams, $match), Parameters::addFields($namedFields, $nameParams)); } /** * Remove fields from documents via a JSON containment query (`@>`; PostgreSQL only) * * @param string $tableName The table in which documents should have fields removed * @param mixed[]|object $criteria The JSON containment query values * @param string[] $fieldNames The names of the fields to be removed * @throws DocumentException If the database mode is not PostgreSQL, or if an error occurs */ public static function byContains(string $tableName, array|object $criteria, array $fieldNames): void { $nameParams = Parameters::fieldNames(':name', $fieldNames); Custom::nonQuery(Query\RemoveFields::byContains($tableName, $nameParams), array_merge(Parameters::json(':criteria', $criteria), $nameParams)); } /** * Remove fields from documents via a JSON Path match query (`@?`; PostgreSQL only) * * @param string $tableName The table in which documents should have fields removed * @param string $path The JSON Path match string * @param string[] $fieldNames The names of the fields to be removed * @throws DocumentException If the database mode is not PostgreSQL, or if an error occurs */ public static function byJsonPath(string $tableName, string $path, array $fieldNames): void { $nameParams = Parameters::fieldNames(':name', $fieldNames); Custom::nonQuery(Query\RemoveFields::byJsonPath($tableName, $nameParams), array_merge([':path' => $path], $nameParams)); } }