mysql-test/mysql-test-run.sh
added --bench option sql-bench/Makefile.am added bench-count-distinct.sh test sql-bench/bench-init.pl.sh added --socket option
This commit is contained in:
parent
a93d30b345
commit
b8c416ac65
@ -314,3 +314,4 @@ libmysqld/thr_malloc.cc
|
|||||||
libmysqld/time.cc
|
libmysqld/time.cc
|
||||||
libmysqld/unireg.cc
|
libmysqld/unireg.cc
|
||||||
linked_libmysqld_sources
|
linked_libmysqld_sources
|
||||||
|
sql-bench/bench-count-distinct
|
||||||
|
@ -144,6 +144,10 @@ while test $# -gt 0; do
|
|||||||
--record)
|
--record)
|
||||||
RECORD=1;
|
RECORD=1;
|
||||||
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
|
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1" ;;
|
||||||
|
--bench)
|
||||||
|
DO_BENCH=1
|
||||||
|
NO_SLAVE=1
|
||||||
|
;;
|
||||||
--sleep=*)
|
--sleep=*)
|
||||||
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1"
|
EXTRA_MYSQL_TEST_OPT="$EXTRA_MYSQL_TEST_OPT $1"
|
||||||
SLEEP_TIME=`$ECHO "$1" | $SED -e "s;--sleep=;;"`
|
SLEEP_TIME=`$ECHO "$1" | $SED -e "s;--sleep=;;"`
|
||||||
@ -423,6 +427,8 @@ start_master()
|
|||||||
# Remove old berkeley db log files that can confuse the server
|
# Remove old berkeley db log files that can confuse the server
|
||||||
$RM -f $MASTER_MYDDIR/log.*
|
$RM -f $MASTER_MYDDIR/log.*
|
||||||
#start master
|
#start master
|
||||||
|
if [ -z "$DO_BENCH" ]
|
||||||
|
then
|
||||||
master_args="--no-defaults --log-bin=master-bin \
|
master_args="--no-defaults --log-bin=master-bin \
|
||||||
--server-id=1 \
|
--server-id=1 \
|
||||||
--basedir=$MY_BASEDIR \
|
--basedir=$MY_BASEDIR \
|
||||||
@ -438,6 +444,21 @@ start_master()
|
|||||||
--innobase_data_file_path=ibdata1:50M \
|
--innobase_data_file_path=ibdata1:50M \
|
||||||
$SMALL_SERVER \
|
$SMALL_SERVER \
|
||||||
$EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
|
$EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
|
||||||
|
else
|
||||||
|
master_args="--no-defaults --log-bin=master-bin --server-id=1 \
|
||||||
|
--basedir=$MY_BASEDIR \
|
||||||
|
--port=$MASTER_MYPORT \
|
||||||
|
--datadir=$MASTER_MYDDIR \
|
||||||
|
--pid-file=$MASTER_MYPID \
|
||||||
|
--socket=$MASTER_MYSOCK \
|
||||||
|
--default-character-set=latin1 \
|
||||||
|
--core \
|
||||||
|
--tmpdir=$MYSQL_TMP_DIR \
|
||||||
|
--language=english \
|
||||||
|
--innobase_data_file_path=ibdata1:50M \
|
||||||
|
$SMALL_SERVER \
|
||||||
|
$EXTRA_MASTER_OPT $EXTRA_MASTER_MYSQLD_OPT"
|
||||||
|
fi
|
||||||
if [ x$DO_DDD = x1 ]
|
if [ x$DO_DDD = x1 ]
|
||||||
then
|
then
|
||||||
$ECHO "set args $master_args" > $GDB_MASTER_INIT
|
$ECHO "set args $master_args" > $GDB_MASTER_INIT
|
||||||
@ -753,6 +774,28 @@ fi
|
|||||||
|
|
||||||
$ECHO "Starting Tests"
|
$ECHO "Starting Tests"
|
||||||
|
|
||||||
|
if [ "$DO_BENCH" = 1 ]
|
||||||
|
then
|
||||||
|
BENCHDIR=$BASEDIR/sql-bench/
|
||||||
|
savedir=`pwd`
|
||||||
|
cd $BENCHDIR
|
||||||
|
if [ -z "$1" ]
|
||||||
|
then
|
||||||
|
./run-all-tests --socket=$MASTER_MYSOCK --user=root
|
||||||
|
else
|
||||||
|
if [ -x "./$1" ]
|
||||||
|
then
|
||||||
|
./$1 --socket=$MASTER_MYSOCK --user=root
|
||||||
|
else
|
||||||
|
echo "benchmark $1 not found"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
cd $savedir
|
||||||
|
mysql_stop
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
$ECHO
|
$ECHO
|
||||||
$ECHO " TEST USER SYSTEM ELAPSED RESULT"
|
$ECHO " TEST USER SYSTEM ELAPSED RESULT"
|
||||||
$ECHO $DASH72
|
$ECHO $DASH72
|
||||||
|
@ -23,13 +23,14 @@ bench_SCRIPTS = test-ATIS test-connect test-create test-insert \
|
|||||||
test-big-tables test-select test-wisconsin \
|
test-big-tables test-select test-wisconsin \
|
||||||
test-alter-table \
|
test-alter-table \
|
||||||
bench-init.pl compare-results run-all-tests \
|
bench-init.pl compare-results run-all-tests \
|
||||||
server-cfg crash-me copy-db
|
server-cfg crash-me copy-db bench-count-distinct
|
||||||
CLEANFILES = $(bench_SCRIPTS)
|
CLEANFILES = $(bench_SCRIPTS)
|
||||||
EXTRA_SCRIPTS = test-ATIS.sh test-connect.sh test-create.sh \
|
EXTRA_SCRIPTS = test-ATIS.sh test-connect.sh test-create.sh \
|
||||||
test-insert.sh test-big-tables.sh test-select.sh \
|
test-insert.sh test-big-tables.sh test-select.sh \
|
||||||
test-alter-table.sh test-wisconsin.sh \
|
test-alter-table.sh test-wisconsin.sh \
|
||||||
bench-init.pl.sh compare-results.sh server-cfg.sh \
|
bench-init.pl.sh compare-results.sh server-cfg.sh \
|
||||||
run-all-tests.sh crash-me.sh copy-db.sh
|
run-all-tests.sh crash-me.sh copy-db.sh \
|
||||||
|
bench-count-distinct.sh
|
||||||
EXTRA_DIST = $(EXTRA_SCRIPTS)
|
EXTRA_DIST = $(EXTRA_SCRIPTS)
|
||||||
|
|
||||||
dist-hook:
|
dist-hook:
|
||||||
|
258
sql-bench/bench-count-distinct.sh
Normal file
258
sql-bench/bench-count-distinct.sh
Normal file
@ -0,0 +1,258 @@
|
|||||||
|
#!@PERL@
|
||||||
|
# Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
|
||||||
|
#
|
||||||
|
# This library is free software; you can redistribute it and/or
|
||||||
|
# modify it under the terms of the GNU Library General Public
|
||||||
|
# License as published by the Free Software Foundation; either
|
||||||
|
# version 2 of the License, or (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This library is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
# Library General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU Library General Public
|
||||||
|
# License along with this library; if not, write to the Free
|
||||||
|
# Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
|
||||||
|
# MA 02111-1307, USA
|
||||||
|
#
|
||||||
|
# Test of selecting on keys that consist of many parts
|
||||||
|
#
|
||||||
|
##################### Standard benchmark inits ##############################
|
||||||
|
|
||||||
|
use DBI;
|
||||||
|
use Getopt::Long;
|
||||||
|
use Benchmark;
|
||||||
|
|
||||||
|
$opt_loop_count=10000;
|
||||||
|
$opt_medium_loop_count=200;
|
||||||
|
$opt_small_loop_count=10;
|
||||||
|
$opt_regions=6;
|
||||||
|
$opt_groups=100;
|
||||||
|
|
||||||
|
chomp($pwd = `pwd`); $pwd = "." if ($pwd eq '');
|
||||||
|
require "$pwd/bench-init.pl" || die "Can't read Configuration file: $!\n";
|
||||||
|
|
||||||
|
$columns=min($limits->{'max_columns'},500,($limits->{'query_size'}-50)/24,
|
||||||
|
$limits->{'max_conditions'}/2-3);
|
||||||
|
|
||||||
|
if ($opt_small_test)
|
||||||
|
{
|
||||||
|
$opt_loop_count/=10;
|
||||||
|
$opt_medium_loop_count/=10;
|
||||||
|
$opt_small_loop_count/=10;
|
||||||
|
$opt_groups/=10;
|
||||||
|
}
|
||||||
|
|
||||||
|
print "Testing the speed of selecting on keys that consist of many parts\n";
|
||||||
|
print "The test-table has $opt_loop_count rows and the test is done with $columns ranges.\n\n";
|
||||||
|
|
||||||
|
####
|
||||||
|
#### Connect and start timeing
|
||||||
|
####
|
||||||
|
|
||||||
|
$dbh = $server->connect();
|
||||||
|
$start_time=new Benchmark;
|
||||||
|
|
||||||
|
####
|
||||||
|
#### Create needed tables
|
||||||
|
####
|
||||||
|
|
||||||
|
goto select_test if ($opt_skip_create);
|
||||||
|
|
||||||
|
print "Creating table\n";
|
||||||
|
$dbh->do("drop table bench1" . $server->{'drop_attr'});
|
||||||
|
|
||||||
|
do_many($dbh,$server->create("bench1",
|
||||||
|
["region char(1) NOT NULL",
|
||||||
|
"idn integer(6) NOT NULL",
|
||||||
|
"rev_idn integer(6) NOT NULL",
|
||||||
|
"grp integer(6) NOT NULL"],
|
||||||
|
["primary key (region,idn)",
|
||||||
|
"unique (region,rev_idn)",
|
||||||
|
"unique (region,grp,idn)"]));
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"LOCK TABLES bench1 WRITE");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
|
{
|
||||||
|
$server->vacuum(1,\$dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
####
|
||||||
|
#### Insert $opt_loop_count records with
|
||||||
|
#### region: "A" -> "E"
|
||||||
|
#### idn: 0 -> count
|
||||||
|
#### rev_idn: count -> 0,
|
||||||
|
#### grp: distributed values 0 - > count/100
|
||||||
|
####
|
||||||
|
|
||||||
|
print "Inserting $opt_loop_count rows\n";
|
||||||
|
|
||||||
|
$loop_time=new Benchmark;
|
||||||
|
$query="insert into bench1 values (";
|
||||||
|
$half_done=$opt_loop_count/2;
|
||||||
|
for ($id=0,$rev_id=$opt_loop_count-1 ; $id < $opt_loop_count ; $id++,$rev_id--)
|
||||||
|
{
|
||||||
|
$grp=$id*3 % $opt_groups;
|
||||||
|
$region=chr(65+$id%$opt_regions);
|
||||||
|
do_query($dbh,"$query'$region',$id,$rev_id,$grp)");
|
||||||
|
if ($id == $half_done)
|
||||||
|
{ # Test with different insert
|
||||||
|
$query="insert into bench1 (region,idn,rev_idn,grp) values (";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$end_time=new Benchmark;
|
||||||
|
print "Time to insert ($opt_loop_count): " .
|
||||||
|
timestr(timediff($end_time, $loop_time),"all") . "\n\n";
|
||||||
|
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"UNLOCK TABLES");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
|
{
|
||||||
|
$server->vacuum(0,\$dbh,"bench1");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"LOCK TABLES bench1 WRITE");
|
||||||
|
}
|
||||||
|
|
||||||
|
####
|
||||||
|
#### Do some selects on the table
|
||||||
|
####
|
||||||
|
|
||||||
|
select_test:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if ($limits->{'group_distinct_functions'})
|
||||||
|
{
|
||||||
|
print "Testing count(distinct) on the table\n";
|
||||||
|
$loop_time=new Benchmark;
|
||||||
|
$rows=$estimated=$count=0;
|
||||||
|
for ($i=0 ; $i < $opt_medium_loop_count ; $i++)
|
||||||
|
{
|
||||||
|
$count++;
|
||||||
|
$rows+=fetch_all_rows($dbh,"select count(distinct region) from bench1");
|
||||||
|
$end_time=new Benchmark;
|
||||||
|
last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1,
|
||||||
|
$opt_medium_loop_count));
|
||||||
|
}
|
||||||
|
print_time($estimated);
|
||||||
|
print " for count_distinct_key_prefix ($count:$rows): " .
|
||||||
|
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
||||||
|
|
||||||
|
$loop_time=new Benchmark;
|
||||||
|
$rows=$estimated=$count=0;
|
||||||
|
for ($i=0 ; $i < $opt_medium_loop_count ; $i++)
|
||||||
|
{
|
||||||
|
$count++;
|
||||||
|
$rows+=fetch_all_rows($dbh,"select count(distinct grp) from bench1");
|
||||||
|
$end_time=new Benchmark;
|
||||||
|
last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1,
|
||||||
|
$opt_medium_loop_count));
|
||||||
|
}
|
||||||
|
print_time($estimated);
|
||||||
|
print " for count_distinct ($count:$rows): " .
|
||||||
|
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
||||||
|
|
||||||
|
$loop_time=new Benchmark;
|
||||||
|
$rows=$estimated=$count=0;
|
||||||
|
for ($i=0 ; $i < $opt_medium_loop_count ; $i++)
|
||||||
|
{
|
||||||
|
$count++;
|
||||||
|
$rows+=fetch_all_rows($dbh,"select count(distinct grp),count(distinct rev_idn) from bench1");
|
||||||
|
$end_time=new Benchmark;
|
||||||
|
last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1,
|
||||||
|
$opt_medium_loop_count));
|
||||||
|
}
|
||||||
|
print_time($estimated);
|
||||||
|
print " for count_distinct_2 ($count:$rows): " .
|
||||||
|
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
||||||
|
|
||||||
|
$loop_time=new Benchmark;
|
||||||
|
$rows=$estimated=$count=0;
|
||||||
|
for ($i=0 ; $i < $opt_medium_loop_count ; $i++)
|
||||||
|
{
|
||||||
|
$count++;
|
||||||
|
$rows+=fetch_all_rows($dbh,"select region,count(distinct idn) from bench1 group by region");
|
||||||
|
$end_time=new Benchmark;
|
||||||
|
last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1,
|
||||||
|
$opt_medium_loop_count));
|
||||||
|
}
|
||||||
|
print_time($estimated);
|
||||||
|
print " for count_distinct_group_on_key ($count:$rows): " .
|
||||||
|
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
||||||
|
|
||||||
|
$loop_time=new Benchmark;
|
||||||
|
$rows=$estimated=$count=0;
|
||||||
|
for ($i=0 ; $i < $opt_medium_loop_count ; $i++)
|
||||||
|
{
|
||||||
|
$count++;
|
||||||
|
$rows+=fetch_all_rows($dbh,"select grp,count(distinct idn) from bench1 group by grp");
|
||||||
|
$end_time=new Benchmark;
|
||||||
|
last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1,
|
||||||
|
$opt_medium_loop_count));
|
||||||
|
}
|
||||||
|
print_time($estimated);
|
||||||
|
print " for count_distinct_group_on_key_parts ($count:$rows): " .
|
||||||
|
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
||||||
|
|
||||||
|
$loop_time=new Benchmark;
|
||||||
|
$rows=$estimated=$count=0;
|
||||||
|
for ($i=0 ; $i < $opt_medium_loop_count ; $i++)
|
||||||
|
{
|
||||||
|
$count++;
|
||||||
|
$rows+=fetch_all_rows($dbh,"select grp,count(distinct rev_idn) from bench1 group by grp");
|
||||||
|
$end_time=new Benchmark;
|
||||||
|
last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1,
|
||||||
|
$opt_medium_loop_count));
|
||||||
|
}
|
||||||
|
print_time($estimated);
|
||||||
|
print " for count_distinct_group ($count:$rows): " .
|
||||||
|
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
||||||
|
|
||||||
|
$loop_time=new Benchmark;
|
||||||
|
$rows=$estimated=$count=0;
|
||||||
|
$test_count=$opt_medium_loop_count/10;
|
||||||
|
for ($i=0 ; $i < $test_count ; $i++)
|
||||||
|
{
|
||||||
|
$count++;
|
||||||
|
$rows+=fetch_all_rows($dbh,"select idn,count(distinct region) from bench1 group by idn");
|
||||||
|
$end_time=new Benchmark;
|
||||||
|
last if ($estimated=predict_query_time($loop_time,$end_time,\$count,$i+1,
|
||||||
|
$test_count));
|
||||||
|
}
|
||||||
|
print_time($estimated);
|
||||||
|
print " for count_distinct_big ($count:$rows): " .
|
||||||
|
timestr(timediff($end_time, $loop_time),"all") . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
####
|
||||||
|
#### End of benchmark
|
||||||
|
####
|
||||||
|
|
||||||
|
if ($opt_lock_tables)
|
||||||
|
{
|
||||||
|
do_query($dbh,"UNLOCK TABLES");
|
||||||
|
}
|
||||||
|
if (!$opt_skip_delete)
|
||||||
|
{
|
||||||
|
do_query($dbh,"drop table bench1" . $server->{'drop_attr'});
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($opt_fast && defined($server->{vacuum}))
|
||||||
|
{
|
||||||
|
$server->vacuum(0,\$dbh);
|
||||||
|
}
|
||||||
|
|
||||||
|
$dbh->disconnect; # close connection
|
||||||
|
|
||||||
|
end_benchmark($start_time);
|
@ -51,11 +51,12 @@ $log_prog_args=join(" ", skip_arguments(\@ARGV,"comments","cmp","server",
|
|||||||
"user", "host", "database", "password",
|
"user", "host", "database", "password",
|
||||||
"use-old-results","skip-test",
|
"use-old-results","skip-test",
|
||||||
"machine", "dir", "suffix", "log"));
|
"machine", "dir", "suffix", "log"));
|
||||||
GetOptions("skip-test=s","comments=s","cmp=s","server=s","user=s","host=s","database=s","password=s","loop-count=i","row-count=i","skip-create","skip-delete","verbose","fast-insert","lock-tables","debug","fast","force","field-count=i","regions=i","groups=i","time-limit=i","log","use-old-results","machine=s","dir=s","suffix=s","help","odbc","small-test","small-tables","small-key-tables","stage=i","old-headers","die-on-errors","create-options=s","hires","tcpip","silent") || usage();
|
GetOptions("skip-test=s","comments=s","cmp=s","server=s","user=s","host=s","database=s","password=s","loop-count=i","row-count=i","skip-create","skip-delete","verbose","fast-insert","lock-tables","debug","fast","force","field-count=i","regions=i","groups=i","time-limit=i","log","use-old-results","machine=s","dir=s","suffix=s","help","odbc","small-test","small-tables","small-key-tables","stage=i","old-headers","die-on-errors","create-options=s","hires","tcpip","silent",
|
||||||
|
"socket=s") || usage();
|
||||||
|
|
||||||
usage() if ($opt_help);
|
usage() if ($opt_help);
|
||||||
$server=get_server($opt_server,$opt_host,$opt_database,$opt_odbc,
|
$server=get_server($opt_server,$opt_host,$opt_database,$opt_odbc,
|
||||||
machine_part());
|
machine_part(), $opt_socket);
|
||||||
$limits=merge_limits($server,$opt_cmp);
|
$limits=merge_limits($server,$opt_cmp);
|
||||||
$date=date();
|
$date=date();
|
||||||
@estimated=(0.0,0.0,0.0); # For estimated time support
|
@estimated=(0.0,0.0,0.0); # For estimated time support
|
||||||
@ -486,6 +487,10 @@ All benchmarks takes the following options:
|
|||||||
--password='password'
|
--password='password'
|
||||||
Password for the current user.
|
Password for the current user.
|
||||||
|
|
||||||
|
--socket='socket'
|
||||||
|
If the database supports connecting through a Unix socket,
|
||||||
|
use this socket to connect
|
||||||
|
|
||||||
--regions
|
--regions
|
||||||
This is a test specific option that is only used when debugging a test.
|
This is a test specific option that is only used when debugging a test.
|
||||||
This usually means how AND levels should be tested.
|
This usually means how AND levels should be tested.
|
||||||
|
@ -33,10 +33,10 @@
|
|||||||
|
|
||||||
sub get_server
|
sub get_server
|
||||||
{
|
{
|
||||||
my ($name,$host,$database,$odbc,$machine)=@_;
|
my ($name,$host,$database,$odbc,$machine,$socket)=@_;
|
||||||
my ($server);
|
my ($server);
|
||||||
if ($name =~ /mysql/i)
|
if ($name =~ /mysql/i)
|
||||||
{ $server=new db_MySQL($host, $database, $machine); }
|
{ $server=new db_MySQL($host, $database, $machine, $socket); }
|
||||||
elsif ($name =~ /pg/i)
|
elsif ($name =~ /pg/i)
|
||||||
{ $server= new db_Pg($host,$database); }
|
{ $server= new db_Pg($host,$database); }
|
||||||
elsif ($name =~ /msql/i)
|
elsif ($name =~ /msql/i)
|
||||||
@ -106,13 +106,14 @@ package db_MySQL;
|
|||||||
|
|
||||||
sub new
|
sub new
|
||||||
{
|
{
|
||||||
my ($type,$host,$database,$machine)= @_;
|
my ($type,$host,$database,$machine,$socket)= @_;
|
||||||
my $self= {};
|
my $self= {};
|
||||||
my %limits;
|
my %limits;
|
||||||
bless $self;
|
bless $self;
|
||||||
|
|
||||||
$self->{'cmp_name'} = "mysql";
|
$self->{'cmp_name'} = "mysql";
|
||||||
$self->{'data_source'} = "DBI:mysql:$database:$host";
|
$self->{'data_source'} = "DBI:mysql:database=$database;host=$host";
|
||||||
|
$self->{'data_source'} .= ";mysql_socket=$socket" if($socket);
|
||||||
$self->{'limits'} = \%limits;
|
$self->{'limits'} = \%limits;
|
||||||
$self->{'smds'} = \%smds;
|
$self->{'smds'} = \%smds;
|
||||||
$self->{'blob'} = "blob";
|
$self->{'blob'} = "blob";
|
||||||
|
Loading…
x
Reference in New Issue
Block a user