NAME
SQL::Type::Guess - guess an appropriate column type for a set of data
SYNOPSIS
my @data=(
{ fool => 1, when => '20140401', greeting => 'Hello', value => '1.05' },
{ fool => 0, when => '20140402', greeting => 'World', value => '99.05' },
{ fool => 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 (
# "fool" 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:
column_type
Hashref of already known column types.
column_map
Hashref mapping the combinations SQL type names to the resulting
type name.
`$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'
my $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:
user
Supply a username for the table
columns
This allows you to specify the columns and their order. The default
is alphabetical order of the columns.
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 by Max Maischein `corion@cpan.org'.
LICENSE
This module is released under the same terms as Perl itself.