Update of /cvsroot/monetdb/pathfinder/compiler/sql
In directory sc8-pr-cvs7.sourceforge.net:/tmp/cvs-serv24489
Modified Files:
lalg2sql.brg sql.c sqlprint.c
Log Message:
-- fixed bug in textnode constructor
-- optimizations in element constructor (now we benefit from indexes of
materialized tables)
-- fixed bug in count constructor
Index: sql.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/sql/sql.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- sql.c 13 Feb 2007 11:58:13 -0000 1.18
+++ sql.c 5 Mar 2007 18:57:00 -0000 1.19
@@ -396,6 +396,24 @@
}
PFsql_t*
+PFsql_order(PFsql_t *a, PFsql_t *sort)
+{
+ return wire2(sql_order, a, sort);
+}
+
+PFsql_t*
+PFsql_asc()
+{
+ return leaf(sql_asc);
+}
+
+PFsql_t*
+PFsql_desc()
+{
+ return leaf(sql_desc);
+}
+
+PFsql_t*
PFsql_window_clause(const PFsql_t *partcls, const PFsql_t *ordercls)
{
return wire2(sql_wnd_clause, partcls, ordercls);
@@ -579,11 +597,11 @@
{
switch( type ) {
case aat_nat:
- case aat_int: return "INTEGER";
+ case aat_int: return "DECIMAL(20,10)";
case aat_uA:
case aat_str: return "CHAR(100)";
case aat_dbl:
- case aat_dec: return "DECIMAL";
+ case aat_dec: return "DECIMAL(20,10)";
default: return "unknown";
}
return NULL; /* satisfy picky compiler */
@@ -1052,6 +1070,12 @@
return wire2(sql_div, a, b);
}
+PFsql_t*
+PFsql_like(const PFsql_t *a, const PFsql_t *b)
+{
+ return wire2(sql_like, a, b);
+}
+
/*............ Boolean operator constructors ...........*/
/**
Index: lalg2sql.brg
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/sql/lalg2sql.brg,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- lalg2sql.brg 13 Feb 2007 14:34:42 -0000 1.31
+++ lalg2sql.brg 5 Mar 2007 18:56:59 -0000 1.32
@@ -317,7 +317,10 @@
static struct PFsql_alg_ann_t* llscj(PFalg_axis_t axis, const PFla_op_t *p,
const PFla_op_t *frag);
static PFsql_t* doc_access(PFla_op_t *p);
+#if 0
static PFsql_t* collect_fragments(PFla_op_t *p);
+#endif
+static PFsql_t* collect(PFla_op_t *p);
/**
* We collect the SQL statements during compilation here
@@ -725,6 +728,10 @@
[...996 lines suppressed...]
+ fragrelation(),
+ NULL,
+ NULL
+ );
+
+ PFsql_t *ret = NULL;
+ if (LR(p)->kind == la_merge_adjacent)
+ ret = collect (L(p));
+ else if (L(p)->kind == la_empty_frag)
+ ret = R(p)->sql_ann->fragment;
+ else
+ ret = disjunion (collect (L(p)), R(p)->sql_ann->fragment);
+
+
+ assert (ret);
+ return ret;
+}
static void
parse (PFla_op_t *n)
Index: sqlprint.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/sql/sqlprint.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -d -r1.16 -r1.17
--- sqlprint.c 13 Feb 2007 14:34:42 -0000 1.16
+++ sqlprint.c 5 Mar 2007 18:57:00 -0000 1.17
@@ -336,22 +336,6 @@
"fromlist", n->kind);
break;
}
-//
-// if( !((n->kind == sql_frm_list) ||
-// (n->kind == sql_list_terminator)) )
-// {
-// PFoops( OOPS_FATAL,
-// "Pathfinder failed to print from list (%u)", n->kind );
-// }
-//
-// if( (n->kind == sql_list_terminator) &&
-// (n->child[0] == NULL) && (n->child[1] == NULL) )
-// return;
-//
-// print_tablereference(n->child[0]);
-// if(!(n->child[1]->kind == sql_list_terminator ))
-// sqlprintf(", ");
-// print_from_list(n->child[1]);
}
static void
@@ -404,7 +388,7 @@
{
sqlprintf("(");
print_fullselect(n->child[0]);
- sqlprintf(") UNION (");
+ sqlprintf(") UNION ALL (");
print_fullselect(n->child[1]);
sqlprintf(")");
} break;
@@ -412,7 +396,7 @@
{
sqlprintf("(");
print_fullselect(n->child[0]);
- sqlprintf(") EXCEPT (");
+ sqlprintf(") EXCEPT ALL (");
print_fullselect(n->child[1]);
sqlprintf(")");
} break;
@@ -511,6 +495,17 @@
print_statement(n->child[1]);
sqlprintf(")");
} break;
+ case sql_like:
+ {
+ sqlprintf("(");
+ print_statement(n->child[0]);
+ sqlprintf(" LIKE '%%");
+ /* write the string without beginning and
+ trailing ' */
+ assert (n->child[1]->kind == sql_lit_str);
+ sqlprintf("%s", n->child[1]->sem.atom.val.s);
+ sqlprintf("\%%')");
+ } break;
default:
{
PFoops( OOPS_FATAL, "expression screwed up (%u)",
@@ -534,21 +529,6 @@
print_statement(n);
break;
}
-// if( !((n->kind == sql_slct_list) ||
-// (n->kind == sql_list_terminator)) )
-// {
-// PFoops( OOPS_FATAL,
-// "Pathfinder failed to print attribute list" );
-// }
-//
-// if( (n->kind == sql_list_terminator) &&
-// (n->child[0] == NULL) && (n->child[1] == NULL) )
-// return;
-//
-// print_statement(n->child[0]);
-// if(!(n->child[1]->kind == sql_list_terminator ))
-// sqlprintf(", ");
-// print_select_list(n->child[1]);
}
static void
@@ -623,21 +603,6 @@
print_statement( n );
break;
}
-// if( !((n->kind == sql_srtky_expr) ||
-// (n->kind == sql_list_terminator)) )
-// {
-// PFoops( OOPS_FATAL,
-// "Pathfinder failed to print attribute list" );
-// }
-//
-// if( (n->kind == sql_list_terminator) &&
-// (n->child[0] == NULL) && (n->child[1] == NULL) )
-// return;
-//
-// print_statement(n->child[0]);
-// if(!(n->child[1]->kind == sql_list_terminator ))
-// sqlprintf(", ");
-// print_sort_key_expressions(n->child[1]);
}
static void
@@ -690,6 +655,17 @@
print_statement(PFsql_t *n)
{
switch( n->kind ) {
+ case sql_asc:
+ sqlprintf("ASC");
+ break;
+ case sql_desc:
+ sqlprintf("DESC");
+ break;
+ case sql_order:
+ print_statement (n->child[0]);
+ sqlprintf(" ");
+ print_statement (n->child[1]);
+ break;
case sql_sum:
sqlprintf("SUM(");
print_statement( n->child[0] );
@@ -745,7 +721,7 @@
{
sqlprintf("(");
print_statement( n->child[0] );
- sqlprintf(") UNION (");
+ sqlprintf(") UNION ALL (");
print_statement( n->child[1] );
sqlprintf(")");
} break;
@@ -753,7 +729,7 @@
{
sqlprintf("(");
print_statement( n->child[0] );
- sqlprintf(") EXCEPT (");
+ sqlprintf(") EXCEPT ALL (");
print_statement( n->child[1] );
sqlprintf(")");
} break;
@@ -849,6 +825,17 @@
print_statement(n->child[1]);
sqlprintf(")");
} break;
+ case sql_like:
+ {
+ sqlprintf("(");
+ print_statement(n->child[0]);
+ sqlprintf(" LIKE '%%");
+ /* write the string without beginning and
+ trailing ' */
+ assert (n->child[1]->kind == sql_lit_str);
+ sqlprintf("%s", n->child[1]->sem.atom.val.s);
+ sqlprintf("\%%')");
+ } break;
case sql_gt:
{
sqlprintf("(");
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins