#!/usr/bin/perl -w use strict; use Test::More; use Data::Dumper; use DBI; my $have_sqlite = eval 'require DBD::SQLite; $DBD::SQLite::VERSION >= 1.14 or die "DBD::SQLite::VERSION is $DBD::SQLite::VERSION, we need 1.14+"; 1'; if (! $have_sqlite) { plan skip_all => "DBD::SQLite not installed ($@)"; exit 0; }; # Monkeypatching! unless ( defined &DBD::SQLite::db::column_info ) { require 't/dbd-sqlite-column-info.pm'; *DBD::SQLite::db::column_info = \&_sqlite_column_info; } plan tests => 4; use_ok 'DBIx::DataAudit'; # DBI->installed_versions; my $dbh = DBI->connect('dbi:SQLite:dbname=:memory:', undef, undef); $/ = ";\n"; while () { chomp; next unless /\S/; # SQLite ... #diag $_; $dbh->do($_); }; my $result = DBIx::DataAudit->audit(dbh => $dbh, table => 'test'); isa_ok $result, 'DBIx::DataAudit'; my $info = $result->template_data; is_deeply $info, { table => 'test', headings => [qw[column min max count values null avg blank empty missing ]], rows => [ ['c_bigint', '1', '10', '3', '2', '0', '7', 'n/a', 'n/a', 'n/a' ], ['c_boolean', 'n/a', 'n/a', '3', '2', '0', 'n/a', 'n/a', 'n/a', 'n/a' ], ['c_char', 'A', 'Z', '3', '2', '0', 'n/a', '0', '0', '0' ], ['c_character_varying', 'A', 'Z', '3', '2', '0', 'n/a', '0', '0', '0' ], ['c_datetime', '2008-01-01 00:00:01', '2008-04-01 00:10:01', '3', '2', '0', 'n/a', 'n/a', 'n/a', 'n/a' ], ['c_date', '2008-01-01', '2008-04-01', '3', '2', '0', 'n/a', 'n/a', 'n/a', 'n/a' ], ['c_decimal', '1', '10', '3', '2', '0', '7', 'n/a', 'n/a', 'n/a' ], ['c_inet', 'n/a', 'n/a', '3', '2', '0', 'n/a', 'n/a', 'n/a', 'n/a' ], ['c_integer', '1', '10', '3', '2', '0', '7', 'n/a', 'n/a', 'n/a' ], ['c_int', '1', '10', '3', '2', '0', '7', 'n/a', 'n/a', 'n/a' ], ['c_smallint', '1', '10', '3', '2', '0', '7', 'n/a', 'n/a', 'n/a' ], ['c_text', 'A', 'Z', '3', '2', '0', 'n/a', '0', '0', '0' ], ['c_time', '00:00:01', '00:10:01', '3', '2', '0', 'n/a', 'n/a', 'n/a', 'n/a' ], ['c_timestamp', '2008-01-01 00:00:01', '2008-04-01 00:10:01', '3', '2', '0', 'n/a', 'n/a', 'n/a', 'n/a' ], ['c_tinyint', '1', '10', '3', '2', '0', '7', 'n/a', 'n/a', 'n/a' ], ['c_varchar', 'A', 'Z', '3', '2', '0', 'n/a', '0', '0', '0' ] ] }, 'Expected information retrieved' or diag Dumper $info; my $info2 = $result->template_data; is_deeply $info, $info2, 'Analytics are idempotent'; # diag $result->as_text(); __DATA__ create table test ( c_bigint BIGINT, c_boolean BOOLEAN, c_char CHAR, c_character_varying CHARACTER VARYING, c_datetime DATETIME, c_date DATE, c_decimal DECIMAL(12,2), -- ENUM c_inet INET, c_integer INTEGER, c_int INT, c_smallint SMALLINT, c_text TEXT, c_time TIME, -- 'TIMESTAMP WITHOUT TIME ZONE' , c_timestamp TIMESTAMP, c_tinyint TINYINT, c_varchar VARCHAR(64) ); -- minima INSERT INTO test (c_bigint,c_boolean,c_char,c_character_varying,c_datetime,c_date,c_decimal, c_inet, c_integer, c_int, c_smallint, c_text, c_time, c_timestamp, c_tinyint, c_varchar ) VALUES ( 1,1,'A','A','2008-01-01 00:00:01','2008-01-01',1.00, '192.168.0.1',1,1,1,'A','00:00:01','2008-01-01 00:00:01',1,'A' ); -- maxima INSERT INTO test (c_bigint,c_boolean,c_char,c_character_varying,c_datetime,c_date,c_decimal, c_inet, c_integer, c_int, c_smallint, c_text, c_time, c_timestamp, c_tinyint, c_varchar ) VALUES ( 10,10,'Z','Z','2008-04-01 00:10:01','2008-04-01',10.00, '192.168.0.254',10,10,10,'Z','00:10:01','2008-04-01 00:10:01',10,'Z' ); -- duplicate maxima INSERT INTO test (c_bigint,c_boolean,c_char,c_character_varying,c_datetime,c_date,c_decimal, c_inet, c_integer, c_int, c_smallint, c_text, c_time, c_timestamp, c_tinyint, c_varchar ) VALUES ( 10,10,'Z','Z','2008-04-01 00:10:01','2008-04-01',10.00, '192.168.0.254',10,10,10,'Z','00:10:01','2008-04-01 00:10:01',10,'Z' );