Changeset: c6774f5ec11b for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c6774f5ec11b
Modified Files:
pathfinder/compiler/algebra/algebra.c
pathfinder/compiler/algebra/builtins.c
pathfinder/compiler/algebra/logical.c
pathfinder/compiler/algebra/physical.c
pathfinder/compiler/algebra/prop/prop_ocol.c
pathfinder/compiler/include/algebra.h
pathfinder/compiler/include/builtins.h
pathfinder/compiler/include/sql.h
pathfinder/compiler/include/sql_mnemonic.h
pathfinder/compiler/mil/milgen.brg
pathfinder/compiler/semantics/xquery_fo.c
pathfinder/compiler/sql/lalg2sql.brg
pathfinder/compiler/sql/sql.c
pathfinder/compiler/sql/sqlprint.c
pathfinder/compiler/xmlimport/xml2lalg_converters.c
Branch: default
Log Message:
Changed input type of the substring operator and added SQL code generation
-- Changed the input types of the second (and third) argument
of the substring 1:1 operator from dbl to int.
-- Renamed alg_fun_fn_substring_dbl to alg_fun_fn_substring_len.
-- Extended the SQL code generation to cope with the two variants
of substring operators.
diffs (truncated from 454 to 300 lines):
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/algebra/algebra.c
--- a/pathfinder/compiler/algebra/algebra.c Thu Jul 29 13:37:44 2010 +0200
+++ b/pathfinder/compiler/algebra/algebra.c Sun Aug 01 21:59:04 2010 +0200
@@ -1189,7 +1189,7 @@
case alg_fun_pf_log: return "pf:log";
case alg_fun_fn_concat: return "fn:concat";
case alg_fun_fn_substring: return "fn:substring";
- case alg_fun_fn_substring_dbl: return "fn:substring3";
+ case alg_fun_fn_substring_len: return "fn:substring_len";
case alg_fun_fn_string_length: return "fn:string-length";
case alg_fun_fn_normalize_space: return "fn:normalize-space";
case alg_fun_fn_upper_case: return "fn:upper-case";
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/algebra/builtins.c
--- a/pathfinder/compiler/algebra/builtins.c Thu Jul 29 13:37:44 2010 +0200
+++ b/pathfinder/compiler/algebra/builtins.c Sun Aug 01 21:59:04 2010 +0200
@@ -1944,12 +1944,21 @@
proj (col_iter, col_iter))),
col_pos, lit_nat (1)),
col_item, lit_str (""))),
- project (cast (args[1].rel,
- col_cast,
- col_item,
- aat_dbl),
- proj (col_iter1, col_iter),
- proj (col_item1, col_cast)),
+ project (
+ cast (
+ fun_1to1 (
+ cast (args[1].rel,
+ col_cast,
+ col_item,
+ aat_dbl),
+ alg_fun_fn_round,
+ col_res,
+ collist (col_cast)),
+ col_item1,
+ col_res,
+ aat_int),
+ proj (col_iter1, col_iter),
+ proj (col_item1, col_item1)),
col_iter,
col_iter1),
alg_fun_fn_substring,
@@ -1967,7 +1976,7 @@
* <code>fn:substring(xs:string?, xs:double, xs:double)</code>
*/
struct PFla_pair_t
-PFbui_fn_substring_dbl (const PFla_op_t *loop,
+PFbui_fn_substring_len (const PFla_op_t *loop,
bool ordering,
PFla_op_t **side_effects,
struct PFla_pair_t *args)
@@ -1990,23 +1999,41 @@
proj (col_iter, col_iter))),
col_pos, lit_nat (1)),
col_item, lit_str (""))),
- project (cast (args[1].rel,
- col_cast,
- col_item,
- aat_dbl),
- proj (col_iter1, col_iter),
- proj (col_item1, col_cast)),
+ project (
+ cast (
+ fun_1to1 (
+ cast (args[1].rel,
+ col_cast,
+ col_item,
+ aat_dbl),
+ alg_fun_fn_round,
+ col_res,
+ collist (col_cast)),
+ col_item1,
+ col_res,
+ aat_int),
+ proj (col_iter1, col_iter),
+ proj (col_item1, col_item1)),
col_iter,
col_iter1),
- project (cast (args[2].rel,
- col_cast,
- col_item,
- aat_dbl),
- proj (col_iter2, col_iter),
- proj (col_item2, col_cast)),
+ project (
+ cast (
+ fun_1to1 (
+ cast (args[2].rel,
+ col_cast,
+ col_item,
+ aat_dbl),
+ alg_fun_fn_round,
+ col_res,
+ collist (col_cast)),
+ col_item1,
+ col_res,
+ aat_int),
+ proj (col_iter2, col_iter),
+ proj (col_item2, col_item1)),
col_iter,
col_iter2),
- alg_fun_fn_substring_dbl,
+ alg_fun_fn_substring_len,
col_res,
collist (col_item, col_item1, col_item2)),
proj (col_iter, col_iter),
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/algebra/logical.c
--- a/pathfinder/compiler/algebra/logical.c Thu Jul 29 13:37:44 2010 +0200
+++ b/pathfinder/compiler/algebra/logical.c Sun Aug 01 21:59:04 2010 +0200
@@ -1428,18 +1428,18 @@
assert (clsize (refs) == 2);
/* make sure both columns are of type str & dbl */
assert (n->schema.items[ix[0]].type == aat_str);
- assert (n->schema.items[ix[1]].type == aat_dbl);
+ assert (n->schema.items[ix[1]].type == aat_int);
res_type = aat_str;
break;
- case alg_fun_fn_substring_dbl:
+ case alg_fun_fn_substring_len:
assert (clsize (refs) == 3);
/* make sure columns are of type str & dbl */
assert (n->schema.items[ix[0]].type == aat_str);
- assert (n->schema.items[ix[1]].type == aat_dbl &&
- n->schema.items[ix[2]].type == aat_dbl );
+ assert (n->schema.items[ix[1]].type == aat_int &&
+ n->schema.items[ix[2]].type == aat_int );
res_type = aat_str;
break;
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/algebra/physical.c
--- a/pathfinder/compiler/algebra/physical.c Thu Jul 29 13:37:44 2010 +0200
+++ b/pathfinder/compiler/algebra/physical.c Sun Aug 01 21:59:04 2010 +0200
@@ -1635,17 +1635,17 @@
/* make sure both columns are of type str & dbl */
assert (n->schema.items[ix[0]].type == aat_str);
- assert (n->schema.items[ix[1]].type == aat_dbl);
+ assert (n->schema.items[ix[1]].type == aat_int);
res_type = aat_str;
break;
- case alg_fun_fn_substring_dbl:
+ case alg_fun_fn_substring_len:
assert (clsize (refs) == 3);
/* make sure columns are of type str & dbl */
assert (n->schema.items[ix[0]].type == aat_str);
- assert (n->schema.items[ix[1]].type == aat_dbl &&
- n->schema.items[ix[2]].type == aat_dbl);
+ assert (n->schema.items[ix[1]].type == aat_int &&
+ n->schema.items[ix[2]].type == aat_int);
res_type = aat_str;
break;
diff -r 76be7701721b -r c6774f5ec11b
pathfinder/compiler/algebra/prop/prop_ocol.c
--- a/pathfinder/compiler/algebra/prop/prop_ocol.c Thu Jul 29 13:37:44
2010 +0200
+++ b/pathfinder/compiler/algebra/prop/prop_ocol.c Sun Aug 01 21:59:04
2010 +0200
@@ -346,17 +346,17 @@
/* make sure both columns are of type str & dbl */
assert (ocol_at (L(n), ix[0]).type == aat_str);
- assert (ocol_at (L(n), ix[1]).type == aat_dbl);
+ assert (ocol_at (L(n), ix[1]).type == aat_int);
res_type = aat_str;
break;
- case alg_fun_fn_substring_dbl:
+ case alg_fun_fn_substring_len:
assert (clsize (n->sem.fun_1to1.refs) == 3);
/* make sure both columns are of type str & dbl */
assert (ocol_at (L(n), ix[0]).type == aat_str);
- assert (ocol_at (L(n), ix[1]).type == aat_dbl &&
- ocol_at (L(n), ix[2]).type == aat_dbl);
+ assert (ocol_at (L(n), ix[1]).type == aat_int &&
+ ocol_at (L(n), ix[2]).type == aat_int);
res_type = aat_str;
break;
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/include/algebra.h
--- a/pathfinder/compiler/include/algebra.h Thu Jul 29 13:37:44 2010 +0200
+++ b/pathfinder/compiler/include/algebra.h Sun Aug 01 21:59:04 2010 +0200
@@ -384,7 +384,7 @@
, alg_fun_pf_sqrt /**< pf:sqrt */
, alg_fun_fn_concat /**< fn:concat */
, alg_fun_fn_substring /**< fn:substring */
- , alg_fun_fn_substring_dbl /**< fn:substring with length specified*/
+ , alg_fun_fn_substring_len /**< fn:substring with length specified */
, alg_fun_fn_string_length /**< fn:string-length */
, alg_fun_fn_normalize_space /**< fn:normalize-space */
, alg_fun_fn_upper_case /**< fn:upper-case */
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/include/builtins.h
--- a/pathfinder/compiler/include/builtins.h Thu Jul 29 13:37:44 2010 +0200
+++ b/pathfinder/compiler/include/builtins.h Sun Aug 01 21:59:04 2010 +0200
@@ -406,7 +406,7 @@
bool ordering,
PFla_op_t **side_effects,
struct PFla_pair_t *args);
-struct PFla_pair_t PFbui_fn_substring_dbl (const PFla_op_t *loop,
+struct PFla_pair_t PFbui_fn_substring_len (const PFla_op_t *loop,
bool ordering,
PFla_op_t **side_effects,
struct PFla_pair_t *args);
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/include/sql.h
--- a/pathfinder/compiler/include/sql.h Thu Jul 29 13:37:44 2010 +0200
+++ b/pathfinder/compiler/include/sql.h Sun Aug 01 21:59:04 2010 +0200
@@ -166,6 +166,8 @@
, sql_abs /* abs expression */
, sql_concat /* string concatenation */
+ , sql_substring /* substring search */
+ , sql_substring_length /* substring search with length */
, sql_is /* IS predicate */
, sql_is_not /* IS NOT predicate */
@@ -737,6 +739,20 @@
*/
PFsql_t * PFsql_concat (const PFsql_t *a, const PFsql_t *b);
+/**
+ * Create a SQL tree node representing the SQL
+ * substring operator.
+ */
+PFsql_t * PFsql_substring (const PFsql_t *a, const PFsql_t *b);
+
+/**
+ * Create a SQL tree node representing the SQL
+ * substring operator with length.
+ */
+PFsql_t * PFsql_substring_length (const PFsql_t *a,
+ const PFsql_t *b,
+ const PFsql_t *c);
+
/* .......... Table Functions ........... */
PFsql_t *PFsql_values (const PFsql_t *a);
PFsql_t *PFsql_list_list_ (unsigned int count, const PFsql_t **list);
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/include/sql_mnemonic.h
--- a/pathfinder/compiler/include/sql_mnemonic.h Thu Jul 29 13:37:44
2010 +0200
+++ b/pathfinder/compiler/include/sql_mnemonic.h Sun Aug 01 21:59:04
2010 +0200
@@ -104,6 +104,8 @@
/* .......... String Functions ........... */
#define concat(a,b) PFsql_concat(a,b)
+#define substring(a,b) PFsql_substring(a,b)
+#define substring_len(a,b,c) PFsql_substring_length(a,b,c)
/* .......... Table Functions ............ */
#define values(a) PFsql_values(a)
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/mil/milgen.brg
--- a/pathfinder/compiler/mil/milgen.brg Thu Jul 29 13:37:44 2010 +0200
+++ b/pathfinder/compiler/mil/milgen.brg Sun Aug 01 21:59:04 2010 +0200
@@ -5432,13 +5432,13 @@
mstring (
VAR (L(p)->env, col1, aat_str),
mmax( msub( mcast (type (mty_int),
- mround_up( VAR
(L(p)->env,
- col2,
- aat_dbl))),
+ VAR (L(p)->env,
+ col2,
+ aat_int)),
lit_int(1)),
lit_int(0)))));
} break; /* fold) */
- case alg_fun_fn_substring_dbl: /* fold( */
+ case alg_fun_fn_substring_len: /* fold( */
{
PFalg_col_t col1, col2, col3;
@@ -5452,15 +5452,15 @@
mstring2 (
VAR (L(p)->env, col1, aat_str),
mmax( msub( mcast (type (mty_int),
- mround_up( VAR
(L(p)->env,
- col2,
- aat_dbl))),
+ VAR (L(p)->env,
+ col2,
+ aat_int)),
lit_int(1)),
lit_int(0)),
mcast (type (mty_int),
- mround_up( VAR (L(p)->env,
- col3,
- aat_dbl))))));
+ VAR (L(p)->env,
+ col3,
+ aat_int)))));
} break; /* fold) */
case alg_fun_fn_string_length: /* fold( */
diff -r 76be7701721b -r c6774f5ec11b pathfinder/compiler/semantics/xquery_fo.c
--- a/pathfinder/compiler/semantics/xquery_fo.c Thu Jul 29 13:37:44 2010 +0200
+++ b/pathfinder/compiler/semantics/xquery_fo.c Sun Aug 01 21:59:04 2010 +0200
@@ -1048,7 +1048,7 @@
PFty_xs_double (),
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list