Changeset: 5a62566c61e2 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5a62566c61e2
Modified Files:
monetdb5/optimizer/opt_matpack.c
monetdb5/optimizer/opt_pipes.c
sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
Branch: default
Log Message:
merge Feb2013
diffs (257 lines):
diff --git a/monetdb5/optimizer/opt_matpack.c b/monetdb5/optimizer/opt_matpack.c
--- a/monetdb5/optimizer/opt_matpack.c
+++ b/monetdb5/optimizer/opt_matpack.c
@@ -27,7 +27,7 @@
int
OPTmatpackImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci)
{
- int v, i, j, limit;
+ int v, i, j, limit, slimit;
InstrPtr p,q;
int actions = 0;
InstrPtr *old;
@@ -38,6 +38,7 @@ OPTmatpackImplementation(Client cntxt, M
(void) stk; /* to fool compilers */
old= mb->stmt;
limit= mb->stop;
+ slimit = mb->ssize;
if ( newMalBlkStmt(mb,mb->stop) < 0)
return 0;
for (i = 0; i < limit; i++) {
@@ -62,6 +63,9 @@ OPTmatpackImplementation(Client cntxt, M
}
pushInstruction(mb,p);
}
+ for(; i<slimit; i++)
+ if (old[i])
+ freeInstruction(old[i]);
GDKfree(old);
return actions;
}
diff --git a/monetdb5/optimizer/opt_pipes.c b/monetdb5/optimizer/opt_pipes.c
--- a/monetdb5/optimizer/opt_pipes.c
+++ b/monetdb5/optimizer/opt_pipes.c
@@ -496,12 +496,8 @@ compileOptimizer(Client cntxt, str name)
continue;
MSinitClientPrg(&c, "user",
pipes[j].name);
msg = compileString(&sym, &c,
pipes[j].def);
- if (msg != MAL_SUCCEED) {
- c.errbuf = NULL;
- c.mythread = 0;
- MCcloseClient(&c);
- return msg;
- }
+ if (msg != MAL_SUCCEED)
+ break;
pipes[j].mb = copyMalBlk(sym->def);
}
}
@@ -509,9 +505,17 @@ compileOptimizer(Client cntxt, str name)
* exist, just this client record is closed */
c.errbuf = NULL;
c.mythread = 0;
+ /* destroy bstream using free */
+ free(c.fdin->buf);
+ free(c.fdin);
+ /* remove garbage from previous connection */
+ if (c.nspace) {
+ freeModule(c.nspace);
+ c.nspace = 0;
+ }
MCcloseClient(&c);
- msg = validateOptimizerPipes();
- if (msg != MAL_SUCCEED)
+ if (msg != MAL_SUCCEED ||
+ (msg = validateOptimizerPipes()) != MAL_SUCCEED)
return msg;
}
}
diff --git a/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
--- a/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
+++ b/sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
@@ -19,182 +19,10 @@ stdout of test 'upgrade` in directory 's
# MonetDB/SQL module loaded
Ready.
-Running database upgrade commands:
-drop filter function sys."like"(string, string, string);
-drop filter function sys."ilike"(string, string, string);
-create filter function sys."like"(val string, pat string, esc string) external
name algebra.likesubselect;
-create filter function sys."ilike"(val string, pat string, esc string)
external name algebra.ilikesubselect;
-drop function sys.storage;
--- The contents of this file are subject to the MonetDB Public License
--- Version 1.1 (the "License"); you may not use this file except in
--- compliance with the License. You may obtain a copy of the License at
--- http://www.monetdb.org/Legal/MonetDBLicense
---
--- Software distributed under the License is distributed on an "AS IS"
--- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
--- License for the specific language governing rights and limitations
--- under the License.
---
--- The Original Code is the MonetDB Database System.
---
--- The Initial Developer of the Original Code is CWI.
--- Copyright August 2008-2013 MonetDB B.V.
--- All Rights Reserved.
-
--- Author M.Kersten
--- This script gives the database administrator insight in the actual
--- footprint of the persistent tables and the maximum playground used
--- when indices are introduced upon them.
--- By chancing the storagemodelinput table directly, the footprint for
--- yet to be loaded databases can be assessed.
-
--- The actual storage footprint of an existing database can be
--- obtained by the table procuding function storage()
--- It represents the actual state of affairs, i.e. storage on disk
--- of columns and foreign key indices, and possible temporary hash indices.
--- For strings we take a sample to determine their average length.
-
-create function sys.storage()
-returns table ("schema" string, "table" string, "column" string, "type"
string, location string, "count" bigint, typewidth int, columnsize bigint,
heapsize bigint, indices bigint, sorted boolean)
-external name sql.storage;
-
--- To determine the footprint of an arbitrary database, we first have
--- to define its schema, followed by an indication of the properties of each
column.
--- A storage model input table for the size prediction is shown below:
-create table sys.storagemodelinput(
- "schema" string,
- "table" string,
- "column" string,
- "type" string,
- "typewidth" int,
- "count" bigint, -- estimated number of tuples
- "distinct" bigint, -- indication of distinct number of strings
- "atomwidth" int, -- average width of strings or clob
- "reference" boolean,-- used as foreign key reference
- "sorted" boolean -- if set there is no need for an index
-);
-update sys._tables
- set system = true
- where name = 'storagemodelinput'
- and schema_id = (select id from sys.schemas where name = 'sys');
--- this table can be adjusted to reflect the anticipated final database size
-
--- The model input can be derived from the current database using
-create procedure sys.storagemodelinit()
-begin
- delete from sys.storagemodelinput;
-
- insert into sys.storagemodelinput
- select X."schema", X."table", X."column", X."type", X.typewidth,
X.count, 0, X.typewidth, false, X.sorted from sys.storage() X;
-
- update sys.storagemodelinput
- set reference = true
- where concat(concat("schema","table"), "column") in (
- SELECT concat( concat("fkschema"."name", "fktable"."name"),
"fkkeycol"."name" )
- FROM "sys"."keys" AS "fkkey",
- "sys"."objects" AS "fkkeycol",
- "sys"."tables" AS "fktable",
- "sys"."schemas" AS "fkschema"
- WHERE "fktable"."id" = "fkkey"."table_id"
- AND "fkkey"."id" = "fkkeycol"."id"
- AND "fkschema"."id" = "fktable"."schema_id"
- AND "fkkey"."rkey" > -1);
-
- update sys.storagemodelinput
- set "distinct" = "count" -- assume all distinct
- where "type" = 'varchar' or "type"='clob';
-end;
-
--- The predicted storage footprint of the complete database
--- determines the amount of diskspace needed for persistent storage
--- and the upperbound when all possible index structures are created.
--- The storage requirement for foreign key joins is split amongst the
participants.
-
-create function sys.columnsize(nme string, i bigint, d bigint)
-returns bigint
-begin
- case
- when nme = 'boolean' then return i;
- when nme = 'char' then return 2*i;
- when nme = 'smallint' then return 2 * i;
- when nme = 'int' then return 4 * i;
- when nme = 'bigint' then return 8 * i;
- when nme = 'timestamp' then return 8 * i;
- when nme = 'varchar' then
- case
- when cast(d as bigint) << 8 then return i;
- when cast(d as bigint) << 16 then return 2 * i;
- when cast(d as bigint) << 32 then return 4 * i;
- else return 8 * i;
- end case;
- else return 8 * i;
- end case;
-end;
-
-create function sys.heapsize(tpe string, i bigint, w int)
-returns bigint
-begin
- if tpe <> 'varchar' and tpe <> 'clob'
- then
- return 0;
- end if;
- return 10240 + i * w;
-end;
-
-create function sys.indexsize(b boolean, i bigint)
-returns bigint
-begin
- -- assume non-compound keys
- if b = true
- then
- return 8 * i;
- end if;
- return 0;
-end;
-
-create function sys.storagemodel()
-returns table (
- "schema" string,
- "table" string,
- "column" string,
- "type" string,
- "count" bigint,
- columnsize bigint,
- heapsize bigint,
- indices bigint,
- sorted boolean)
-begin
- return select I."schema", I."table", I."column", I."type", I."count",
- columnsize(I."type", I.count, I."distinct"),
- heapsize(I."type", I."distinct", I."atomwidth"),
- indexsize(I."reference", I."count"),
- I.sorted
- from sys.storagemodelinput I;
-end;
-
--- A summary of the table storage requirement is is available as a table view.
--- The auxillary column denotes the maximum space if all non-sorted columns
--- would be augmented with a hash (rare situation)
-create view sys.tablestoragemodel
-as select "schema","table",max(count) as "count",
- sum(columnsize) as columnsize,
- sum(heapsize) as heapsize,
- sum(indices) as indices,
- sum(case when sorted = false then 8 * count else 0 end) as auxillary
-from sys.storagemodel() group by "schema","table";
-update sys._tables
- set system = true
- where name = 'tablestoragemodel'
- and schema_id = (select id from sys.schemas where name = 'sys');
-insert into sys.systemfunctions (select f.id from sys.functions f, sys.schemas
s where f.name in ('like', 'ilike') and f.type = 4 and f.schema_id = s.id and
s.name = 'sys');
-insert into sys.systemfunctions (select f.id from sys.functions f, sys.schemas
s where f.name in ('storage', 'columnsize', 'heapsize', 'indexsize',
'storagemodel') and f.type = 1 and f.schema_id = s.id and s.name = 'sys');
-insert into sys.systemfunctions (select f.id from sys.functions f, sys.schemas
s where f.name = 'storagemodelinit' and f.type = 2 and f.schema_id = s.id and
s.name = 'sys');
-
-
-# 16:00:11 >
-# 16:00:11 > "/usr/bin/python2" "upgrade.SQL.py" "upgrade"
-# 16:00:11 >
+# 15:38:36 >
+# 15:38:36 > "/usr/bin/python2" "upgrade.SQL.py" "upgrade"
+# 15:38:36 >
#select count(*) from testschema.smallstring;
% testschema.smallstring # table_name
_______________________________________________
checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list