[Refdb-cvs] CVS: refdb/src refdbdref.c,1.65.2.10,1.65.2.11
Status: Beta
Brought to you by:
mhoenicka
From: Markus H. <mho...@us...> - 2005-06-09 19:10:49
|
Update of /cvsroot/refdb/refdb/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv21351 Modified Files: Tag: Release_0_9_5_stable refdbdref.c Log Message: getref(): add support for the JF pseudo target Index: refdbdref.c =================================================================== RCS file: /cvsroot/refdb/refdb/src/refdbdref.c,v retrieving revision 1.65.2.10 retrieving revision 1.65.2.11 diff -u -U2 -r1.65.2.10 -r1.65.2.11 --- refdbdref.c 29 May 2005 19:35:37 -0000 1.65.2.10 +++ refdbdref.c 9 Jun 2005 19:10:33 -0000 1.65.2.11 @@ -2762,64 +2762,34 @@ /*----------------------------------------------------------------*/ /* journal */ - else if (strncmp(token, ":JO:", 4) == 0 || strncmp(token, ":JF:", 4) == 0 || strncmp(token, ":J1:", 4) == 0 || strncmp(token, ":J2:", 4) == 0) { /* periodical query */ + else if (strncmp(token, ":JO:", 4) == 0 + || strncmp(token, ":JF:", 4) == 0 + || strncmp(token, ":J1:", 4) == 0 + || strncmp(token, ":J2:", 4) == 0 + || strncmp(token, ":JX:", 4) == 0) { /* periodical query */ + char my_token[5]; /* backup of token */ + char my_bool[4]; + strncpy(my_token, token, 4); + my_token[4] = '\0'; strncpy(operator, &token[4], sqltoken.length-4); /* save the comparison operator */ operator[sqltoken.length-4] = '\0'; /* terminate string */ - /* assemble a surrogate subselect query */ - if (strncmp(token, ":JF:", 4) == 0) { - strcpy(sql_command, "SELECT t_refdb.refdb_periodical_id FROM t_refdb, t_periodical WHERE t_periodical.periodical_id=t_refdb.refdb_periodical_id AND t_periodical.periodical_name"); - } - else if (strncmp(token, ":JO:", 4) == 0) { - strcpy(sql_command, "SELECT t_refdb.refdb_periodical_id FROM t_refdb, t_periodical WHERE t_periodical.periodical_id=t_refdb.refdb_periodical_id AND t_periodical.periodical_abbrev"); - } - else if (strncmp(token, ":J1:", 4) == 0) { - strcpy(sql_command, "SELECT t_refdb.refdb_periodical_id FROM t_refdb, t_periodical WHERE t_periodical.periodical_id=t_refdb.refdb_periodical_id AND t_periodical.periodical_custabbrev1"); - } - else { /* :J2: */ - strcpy(sql_command, "SELECT t_refdb.refdb_periodical_id FROM t_refdb, t_periodical WHERE t_periodical.periodical_id=t_refdb.refdb_periodical_id AND t_periodical.periodical_custabbrev2"); - } - /* translate operator to regexp operator */ if (*operator == '=') { -/* sprintf(bitsandpieces, " %s ", my_dbi_conn_get_cap(conn, "rlike")); */ - if ((new_sql_command = mstrcat(sql_command, " = ", &sql_command_len, 0)) == NULL) { - retval = 1; - break; - } - else { - sql_command = new_sql_command; - } + strcpy(bitsandpieces, " = "); + strcpy(my_bool, "OR"); } else if (*operator == '~') { sprintf(bitsandpieces, " %s ", my_dbi_conn_get_cap(conn, "rlike")); - if ((new_sql_command = mstrcat(sql_command, bitsandpieces, &sql_command_len, 0)) == NULL) { - retval = 1; - break; - } - else { - sql_command = new_sql_command; - } + strcpy(my_bool, "OR"); } else if (*(operator+1) == '=') { -/* sprintf(bitsandpieces, " %s ", my_dbi_conn_get_cap(conn, "not_rlike")); */ - if ((new_sql_command = mstrcat(sql_command, " != ", &sql_command_len, 0)) == NULL) { - retval = 1; - break; - } - else { - sql_command = new_sql_command; - } + strcpy(bitsandpieces, " != "); + strcpy(my_bool, "AND"); } else { /* treat all other operators as non-equal regexp*/ sprintf(bitsandpieces, " %s ", my_dbi_conn_get_cap(conn, "not_rlike")); - if ((new_sql_command = mstrcat(sql_command, bitsandpieces, &sql_command_len, 0)) == NULL) { - retval = 1; - break; - } - else { - sql_command = new_sql_command; - } + strcpy(my_bool, "AND"); } - + token = sql_tokenize(newtoken, &sqltoken); newtoken = sqltoken.next_token; @@ -2842,7 +2812,17 @@ break; } - if ((new_sql_command = mstrcat(sql_command, quoted_token, &sql_command_len, 0)) == NULL) { + } + else { + quoted_token = mstrdup(""); + } + + /* assemble a surrogate subselect query */ + if (strncmp(my_token, ":JX:", 4) == 0) { + char jxbuffer[2048]; + snprintf(jxbuffer, 2048, "SELECT t_refdb.refdb_periodical_id FROM t_refdb, t_periodical WHERE t_periodical.periodical_id=t_refdb.refdb_periodical_id AND (t_periodical.periodical_name%s%s %s t_periodical.periodical_abbrev%s%s %s t_periodical.periodical_custabbrev1%s%s %s t_periodical.periodical_custabbrev2%s%s)", bitsandpieces, quoted_token, my_bool, bitsandpieces, quoted_token, my_bool, bitsandpieces, quoted_token, my_bool, bitsandpieces, quoted_token); + free(quoted_token); + *sql_command = '\0'; + if ((new_sql_command = mstrcat(sql_command, jxbuffer, &sql_command_len, 0)) == NULL) { retval = 1; - free(quoted_token); break; } @@ -2850,8 +2830,41 @@ sql_command = new_sql_command; } - free(quoted_token); } - LOG_PRINT(LOG_DEBUG, sql_command); + else { + if (strncmp(my_token, ":JF:", 4) == 0) { + strcpy(sql_command, "SELECT t_refdb.refdb_periodical_id FROM t_refdb, t_periodical WHERE t_periodical.periodical_id=t_refdb.refdb_periodical_id AND t_periodical.periodical_name"); + } + else if (strncmp(my_token, ":JO:", 4) == 0) { + strcpy(sql_command, "SELECT t_refdb.refdb_periodical_id FROM t_refdb, t_periodical WHERE t_periodical.periodical_id=t_refdb.refdb_periodical_id AND t_periodical.periodical_abbrev"); + } + else if (strncmp(my_token, ":J1:", 4) == 0) { + strcpy(sql_command, "SELECT t_refdb.refdb_periodical_id FROM t_refdb, t_periodical WHERE t_periodical.periodical_id=t_refdb.refdb_periodical_id AND t_periodical.periodical_custabbrev1"); + } + else if (strncmp(my_token, ":J2:", 4) == 0){ + strcpy(sql_command, "SELECT t_refdb.refdb_periodical_id FROM t_refdb, t_periodical WHERE t_periodical.periodical_id=t_refdb.refdb_periodical_id AND t_periodical.periodical_custabbrev2"); + } + if ((new_sql_command = mstrcat(sql_command, bitsandpieces, &sql_command_len, 0)) == NULL) { + retval = 1; + break; + } + else { + sql_command = new_sql_command; + } + + if (quoted_token != NULL) { + if ((new_sql_command = mstrcat(sql_command, quoted_token, &sql_command_len, 0)) == NULL) { + retval = 1; + free(quoted_token); + break; + } + else { + sql_command = new_sql_command; + } + free(quoted_token); + } + } /* end if JX */ + + LOG_PRINT(LOG_DEBUG, sql_command); dbires = dbi_conn_query(conn, sql_command); if (!dbires) { |