Extract from MysqlQueryBuilder to build an ISO/IEC 9075:2023 compatible layer for a basic SQL QueryBuilder abstract class SqlQueryBuilder implements QueryBuilderInterface { protected string $rendered; protected string $hash; public function push(QueryFragmentInterface $queryFragment): QueryBuilderInterface { // TODO: Implement push() method. } public function pull(QueryFragmentInterface $queryFragment): QueryBuilderInterface { // TODO: Implement pull() method. } public function render(bool $skipToken = false) : mixed { // TODO: Implement render() method. } public function reset(): void { // TODO: Implement reset() method. } public function getFragment(string $class, int $index = 0): ?QueryFragmentInterface { // TODO: Implement getFragment() method. } public function removeFragment(QueryFragmentInterface|\Stringable|array|string $fragment): void { // TODO: Implement removeFragment() method. } public function hashSerializedQuery(): string { return $this->hash ??= md5(sprintf("%s:%s", $this->render(), serialize($this->parameters))); } }