class SqlRecordRepository implements RecordRepositoryInterface (View source)

SQL-backend record repository.

Queries PowerDNS tables directly via PDO.

Methods

__construct(PDO $db, ConfigurationInterface $config)

No description

int
getZoneIdFromRecordId(int|string $rid)

Get Zone ID from Record ID

int
countZoneRecords(int $zone_id)

Count Zone Records for Zone ID

array
getRecordDetailsFromRecordId(int|string $rid)

Get record details from Record ID

array|null
getRecordFromId(int|string $id)

Get a Record from a Record ID

array
getRecordsFromDomainId(string $db_type, int $id, int $rowstart = 0, int $rowamount = Constants::DEFAULT_MAX_ROWS, string $sortby = 'name', string $sortDirection = 'ASC', bool $fetchComments = false)

Get all records from a domain id.

int
recidToDomid(int|string $id)

Record ID to Domain ID

bool
recordNameExists(string $name)

Check if record exists

bool
hasNonDelegationRecords(string $name)

Check if non-delegation records exist for a given name

bool
hasSimilarRecords(int $domain_id, string $name, string $type, int|string $record_id)

Check if record has similar records with same name and type

bool
recordExists(int $domain_id, string $name, string $type, string $content)

Check if a record with the given parameters already exists

int|string|null
getRecordId(int $domain_id, string $name, string $type, string $content, int|null $prio = null, int|null $ttl = null)

Get record ID by its attributes.

bool
hasPtrRecord(int $domain_id, string $name)

Check if any PTR record exists for a given reverse domain name

string
getSerialByZid(int $zid)

Get Serial for Zone ID

array
getSerialsByZoneIds(array $zoneIds)

Get serial numbers for multiple zones in a single query

array
getRecordsByDomainId(int $domainId, string|null $recordType = null)

Get records by domain ID

array
getRecordsByName(int $domainId, string $name, string|null $type = null)

Get the records at one name in a zone, optionally filtered by type.

array
getFilteredRecords(int $zone_id, int $row_start, int $row_amount, string $sort_by, string $sort_direction, bool $include_comments, string $search_term = '', string $type_filter = '', string $content_filter = '')

Get filtered records from a domain with search capabilities

int
getFilteredRecordCount(int $zone_id, bool $include_comments, string $search_term = '', string $type_filter = '', string $content_filter = '')

Get count of filtered records

int|string|null
getNewRecordId(int $domainId, string $name, string $type, string $content)

Get the ID of a newly created record

array|null
getRecordById(int|string $recordId)

Get a record by ID

array
getRRSetRecords(int $domainId, string $name, string $type)

Get all records in an RRset (matching domain, name, and type)

Details

__construct(PDO $db, ConfigurationInterface $config)

No description

Parameters

PDO $db
ConfigurationInterface $config

int getZoneIdFromRecordId(int|string $rid)

Get Zone ID from Record ID

Parameters

int|string $rid

Record ID

Return Value

int

Zone ID

int countZoneRecords(int $zone_id)

Count Zone Records for Zone ID

Parameters

int $zone_id

Zone ID

Return Value

int

Record count

array getRecordDetailsFromRecordId(int|string $rid)

Get record details from Record ID

Parameters

int|string $rid

Record ID (int for SQL mode, encoded string for API mode)

Return Value

array

array of record details [rid,zid,name,type,content,ttl,prio]

array|null getRecordFromId(int|string $id)

Get a Record from a Record ID

Retrieve all fields of the record and send it back to the function caller.

Parameters

int|string $id

Record ID (int for SQL mode, encoded string for API mode)

Return Value

array|null

array of record detail, or null if nothing found

array getRecordsFromDomainId(string $db_type, int $id, int $rowstart = 0, int $rowamount = Constants::DEFAULT_MAX_ROWS, string $sortby = 'name', string $sortDirection = 'ASC', bool $fetchComments = false)

Get all records from a domain id.

Retrieve all fields of the records and send it back to the function caller.

Parameters

string $db_type

Database type

int $id

Domain ID

int $rowstart

Starting row [default=0]

int $rowamount

Number of rows to return in this query [default=9999]

string $sortby

Column to sort by [default='name']

string $sortDirection

Sort direction [default='ASC']

bool $fetchComments

Whether to fetch record comments [default=false]

Return Value

array

array of record details (empty array if nothing found)

int recidToDomid(int|string $id)

Record ID to Domain ID

Gets the id of the domain by a given record id

Parameters

int|string $id

Record ID (int for SQL mode, encoded string for API mode)

Return Value

int

Domain ID of record

bool recordNameExists(string $name)

Check if record exists

