@@ -35,151 +35,8 @@
#else
# define TAGVIEW_DEFAULT_FILTER
#endif
-
-/**
-tagview_strxform_f is a typedef for funcs with the following policy:
-
-They accept a const string which they then transform into some other
-form. They return a transformed copy, which the caller is responsible
-for freeing.
-
-The intention of this is to provide a way for a generic query routine
-to format specific column data (e.g. transform an object ID into a
-link to that object).
-*/
-typedef char * (*tagview_strxform_f)( char const * );
-
-#if 0
-/** A no-op transformer which can be used as a placeholder. */
-static char * tagview_xf_copy( char const * uuid )
-{
- int len = strlen(uuid) + 1;
- char * ret = (char *) malloc( len );
- ret[len] = '\0';
- strncpy( ret, uuid, len-1 );
- return ret;
-}
-#endif
-
-/** Returns a hyperlink to uuid. */
-static char * tagview_xf_link_to_uuid( char const * uuid )
-{
- const int offset = 10;
- char shortname[offset+1];
- shortname[offset] = '\0';
- memcpy( shortname, uuid, offset );
- return mprintf( "<tt><a href='%s/vinfo/%s'><span style='font-size:1.5em'>%s</span>%s</a></tt>",
- g.zBaseURL, uuid, shortname, uuid+offset );
-}
-
-/** Returns a hyperlink to the given tag. */
-static char * tagview_xf_link_to_tagid( char const * tagid )
-{
- return mprintf( "<a href='%s/tagview?tagid=%s'>%s</a>",
- g.zBaseURL, tagid, tagid );
-}
-
-/** Returns a hyperlink to the named tag. */
-static char * tagview_xf_link_to_tagname( char const * tagid )
-{
- return mprintf( "<a href='%s/tagview/%s'>%s</a>",
- g.zBaseURL, tagid, tagid );
-}
-
-
-
-/**
-* tagview_run_query():
-*
-* A very primitive helper to run an SQL query and table-ize the
-* results.
-*
-* The sql parameter should be a single, complete SQL statement.
-*
-* The coln parameter is optional (it may be 0). If it is 0 then the
-* column names used in the output will be taken directly from the
-* SQL. If it is not null then it must have as many entries as the SQL
-* result has columns. Each entry is a column name for the SQL result
-* column of the same index. Any given entry may be 0, in which case
-* the column name from the SQL is used.
-*
-* The xform argument is an array of transformation functions (type
-* tagview_strxform_f). The array, or any single entry, may be 0, but
-* if the array is non-0 then it must have at least as many entries as
-* colnames does. Each index corresponds directly to an entry in
-* colnames and the SQL results. Any given entry may be 0. If it has
-* fewer, undefined behaviour results. If a column has an entry in
-* xform, then the xform function will be called to transform the
-* column data before rendering it. This function takes care of freeing
-* the strings created by the xform functions.
-*
-* Example:
-*
-* char const * const colnames[] = {
-* "Tag ID", "Tag Name", "Something Else", "UUID"
-* };
-* tagview_strxform_f xf[] = {
-* tagview_xf_link_to_tagid,
-* tagview_xf_link_to_tagname,
-* 0,
-* tagview_xf_link_to_uuid
-* };
-* tagview_run_query( "select a,b,c,d from foo", colnames, xf );
-*
-*/
-static void tagview_run_query(
- char const * sql,
- char const * const * coln,
- tagview_strxform_f * xform )
-{
-
- Stmt st;
- @ <table cellpadding='4px' border='1'><tbody>
- int i = 0;
- int rc = db_prepare( &st, sql );
- /**
- Achtung: makeheaders apparently can't pull the function
- name from this:
- if( SQLITE_OK != db_prepare( &st, sql ) )
- */
- if( SQLITE_OK != rc )
- {
- @ tagview_run_query(): Error processing SQL: [%s(sql)]
- return;
- }
- int colc = db_column_count(&st);
- @ <tr>
- for( i = 0; i < colc; ++i ) {
- if( coln )
- {
- @ <th>%s(coln[i] ? coln[i] : db_column_name(&st,i))</th>
- }
- else
- {
- @ <td>%s(db_column_name(&st,i))</td>
- }
- }
- @ </tr>
-
- while( SQLITE_ROW == db_step(&st) ){
- @ <tr>
- for( i = 0; i < colc; ++i ) {
- char * xf = 0;
- char const * xcf = 0;
- xcf = (xform && xform[i])
- ? (xf=(xform[i])(db_column_text(&st,i)))
- : db_column_text(&st,i);
- @ <td>%s(xcf)</td>
- if( xf ) free( xf );
- }
- @ </tr>
- }
- db_finalize( &st );
- @ </tbody></table>
-}
-
/**
Lists all tags matching the given LIKE clause (which
may be 0).
*/
@@ -212,15 +69,15 @@
if( likeclause ) free(likeclause);
char const * const colnames[] = {
"Tag ID", "Name", "Timestamp", "Version"
};
- tagview_strxform_f xf[] = {
- tagview_xf_link_to_tagid,
- tagview_xf_link_to_tagname,
+ string_unary_xform_f xf[] = {
+ strxform_link_to_tagid,
+ strxform_link_to_tagname,
0,
- tagview_xf_link_to_uuid
+ strxform_link_to_uuid
};
- tagview_run_query( sql, colnames, xf );
+ db_generic_query_view( sql, colnames, xf );
free( sql );
}
/**
@@ -259,14 +116,14 @@
tagid);
char const * const colnames[] = {
"Tag Name", "Timestamp", "Version"
};
- tagview_strxform_f xf[] = {
- tagview_xf_link_to_tagname,
+ string_unary_xform_f xf[] = {
+ strxform_link_to_tagname,
0,
- tagview_xf_link_to_uuid
+ strxform_link_to_uuid
};
- tagview_run_query( sql, colnames, xf );
+ db_generic_query_view( sql, colnames, xf );
free(sql);
}
/**
@@ -284,14 +141,14 @@
tagname);
char const * const colnames[] = {
"Tag ID", "Timestamp", "Version"
};
- tagview_strxform_f xf[] = {
- tagview_xf_link_to_tagid,
+ string_unary_xform_f xf[] = {
+ strxform_link_to_tagid,
0,
- tagview_xf_link_to_uuid
+ strxform_link_to_uuid
};
- tagview_run_query( sql, colnames, xf );
+ db_generic_query_view( sql, colnames, xf );
free( sql );
}