DBD-D1
view release on metacpan or search on metacpan
},
"configure" : {
"requires" : {
"ExtUtils::MakeMaker" : "0"
}
},
"runtime" : {
"requires" : {
"DBI" : "1.640",
"HTTP::Tiny" : "0.070",
"IO::Socket::SSL" : "1.42",
"JSON::PP" : "2.97",
"Net::SSLeay" : "1.49",
"perl" : "5.014"
}
}
},
"release_status" : "stable",
"resources" : {
"bugtracker" : {
"web" : "https://github.com/amzt/DBD-D1/issues"
url: http://module-build.sourceforge.net/META-spec-v1.4.html
version: '1.4'
name: DBD-D1
no_index:
directory:
- t
- inc
requires:
DBI: '1.640'
HTTP::Tiny: '0.070'
IO::Socket::SSL: '1.42'
JSON::PP: '2.97'
Net::SSLeay: '1.49'
perl: '5.014'
resources:
bugtracker: https://github.com/amzt/DBD-D1/issues
repository: https://github.com/amzt/DBD-D1.git
version: '0.02'
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
Makefile.PL view on Meta::CPAN
NAME => 'DBD::D1',
AUTHOR => 'Aldo Montes Zapata <amontes@cpan.org>',
VERSION_FROM => 'lib/DBD/D1.pm',
ABSTRACT_FROM => 'lib/DBD/D1.pm',
LICENSE => 'perl_5',
MIN_PERL_VERSION => '5.014',
PREREQ_PM => {
'DBI' => '1.640',
'HTTP::Tiny' => '0.070',
'JSON::PP' => '2.97',
'IO::Socket::SSL' => '1.42',
'Net::SSLeay' => '1.49',
},
BUILD_REQUIRES => { 'Test::More' => '0.98' },
dist => { COMPRESS => 'gzip -9f', SUFFIX => 'gz' },
clean => { FILES => 'DBD-D1-*' },
META_MERGE => {
'meta-spec' => { version => 2 },
resources => {
repository => {
type => 'git',
while (my $row = $sth->fetchrow_hashref) {
print "$row->{name}\n";
}
$dbh->disconnect;
```
## Requirements
```
cpanm DBI IO::Socket::SSL Net::SSLeay
```
HTTP::Tiny and JSON::PP ship with Perl 5.14+.
## Installation
```bash
perl Makefile.PL && make && make test && make install
```
lib/DBD/D1.pm view on Meta::CPAN
my $json = JSON::PP->new->utf8->allow_nonref;
sub _ssl_available { HTTP::Tiny->can_ssl ? 1 : 0 }
# Returns ($result_arrayref, undef) on success or (undef, $error_string) on failure.
sub query {
my ($account_id, $database_id, $api_token, $sql, $params) = @_;
unless (_ssl_available()) {
return (undef,
'DBD::D1 requires HTTPS. Install IO::Socket::SSL and Net::SSLeay: '
. 'cpanm IO::Socket::SSL Net::SSLeay');
}
my $url = sprintf(
'https://api.cloudflare.com/client/v4/accounts/%s/d1/database/%s/query',
$account_id, $database_id,
);
my $body = $json->encode({
sql => $sql,
params => ($params && @$params) ? $params : [],
lib/DBD/D1.pm view on Meta::CPAN
my $data;
if ($res->{content}) {
$data = eval { $json->decode($res->{content}) };
}
unless ($res->{success}) {
my $detail = $res->{content} // '';
if ($res->{status} == 599 && $detail =~ /ssl|IO::Socket/i) {
return (undef,
'HTTPS failed (status 599). '
. 'Install IO::Socket::SSL and Net::SSLeay: '
. 'cpanm IO::Socket::SSL Net::SSLeay');
}
# If we have JSON error details, use those
if ($data && ref $data eq 'HASH') {
if (!$data->{success}) {
my $errs = $data->{errors} // [];
if (@$errs) {
my $msg = $errs->[0]{message} // 'Unknown D1 API error';
return (undef, $msg);
}
lib/DBD/D1.pm view on Meta::CPAN
=item * B<AutoCommit only> â D1 REST has no multi-statement transaction support.
=item * B<Column ordering> â rows arrive as JSON objects; column order follows
C<sort> on key names. Use C<fetchrow_hashref> for reliable named access.
=back
=head1 DEPENDENCIES
L<DBI>, L<HTTP::Tiny>, L<JSON::PP>, L<IO::Socket::SSL>, L<Net::SSLeay>
=head1 AUTHOR
Aldo Montes Zapata, C<< <amontes@cpan.org> >>
=head1 COPYRIGHT (c)
Copyright 2026 by Aldo Montes Zapata C<< <amontes@cpan.org> >>.
=head1 LICENSE
t/02-live.t view on Meta::CPAN
use Test::More;
unless ($ENV{CF_ACCOUNT_ID} && $ENV{CF_D1_DATABASE_ID} && $ENV{CF_API_TOKEN}) {
plan skip_all =>
'Live tests skipped: set CF_ACCOUNT_ID, CF_D1_DATABASE_ID, CF_API_TOKEN to enable';
}
eval { require DBI; require DBD::D1 };
plan skip_all => "DBI or DBD::D1 not available: $@" if $@;
eval { require IO::Socket::SSL; require Net::SSLeay };
if ($@) {
plan skip_all =>
'Live tests skipped: install IO::Socket::SSL and Net::SSLeay first';
}
unless (HTTP::Tiny->can_ssl) {
plan skip_all => 'Live tests skipped: HTTP::Tiny reports SSL unavailable';
}
plan tests => 10;
my $dbh = DBI->connect(
"dbi:D1:account_id=$ENV{CF_ACCOUNT_ID};database_id=$ENV{CF_D1_DATABASE_ID}",
( run in 1.470 second using v1.01-cache-2.11-cpan-6aa56a78535 )