Parameters

string $name

Record name

Return Value

bool

true on success, false on failure

bool hasNonDelegationRecords(string $name)

Check if non-delegation records exist for a given name

Per RFC 1034: Delegation NS records are NOT authoritative data. Per RFC 4034: DS records are part of the delegation for DNSSEC. This method checks for records other than NS/DS which indicate authoritative data. Only delegation records (NS, DS) at a name should not prevent zone creation.

Parameters

string $name

Record name

Return Value

bool

True if non-delegation records exist, false otherwise

bool hasSimilarRecords(int $domain_id, string $name, string $type, int|string $record_id)

Check if record has similar records with same name and type

Parameters

int $domain_id

Domain ID

string $name

Record name

string $type

Record type

int|string $record_id

Current record ID to exclude from check

Return Value

bool

True if similar records found, false otherwise

bool recordExists(int $domain_id, string $name, string $type, string $content)

Check if a record with the given parameters already exists

Parameters

int $domain_id

Domain ID

string $name

Record name

string $type

Record type

string $content

Record content

Return Value

bool

True if record exists, false otherwise

int|string|null getRecordId(int $domain_id, string $name, string $type, string $content, int|null $prio = null, int|null $ttl = null)

Get record ID by its attributes.

Parameters

int $domain_id

Domain ID

string $name

Record name

string $type

Record type

string $content

Record content

int|null $prio

Optional priority

int|null $ttl

Optional TTL

Return Value

int|string|null

Record ID or null if not found

bool hasPtrRecord(int $domain_id, string $name)

Check if any PTR record exists for a given reverse domain name

Parameters

int $domain_id

Domain ID

string $name

Reverse domain name (e.g., "1.1.168.192.in-addr.arpa")

Return Value

bool

True if any PTR record exists for this name

string getSerialByZid(int $zid)

Get Serial for Zone ID

Parameters

int $zid

Zone ID

Return Value

string

Serial Number or false if not found

array getSerialsByZoneIds(array $zoneIds)

Get serial numbers for multiple zones in a single query

Parameters

array $zoneIds

Array of zone IDs

Return Value

array

Array mapping zone ID to serial number

array getRecordsByDomainId(int $domainId, string|null $recordType = null)

Get records by domain ID

Parameters

int $domainId

Domain ID

string|null $recordType

Optional record type filter

Return Value

array

Array of records

array getRecordsByName(int $domainId, string $name, string|null $type = null)

Get the records at one name in a zone, optionally filtered by type.

Prefer this over getRecordsByDomainId() whenever only one name matters: in API backend mode the zone-wide call fetches every record in the zone. Names match case-insensitively, per RFC 4343.

Parameters

int $domainId

Domain ID

string $name

Record name, with or without a trailing dot

string|null $type

Optional record type filter

Return Value

array

Array of records

array getFilteredRecords(int $zone_id, int $row_start, int $row_amount, string $sort_by, string $sort_direction, bool $include_comments, string $search_term = '', string $type_filter = '', string $content_filter = '')

Get filtered records from a domain with search capabilities

Parameters

int $zone_id

The zone ID

int $row_start

Starting row for pagination

int $row_amount

Number of rows per page

string $sort_by

Column to sort by

string $sort_direction

Sort direction (ASC or DESC)

bool $include_comments

Whether to include comments

string $search_term

Optional search term to filter by name or content

string $type_filter

Optional record type filter

string $content_filter

Optional content filter

Return Value

array

Array of filtered records

int getFilteredRecordCount(int $zone_id, bool $include_comments, string $search_term = '', string $type_filter = '', string $content_filter = '')

Get count of filtered records

Parameters

int $zone_id

The zone ID

bool $include_comments

Whether to include comments in the search

string $search_term

Optional search term to filter by name or content

string $type_filter

Optional record type filter

string $content_filter

Optional content filter

Return Value

int

Number of filtered records

int|string|null getNewRecordId(int $domainId, string $name, string $type, string $content)

Get the ID of a newly created record

Parameters

int $domainId

Domain ID

string $name

Record name

string $type

Record type

string $content

Record content

Return Value

int|string|null

Record ID or null if not found

array|null getRecordById(int|string $recordId)

Get a record by ID

Parameters

int|string $recordId

Record ID (int for SQL mode, encoded string for API mode)

Return Value

array|null

Record data if found, null otherwise

array getRRSetRecords(int $domainId, string $name, string $type)

Get all records in an RRset (matching domain, name, and type)

Parameters

int $domainId

The domain/zone ID

string $name

The record name

string $type

Record type (A, AAAA, CNAME, etc.)

Return Value

array

Array of matching records