Update of /cvsroot/monetdb/pathfinder/compiler/algebra
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv21943/compiler/algebra
Modified Files:
builtins.c logical.c
Log Message:
This check-in contains the PTIJAH implementation using the Algebra version of
Pathfinder. All PFTIJAH functions are implemented using the new fun_call /
fun_param operations and (after some coaching by JanR:) this worked
pretty well.
Notes:
- all functions except tijah:ft-index-info() are implemented.
- The maintainance of the Full-Text indices is now also implemented using a
'tape'. So indices are only modified AFTER the query.
- Implementatation may be a little bit buggy because only operations on
small synthetic test examples have been test an no real complex scenarios
have been tried.
The coming weeks I will try to solve these small problems but I thought it
is better to synchronize early.
Jan Flokstra.
U logical.c
Index: logical.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/logical.c,v
retrieving revision 1.93
retrieving revision 1.94
diff -u -d -r1.93 -r1.94
--- logical.c 9 Apr 2008 07:11:45 -0000 1.93
+++ logical.c 10 Apr 2008 13:38:39 -0000 1.94
@@ -1388,7 +1388,6 @@
res_type = aat_int;
break;
-
case alg_fun_fn_normalize_space:
case alg_fun_fn_upper_case:
case alg_fun_fn_lower_case:
U builtins.c
Index: builtins.c
===================================================================
RCS file: /cvsroot/monetdb/pathfinder/compiler/algebra/builtins.c,v
retrieving revision 1.84
retrieving revision 1.85
diff -u -d -r1.84 -r1.85
--- builtins.c 3 Apr 2008 09:42:11 -0000 1.84
+++ builtins.c 10 Apr 2008 13:38:38 -0000 1.85
@@ -44,6 +44,7 @@
#include <assert.h>
#include <stdio.h>
+#include "mem.h"
#include "builtins.h"
#include "logical.h"
@@ -4620,6 +4621,471 @@
.frag = args[0].frag };
}
+#ifdef HAVE_PFTIJAH
+/* ----------------------------------------------------- */
+/* #4. PFTIJAH SPECIFIC FUNCTIONS */
+/* ----------------------------------------------------- */
+
+/*
+ * PFTIJAH defines. I decided not make a seperate include file for
+ * pftijah so ensure that these defines are exactly the same as in
+ * ../mil/milgen.brg
+ */
+
+#define MYNODEKIND aat_pnode
+#define DOCMGMTTYPE aat_docmgmt
+
+#define PFT_FUN(F) (strncmp(F,"pftijah_",8)==0)
+
+#define PFT_QUERY_N_XX "pftijah_query_n_xx"
+#define PFT_QUERY_N_SX "pftijah_query_n_sx"
+#define PFT_QUERY_N_XO "pftijah_query_n_xo"
+#define PFT_QUERY_N_SO "pftijah_query_n_so"
+#define PFT_QUERY_I_XX "pftijah_query_i_xx"
+#define PFT_QUERY_I_SX "pftijah_query_i_sx"
+#define PFT_QUERY_I_XO "pftijah_query_i_xo"
+#define PFT_QUERY_I_SO "pftijah_query_i_so"
+
+#define PTF_QUERY_NODES(N) (N[14]=='n')
+#define PTF_QUERY_STARTNODES(N) (N[16]=='s')
+#define PTF_QUERY_OPTIONS(N) (N[17]=='o')
+
+#define PFT_FUN_QUERY(F) (strncmp(F,"pftijah_query_",14)==0)
+
+#define PFT_MANAGE_FTI_C_XX "pftijah_manage_fti_c_xx"
+#define PFT_MANAGE_FTI_C_CX "pftijah_manage_fti_c_cx"
+#define PFT_MANAGE_FTI_C_XO "pftijah_manage_fti_c_xo"
+#define PFT_MANAGE_FTI_C_CO "pftijah_manage_fti_c_co"
+#define PFT_MANAGE_FTI_E_CX "pftijah_manage_fti_e_cx"
+#define PFT_MANAGE_FTI_E_CO "pftijah_manage_fti_e_co"
+#define PFT_MANAGE_FTI_R_XX "pftijah_manage_fti_r_xx"
+#define PFT_MANAGE_FTI_R_XO "pftijah_manage_fti_r_xo"
+
+#define PFT_FUN_MANAGE(F) (strncmp(F,"pftijah_manage_",15)==0)
+#define PFT_FUN_MANAGE_KIND(F) (F[19])
+#define PFT_FUN_MANAGE_COLL(F) (F[21] == 'c')
+#define PFT_FUN_MANAGE_OPT(F) (F[22] == 'o')
+
+#define PFT_SCORE "pftijah_score"
+#define PFT_NODES "pftijah_nodes"
+#define PFT_INFO "pftijah_info"
+#define PFT_TOKENIZE "pftijah_tokenize"
+#define PFT_RESSIZE "pftijah_ressize"
+
+PFalg_schema_t pft_empty_schema(PFalg_simple_type_t item_t) {
+ PFalg_schema_t schema;
+ schema.count = 3;
+ // INCOMPLETE, what about freeing this space
+ schema.items = PFmalloc (3 * sizeof (PFalg_schema_t));
+
+ schema.items[0].name = att_iter;
+ schema.items[0].type = aat_nat;
+ schema.items[1].name = att_pos;
+ schema.items[1].type = aat_nat;
+ schema.items[2].name = att_item;
+ schema.items[2].type = item_t;
+
+ return schema;
+}
+
+struct PFla_pair_t pft_query_param0() {
+ return (struct PFla_pair_t) {
+ .rel = nil(),
+ .frag = PFla_empty_set () };
+}
+
+struct PFla_pair_t pft_query_param1(struct PFla_pair_t *p1,PFalg_simple_type_t
itemType) {
+ return (struct PFla_pair_t) {
+ .rel = fun_param(
+ p1->rel,
+ nil(),
+ pft_empty_schema(itemType)),
+ .frag = PFla_empty_set () };
+}
+
+struct PFla_pair_t pft_query_param2(struct PFla_pair_t *p1,
PFalg_simple_type_t itemType1, struct PFla_pair_t *p2, PFalg_simple_type_t
itemType2) {
+ return (struct PFla_pair_t) {
+ .rel = fun_param(
+ p1->rel,
+ fun_param(
+ p2->rel,
+ nil(),
+ pft_empty_schema(itemType2)),
+ pft_empty_schema(itemType1)),
+ .frag = PFla_empty_set () };
+}
+
+struct PFla_pair_t pft_query_param3(struct PFla_pair_t *p1,
PFalg_simple_type_t itemType1, struct PFla_pair_t *p2, PFalg_simple_type_t
itemType2, struct PFla_pair_t *p3, PFalg_simple_type_t itemType3) {
+ return (struct PFla_pair_t) {
+ .rel = fun_param(
+ p1->rel,
+ fun_param(
+ p2->rel,
+ fun_param(
+ p3->rel,
+ nil(),
+ pft_empty_schema(itemType3)),
+ pft_empty_schema(itemType2)),
+ pft_empty_schema(itemType1)),
+ .frag = PFla_empty_set () };
+}
+
+/*
+ * The main query function
+ */
+
+struct PFla_pair_t
+PFbui_tijah_query_HANDLER(
+ const PFla_op_t *loop,
+ bool ordering,
+ char* query_name,
+ PFalg_simple_type_t funcall_t,
+ PFla_pair_t p_fun_param)
+{
+ (void) ordering;
+
+ return (struct PFla_pair_t) {
+ .rel = fun_call(
+ loop,
+ p_fun_param.rel,
+ pft_empty_schema(funcall_t),
+ alg_fun_call_tijah,
+ PFqname (PFns_wild, query_name),
+ NULL, /* ctx */
+ att_iter, /* iter */
+ alg_occ_one_or_more /* occ_ind */
+ ),
+ .frag = PFla_empty_set () };
+}
+
+/*
+ * param creation helper functions
+ */
+
+
+/*
+ * The 'id' returning functions
+ */
+
+struct PFla_pair_t
+PFbui_tijah_query_i_xx(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_QUERY_I_XX,
+ aat_int,
+ pft_query_param1(&args[0],aat_str)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_query_i_sx(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_QUERY_I_SX,
+ aat_int,
+ pft_query_param2(&args[0],MYNODEKIND,&args[1],aat_str)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_query_i_xo(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_QUERY_I_XO,
+ aat_int,
+ pft_query_param2(&args[0],aat_str,&args[1],MYNODEKIND)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_query_i_so(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_QUERY_I_SO,
+ aat_int,
+
pft_query_param3(&args[0],MYNODEKIND,&args[1],aat_str,&args[2],MYNODEKIND)
+ );
+}
+
+/*
+ * The node returning functions
+ */
+
+struct PFla_pair_t
+PFbui_tijah_query_n_xx(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_QUERY_N_XX,
+ MYNODEKIND,
+ pft_query_param1(&args[0],aat_str)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_query_n_sx(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_QUERY_N_SX,
+ MYNODEKIND,
+ pft_query_param2(&args[0],MYNODEKIND,&args[1],aat_str)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_query_n_xo(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_QUERY_N_XO,
+ MYNODEKIND,
+ pft_query_param2(&args[0],aat_str,&args[1],MYNODEKIND)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_query_n_so(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_QUERY_N_SO,
+ MYNODEKIND,
+
pft_query_param3(&args[0],MYNODEKIND,&args[1],aat_str,&args[2],MYNODEKIND)
+ );
+}
+
+/*
+ *
+ */
+
+struct PFla_pair_t
+PFbui_tijah_manage_fti_HANDLER(
+ const PFla_op_t *loop,
+ bool ordering,
+ char* fun_name,
+ PFla_pair_t p_fun_param)
+{
+ (void) ordering;
+
+ return (struct PFla_pair_t) {
+ .rel = fun_call(
+ loop,
+ p_fun_param.rel,
+ pft_empty_schema(DOCMGMTTYPE),
+ alg_fun_call_tijah,
+ PFqname (PFns_wild, fun_name),
+ NULL, /* ctx */
+ att_iter, /* iter */
+ alg_occ_one_or_more /* occ_ind */
+ ),
+ .frag = PFla_empty_set () };
+}
+
+struct PFla_pair_t PFbui_manage_fti_c_xx(const PFla_op_t *loop,
+ bool ordering,
+ struct PFla_pair_t *args)
+{
+ (void)args;
+ return PFbui_tijah_manage_fti_HANDLER(
+ loop,
+ ordering,
+ PFT_MANAGE_FTI_C_XX,
+ pft_query_param0()
+ );
+}
+
+struct PFla_pair_t PFbui_manage_fti_c_cx(const PFla_op_t *loop,
+ bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_manage_fti_HANDLER(
+ loop,
+ ordering,
+ PFT_MANAGE_FTI_C_CX,
+ pft_query_param1(&args[0],aat_str)
+ );
+}
+
+struct PFla_pair_t PFbui_manage_fti_c_xo(const PFla_op_t *loop,
+ bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_manage_fti_HANDLER(
+ loop,
+ ordering,
+ PFT_MANAGE_FTI_C_XO,
+ pft_query_param1(&args[0],MYNODEKIND)
+ );
+}
+
+struct PFla_pair_t PFbui_manage_fti_c_co(const PFla_op_t *loop,
+ bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_manage_fti_HANDLER(
+ loop,
+ ordering,
+ PFT_MANAGE_FTI_C_CO,
+ pft_query_param2(&args[0],aat_str,&args[1],MYNODEKIND)
+ );
+}
+
+struct PFla_pair_t PFbui_manage_fti_e_cx(const PFla_op_t *loop,
+ bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_manage_fti_HANDLER(
+ loop,
+ ordering,
+ PFT_MANAGE_FTI_E_CX,
+ pft_query_param1(&args[0],aat_str)
+ );
+}
+
+struct PFla_pair_t PFbui_manage_fti_e_co(const PFla_op_t *loop,
+ bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_manage_fti_HANDLER(
+ loop,
+ ordering,
+ PFT_MANAGE_FTI_E_CO,
+ pft_query_param2(&args[0],aat_str,&args[1],MYNODEKIND)
+ );
+}
+
+struct PFla_pair_t PFbui_manage_fti_r_xx(const PFla_op_t *loop,
+ bool ordering,
+ struct PFla_pair_t *args)
+{
+ (void)args;
+ return PFbui_tijah_manage_fti_HANDLER(
+ loop,
+ ordering,
+ PFT_MANAGE_FTI_R_XX,
+ pft_query_param0()
+ );
+}
+
+struct PFla_pair_t PFbui_manage_fti_r_xo(const PFla_op_t *loop,
+ bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_manage_fti_HANDLER(
+ loop,
+ ordering,
+ PFT_MANAGE_FTI_R_XO,
+ pft_query_param1(&args[0],MYNODEKIND)
+ );
+}
+
+/*
+ *
+ */
+
+struct PFla_pair_t
+PFbui_tijah_score(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_SCORE,
+ aat_dbl,
+ pft_query_param2(&args[0],aat_int,&args[1],MYNODEKIND)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_nodes(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_NODES,
+ MYNODEKIND,
+ pft_query_param1(&args[0],aat_int)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_ft_index_info(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ (void)args;
+
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_INFO,
+ MYNODEKIND,
+ pft_query_param0()
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_ft_index_info_s(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_INFO,
+ MYNODEKIND,
+ pft_query_param1(&args[0],aat_str)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_tokenize(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_TOKENIZE,
+ aat_str,
+ pft_query_param1(&args[0],aat_str)
+ );
+}
+
+struct PFla_pair_t
+PFbui_tijah_resultsize(const PFla_op_t *loop, bool ordering,
+ struct PFla_pair_t *args)
+{
+ return PFbui_tijah_query_HANDLER(
+ loop,
+ ordering,
+ PFT_RESSIZE,
+ aat_int,
+ pft_query_param1(&args[0],aat_int)
+ );
+}
+
+#endif /* PFTIJAH */
+
/**
* Built-in function pf:add-doc(string, string)
*/
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Monetdb-pf-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins