DB-Handy

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

      SQL standard NULL semantics (result is UNKNOWN for every row when
      the list contains NULL and the value is not found among non-NULL
      elements).  Previously, NULL values in the list were silently
      ignored and rows were returned as if NULL were absent.  Fixed in
      all four evaluation paths: compile_tree, eval_expr (where_sub
      closure), join_select, and compile_where_from_conds (subquery).
    - Fix: col NOT IN (SELECT ... FROM empty_table) now correctly
      returns all rows.  Previously the empty subquery was substituted
      as (NULL), which after the NULL-semantics fix would have produced
      0 rows instead of all rows.
    - Updated: BUGS AND LIMITATIONS and README revised to document the
      corrected NOT IN NULL behaviour.
    - Updated: t/1015_new_features.t ok9 now asserts 0 rows for
      NOT IN with NULL in the value list.
    - Added: t/0004-perl5compat.t -- dedicated Perl 5.005_03 compatibility
      checker with 12 tests per .pm file: no 'our', no say/given/state,
      no my(undef), no defined-or // (with split// exempt), no //=,
      no yada-yada, no 'when', no \o{}, no wide \x{}, $VERSION
      self-assignment, warnings stub, CVE-2016-1238 mitigation.
    - Changed: test file execution order revised so that source-level
      checks run before functional tests:

Changes  view on Meta::CPAN

      (SQL semantics: the result is UNKNOWN for every row).
    - New: last_insert_id() now accepts the four DBI positional arguments
      ($catalog, $schema, $table, $field) and ignores them, making the
      call signature compatible with DBI.
    - New: connect() now accepts a dbi:Handy:key=val;... DSN prefix in
      addition to a plain directory path or bare key=val string.
    - New: INSERT INTO dst (...) SELECT ... FROM src now maps columns by
      name when every destination column name exists in the SELECT result
      row; falls back to positional order when column names differ.
    - Added: t/1015_new_features.t (68 tests) covering all four features.
    - Updated: POD, README, and BUGS AND LIMITATIONS revised to reflect
      the new behaviour; stale limitations removed.

1.05  2026-03-21 JST (Japan Standard Time)

    - New: SELECT * now presents columns in CREATE TABLE declaration order
      (previously alphabetical).  For SELECT * with JOIN, columns follow
      table appearance order (FROM first, then each JOIN), each table's
      columns in declaration order, as 'alias.col' qualified names.
      Named SELECT lists (SELECT a, b) continue to follow the SELECT order.
    - New: INSERT INTO table VALUES (...) without a column list is now

lib/DB/Handy.pm  view on Meta::CPAN

=item * L</INDEXES>

=item * L</FILE LAYOUT>

=item * L</EXAMPLES> -- Practical usage patterns

=item * L</DIFFERENCES FROM DBI> -- Detailed incompatibility list

=item * L</DIAGNOSTICS> -- Error messages

=item * L</BUGS AND LIMITATIONS>

=item * L</SEE ALSO>

=back

=head1 DESCRIPTION

DB::Handy is a self-contained, pure-Perl relational database engine that
stores data in fixed-length binary flat files.  It requires B<no external
database server, no C compiler, and no XS modules>.

lib/DB/Handy.pm  view on Meta::CPAN

The low-level C<connect> call failed.  C<$DB::Handy::errstr> contains
the underlying error set by the failing operation.

=item C<DB::Handy: E<lt>messageE<gt>>

A fatal internal error was raised directly via C<die>.
C<RaiseError> must be enabled (the default) for this message to propagate.

=back

=head1 BUGS AND LIMITATIONS

Please report any bugs or feature requests by e-mail to
E<lt>ina@cpan.orgE<gt>.

When reporting a bug, please include:

=over 4

=item *

t/lib/INA_CPAN_Check.pm  view on Meta::CPAN

    my $pm_ver = _pm_version("$root/$pm_files[0]") if @pm_files;
    my $j1 = 1;
    if ($meta_yml =~ /^requires:(.*?)(?=^\S)/ms) {
        my $block = $1;
        while ($block =~ /:\s*([\d._]+)/g) {
            if (defined $pm_ver && $1 eq $pm_ver) { $j1 = 0; last }
        }
    }
    ok($j1, 'J - PREREQ_PM: no core dep version equals module VERSION');

    # J2: BUGS AND LIMITATIONS has no stale entries
    my @stale = exists $opt{j2_stale} ? @{$opt{j2_stale}} : ();
    my $bugs_text = '';
    if (@pm_files) {
        my $pm_text = _slurp("$root/$pm_files[0]");
        if ($pm_text =~ /=head1 BUGS AND LIMITATIONS(.*?)^=head1/ms) {
            $bugs_text = $1;
        }
    }
    my $j2 = 1;
    for my $entry (@stale) {
        if (index($bugs_text, $entry) >= 0) { $j2 = 0; last }
    }
    ok($j2, 'J - BUGS AND LIMITATIONS: no stale removed-feature entries');

    # J3+J4: test file plan vs ok-comment count
    for my $tf (@t_files) {
        my @lines = _slurp_lines("$root/$tf");
        my @ok_comments;
        my $plan = undef;
        for my $line (@lines) {
            $line =~ s/\r?\n$//;
            push @ok_comments, $1 if $line =~ /^#\s+ok\s+(\d+)\b/;
            $plan = $1 if !defined $plan && $line =~ /^1\.\.(\d+)$/;



( run in 1.935 second using v1.01-cache-2.11-cpan-39bf76dae61 )