App-DBBrowser
view release on metacpan or search on metacpan
- Bugfix in SQLite's 'bit_length': return bits not bytes.
- Bugfix in HAVING clause with operator 'LIKE col': use group results as arguments.
- Bugfixes in 'col_function' and print history.
- Union "All tables": don't include system tables.
2.035 2018-12-20
- "DBD::MariaDB" database plugin.
2.034 2018-12-19
- New option "guess data type".
- Update option "auto increment column".
- Bugfix in "insert_into" menu.
- Filename extension: max length from 3 to 4.
- Select columns: allow to select more than one column at a time.
2.033 2018-12-10
- "Term::Choose" minimum version: '1.638'.
- "Term::TablePrint" mininum version: '0.104'.
2.032 2018-12-09
bin/db-browser view on Meta::CPAN
=item
Auto Increment
Enabling I<Auto Increment> makes the 'auto-increment primary key' option available when creating a table.
=item
Data Type Guessing
When this option is enabled and a table is created, C<SQL::Type::Guess> is used to guess the data types. These data types
are then used as defaults when the user is prompted for data types.
=back
=head3 Add Form Fields
=over
=item
lib/App/DBBrowser/CreateDropAttach/CreateTable.pm view on Meta::CPAN
$sql->{ct_table_options} = [];
return $column_names;
}
sub __edit_column_types {
my ( $sf, $sql, $data_types ) = @_;
my $tf = Term::Form->new( $sf->{i}{tf_default} );
my $ax = App::DBBrowser::Auxil->new( $sf->{i}, $sf->{o}, $sf->{d} );
my $fields;
if ( ! %$data_types && $sf->{o}{create}{data_type_guessing} ) {
$ax->print_sql_info( $ax->get_sql_info( $sql ), 'Column data types: guessing ... ' );
require SQL::Type::Guess;
my $g = SQL::Type::Guess->new();
my $header = $sql->{insert_col_names}; #
my $table = $sql->{insert_args};
my @aoh;
for my $row ( @$table ) {
push @aoh, {
map { $header->[$_] => $row->[$_] } 0 .. $#$header
};
}
$g->guess( @aoh );
my $tmp = $g->column_type;
$data_types = { map { $_ => uc( $tmp->{$_} ) } keys %$tmp };
}
if ( defined $data_types ) {
$fields = [ map { [ $_, $data_types->{$_} ] } @{$sql->{insert_col_names}} ];
}
else {
$fields = [ map { [ $_, '' ] } @{$sql->{insert_col_names}} ];
}
my $read_only = []; ##
lib/App/DBBrowser/DB.pm view on Meta::CPAN
DBI_USER => 0,
DBI_PASS => 0,
}
The result of the I<Attributes>* settings:
$attributes:
{
mysql_enable_utf8 => 0,
mysql_enable_utf8mb4 => 1,
mysql_bind_type_guessing => 1,
}
* OPTIONS/DB Options/DB Settings/$plugin
=end comment
=head1 EXAMPLE
package App::DBBrowser::DB::MyPlugin;
use strict;
lib/App/DBBrowser/DB/MariaDB.pm view on Meta::CPAN
{ name => 'port', secret => 0 },
{ name => 'user', secret => 0 },
{ name => 'pass', secret => 1 },
];
}
sub set_attributes {
my ( $sf ) = @_;
return [
{ name => 'mariadb_bind_type_guessing', default => 1, values => [ 0, 1 ] },
{ name => 'ChopBlanks', default => 0, values => [ 0, 1 ] },
];
}
sub get_db_handle {
my ( $sf, $db ) = @_;
my $db_opt_get = App::DBBrowser::Opt::DBGet->new( $sf->{i}, $sf->{o} );
my $db_opt = $db_opt_get->read_db_config_files();
my $login_data = $db_opt_get->get_login_data( $db, $db_opt );
lib/App/DBBrowser/DB/mysql.pm view on Meta::CPAN
{ name => 'pass', secret => 1 },
];
}
sub set_attributes {
my ( $sf ) = @_;
return [
{ name => 'mysql_enable_utf8', default => 0, values => [ 0, 1 ] },
{ name => 'mysql_enable_utf8mb4', default => 1, values => [ 0, 1 ] },
{ name => 'mysql_bind_type_guessing', default => 1, values => [ 0, 1 ] },
{ name => 'ChopBlanks', default => 0, values => [ 0, 1 ] },
];
}
sub get_db_handle {
my ( $sf, $db ) = @_;
my $db_opt_get = App::DBBrowser::Opt::DBGet->new( $sf->{i}, $sf->{o} );
my $db_opt = $db_opt_get->read_db_config_files();
my $login_data = $db_opt_get->get_login_data( $db, $db_opt );
lib/App/DBBrowser/Opt/Get.pm view on Meta::CPAN
empty_to_null_plain => 1,
empty_to_null_file => 1,
data_source_create_table => 2,
data_source_insert => 2,
show_hidden_files => 0,
file_filter => '',
},
create => {
default_ai_column_name => 'Id',
option_ai_column_enabled => 0,
data_type_guessing => 1,
table_constraint_rows => 0,
table_option_rows => 0,
view_name_prefix => '',
},
split => {
record_sep => '\n',
record_l_trim => '',
record_r_trim => '',
field_sep => ',',
field_l_trim => '\s+',
lib/App/DBBrowser/Opt/Set.pm view on Meta::CPAN
[ 'edit_sql_menu_sq', "- Subqueries created with 'SQL Menu': Allow editing.", [ $no, $yes ] ],
[ 'pg_autocast', "- Pg: Convert to 'text' automatically when required.", [ $no, $yes ] ],
];
$sf->__settings_menu_wrap( $section, $sub_menu, $prompt );
}
##### Create table ####
elsif ( $opt eq '_enable_ct_opt' ) {
my $prompt = 'Activate options';
my $sub_menu = [
[ 'option_ai_column_enabled', "- Option 'Auto Increment'", [ $no, $yes ] ],
[ 'data_type_guessing', "- Data type guessing", [ $no, $yes ] ],
];
$sf->__settings_menu_wrap( $section, $sub_menu, $prompt );
}
elsif ( $opt eq '_add_ct_fields' ) {
my $prompt = 'Add fields';
my $sub_menu = [
[ 'table_constraint_rows', "- Table constraint fields", [ 0 .. 9 ] ],
[ 'table_option_rows', "- Table option fields", [ 0 .. 9 ] ],
];
$sf->__settings_menu_wrap( $section, $sub_menu, $prompt );
lib/App/DBBrowser/Table/Extensions/ScalarFunctions/To/EpochTo.pm view on Meta::CPAN
sub epoch_to {
my ( $sf, $sql, $col, $func ) = @_;
my $ax = App::DBBrowser::Auxil->new( $sf->{i}, $sf->{o}, $sf->{d} );
my $tc = Term::Choose->new( $sf->{i}{tc_default} );
my $stmt = $sf->__select_stmt( $sql, $col, $col );
my $epochs = $sf->{d}{dbh}->selectcol_arrayref( $stmt, { Columns => [1], MaxRows => 500 });
my $info = $ax->get_sql_info( $sql );
my $avail_h = get_term_height() - ( $info =~ tr/\n// + 10 ); # 10 = "\n" + col_name + '...' + prompt + (4 menu) + empty row + footer
my $max_examples = 50;
$max_examples = ( minmax $max_examples, $avail_h, scalar( @$epochs ) )[0];
my ( $function_stmt, $example_results ) = $sf->__guess_interval( $sql, $func, $col, $epochs, $max_examples, $info );
while ( 1 ) {
if ( ! defined $function_stmt ) {
( $function_stmt, $example_results ) = $sf->__choose_interval( $sql, $func, $col, $epochs, $max_examples, $info );
if ( ! defined $function_stmt ) {
return;
}
return $function_stmt;
}
my @info_rows = ( $col );
lib/App/DBBrowser/Table/Extensions/ScalarFunctions/To/EpochTo.pm view on Meta::CPAN
}
my $stmt = $sf->__select_stmt( $sql, $function_stmt, $col );
my $example_results = $sf->{d}{dbh}->selectcol_arrayref(
$stmt,
{ Columns => [1], MaxRows => $max_examples }
);
return $function_stmt, [ map { $_ // 'undef' } @$example_results ];
}
sub __guess_interval {
my ( $sf, $sql, $func, $col, $epochs, $max_examples ) = @_;
my ( $function_stmt, $example_results );
if ( ! eval {
my %count;
for my $epoch ( @$epochs ) {
if ( ! looks_like_number( $epoch ) ) {
return;
}
++$count{length( $epoch )};
( run in 0.593 second using v1.01-cache-2.11-cpan-702932259ff )