Travis Build Status appveyor build status

NAME

SQL::Type::Guess - guess an appropriate column type for a set of data

SYNOPSIS

my @data=(
  { seen => 1, when => '20140401', greeting => 'Hello', value => '1.05'  },
  { seen => 0, when => '20140402', greeting => 'World', value => '99.05' },
  { seen => 0, when => '20140402', greeting => 'World', value => '9.005' },
);

my $g= SQL::Type::Guess->new();
$g->guess( @data );

print $g->as_sql( table => 'test' );
# create table test (
#    "seen" decimal(1,0),
#    "greeting" varchar(5),
#    "value" decimal(5,3),
#    "when" date
# )

METHODS

SQL:::Type::Guess->new( %OPTIONS )

my $g= SQL::Type::Guess->new();

Creates a new SQL::Type::Guess instance. The following options are supported:

$g->column_type

$g->guess({ foo => 1, bar => 'Hello' },{ foo => 1000, bar => 'World' });
print $g->column_type->{ 'foo' } # decimal(4,0)

Returns a hashref containing the SQL types to store all values in the columns seen so far.

$g->column_map

Returns the hashref used for the type transitions. The current transitions used for generalizing data are:

date -> decimal -> varchar

This is not entirely safe, as 2014-01-01 can't be safely loaded into an decimal column, but assuming your data is representative of the data to be stored that shouldn't be much of an issue.

$g->guess_data_type $OLD_TYPE, @VALUES

$type= $g->guess_data_type( $type, 1,2,3,undef,'Hello','World', );

Returns the data type that encompasses the already established data type in $type and the new values as passed in via @values.

If there is no preexisting data type, $type can be undef or the empty string.

$g->guess( @RECORDS )

my @data= (
    { rownum => 1, name => 'John Smith', street => 'Nowhere Road', birthday => '1996-01-01' },
    { rownum => 2, name => 'John Doe', street => 'Anywhere Plaza', birthday => '1904-01-01' },
    { rownum => 3, name => 'John Bull', street => 'Everywhere Street', birthday => '2001-09-01' },
);
$g->guess( @data );

Modifies the data types for the keys in the given hash.

$g->as_sql %OPTIONS

print $g->as_sql();

Returns an SQL string that describes the data seen so far.

Options:

BUG TRACKER

Please report bugs in this module via the RT CPAN bug queue at https://rt.cpan.org/Public/Dist/Display.html?Name=SQL-Type-Guess or via mail to sql-type-guess-Bugs@rt.cpan.org.

AUTHOR

Max Maischein corion@cpan.org

COPYRIGHT (c)

Copyright 2014-2018 by Max Maischein corion@cpan.org.

LICENSE

This module is released under the same terms as Perl itself.