From 8bea324518ec640e01c386a670abad5734b8c6f9 Mon Sep 17 00:00:00 2001 From: scottmk Date: Tue, 24 Feb 2009 02:29:07 +0000 Subject: [PATCH] Performance tweaks to SELECT(): eliminated a couple of unnecessary IDL lookups, a couple of unnecessary variables, and several unnecessary calls to strlen(). Also renamed a few local variables to suit my taste. git-svn-id: svn://svn.open-ils.org/ILS/trunk@12277 dcc99617-32d9-48b4-a31d-7c20da2025e4 --- Open-ILS/src/c-apps/oils_cstore.c | 70 ++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/Open-ILS/src/c-apps/oils_cstore.c b/Open-ILS/src/c-apps/oils_cstore.c index 5ee1056bcd..c2c297b886 100644 --- a/Open-ILS/src/c-apps/oils_cstore.c +++ b/Open-ILS/src/c-apps/oils_cstore.c @@ -2613,22 +2613,20 @@ char* SELECT ( OSRF_BUFFER_ADD_CHAR( select_buf, ',' ); } - // ... if it's a string, just toss it on the pile - if (selfield->type == JSON_STRING) { - - // again, just to be safe - const char* _requested_col = selfield->value.s; - osrfHash* field = osrfHashGet( class_field_set, _requested_col ); - if (!field) continue; // No such field in current class; skip it - - const char* col_name = osrfHashGet(field, "name"); - - if (locale) { - const char* i18n; - if (flags & DISABLE_I18N) - i18n = NULL; + // ... if it's a string, just toss it on the pile + if (selfield->type == JSON_STRING) { + + // again, just to be safe + const char* col_name = selfield->value.s; + osrfHash* field_def = osrfHashGet( class_field_set, col_name ); + if ( !field_def ) continue; // No such field in current class; skip it + + if (locale) { + const char* i18n; + if (flags & DISABLE_I18N) + i18n = NULL; else - i18n = osrfHashGet(field, "i18n"); + i18n = osrfHashGet(field_def, "i18n"); if( str_is_true( i18n ) ) { buffer_fadd( select_buf, @@ -2641,53 +2639,51 @@ char* SELECT ( buffer_fadd(select_buf, " \"%s\".%s AS \"%s\"", cname, col_name, col_name ); } - // ... but it could be an object, in which case we check for a Field Transform - } else { + // ... but it could be an object, in which case we check for a Field Transform + } else { - char* _column = jsonObjectToSimpleString( jsonObjectGetKeyConst( selfield, "column" ) ); + char* col_name = jsonObjectToSimpleString( jsonObjectGetKeyConst( selfield, "column" ) ); - // Get the field definition from the IDL - osrfHash* field = osrfHashGet( class_field_set, _column ); - if (!field) continue; // No such field defined in IDL. Skip it. + // Get the field definition from the IDL + osrfHash* field_def = osrfHashGet( class_field_set, col_name ); + if ( !field_def ) continue; // No such field defined in IDL. Skip it. // Decide what to use as a column alias char* _alias; if ((tmp_const = jsonObjectGetKeyConst( selfield, "alias" ))) { _alias = jsonObjectToSimpleString( tmp_const ); - free(_column); - } else { // Use column name as its own alias - _alias = _column; + } else { // Use field name as the alias + _alias = col_name; } - _column = NULL; // To emphasize that we're through with _column if (jsonObjectGetKeyConst( selfield, "transform" )) { - char* transform_str = searchFieldTransform(cname, field, selfield); + char* transform_str = searchFieldTransform(cname, field_def, selfield); buffer_fadd(select_buf, " %s AS \"%s\"", transform_str, _alias); free(transform_str); } else { - const char* fname = osrfHashGet(field, "name"); - if (locale) { const char* i18n; if (flags & DISABLE_I18N) i18n = NULL; else - i18n = osrfHashGet(field, "i18n"); + i18n = osrfHashGet(field_def, "i18n"); if( str_is_true( i18n ) ) { buffer_fadd( select_buf, " oils_i18n_xlate('%s', '%s', '%s', '%s', \"%s\".%s::TEXT, '%s') AS \"%s\"", - class_tname, cname, fname, class_pkey, cname, class_pkey, locale, _alias); + class_tname, cname, col_name, class_pkey, cname, class_pkey, locale, _alias); } else { - buffer_fadd(select_buf, " \"%s\".%s AS \"%s\"", cname, fname, _alias); + buffer_fadd(select_buf, " \"%s\".%s AS \"%s\"", cname, col_name, _alias); } } else { - buffer_fadd(select_buf, " \"%s\".%s AS \"%s\"", cname, fname, _alias); + buffer_fadd(select_buf, " \"%s\".%s AS \"%s\"", cname, col_name, _alias); } } - free(_alias); + if( _alias != col_name ) + free(_alias); + free( col_name ); } if (is_agg->size || (flags & SELECT_DISTINCT)) { @@ -2966,7 +2962,7 @@ char* SELECT ( string = buffer_release(group_buf); - if (strlen(string)) { + if ( *string ) { OSRF_BUFFER_ADD( sql_buf, " GROUP BY " ); OSRF_BUFFER_ADD( sql_buf, string ); } @@ -2975,7 +2971,7 @@ char* SELECT ( string = buffer_release(having_buf); - if (strlen(string)) { + if ( *string ) { OSRF_BUFFER_ADD( sql_buf, " HAVING " ); OSRF_BUFFER_ADD( sql_buf, string ); } @@ -2984,7 +2980,7 @@ char* SELECT ( string = buffer_release(order_buf); - if (strlen(string)) { + if ( *string ) { OSRF_BUFFER_ADD( sql_buf, " ORDER BY " ); OSRF_BUFFER_ADD( sql_buf, string ); } @@ -3238,7 +3234,7 @@ static char* buildSELECT ( jsonObject* search_hash, jsonObject* order_hash, osrf string = buffer_release(order_buf); - if (strlen(string)) { + if ( *string ) { OSRF_BUFFER_ADD( sql_buf, " ORDER BY " ); OSRF_BUFFER_ADD( sql_buf, string ); } -- 2.11.0