public function findBy(string $schema, string $typeName, array $criteria = []) : array
{
$builder = $this->connection->createQueryBuilder();
$builder->select('*');
$builder->from($this->tableName($schema, $typeName));
$builder->setMaxResults(1);
foreach ($criteria as $field => $value) {
$builder->andWhere(sprintf('%1$s = :%1$s', $field));
$builder->setParameter($field, $value);
}
return $builder->execute()->fetch(\PDO::FETCH_ASSOC) ?: [];
}