void makeItemsItemSaveToDbEscaped(struct sqlConnection *conn, struct makeItemsItem *el, char *tableName, int updateSize)
/* Save makeItemsItem as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than makeItemsItemSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *chrom, *name, *strand, *description;
chrom = sqlEscapeString(el->chrom);
name = sqlEscapeString(el->name);
strand = sqlEscapeString(el->strand);
description = sqlEscapeString(el->description);

dyStringPrintf(update, "insert into %s values ( %u,'%s',%u,%u,'%s',%u,'%s',%u,%u,%u,'%s',%u)", 
	tableName,  el->bin,  chrom,  el->chromStart,  el->chromEnd,  name,  el->score,  strand,  el->thickStart,  el->thickEnd,  el->itemRgb,  description,  el->id);
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&chrom);
freez(&name);
freez(&strand);
freez(&description);
}
void cutterSaveToDbEscaped(struct sqlConnection *conn, struct cutter *el, char *tableName, int updateSize)
/* Save cutter as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than cutterSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *name, *seq, *scizsArray, *companiesArray, *refsArray;
name = sqlEscapeString(el->name);
seq = sqlEscapeString(el->seq);

scizsArray = sqlStringArrayToString(el->scizs, el->numSciz);
companiesArray = sqlCharArrayToString(el->companies, el->numCompanies);
refsArray = sqlUnsignedArrayToString(el->refs, el->numRefs);
dyStringPrintf(update, "insert into %s values ( '%s',%u,%u,'%s',%u,%d,%u,%u,%u,'%s',%u,'%s',%u,'%s')", 
	tableName,  name, el->size , el->matchSize ,  seq, el->cut , el->overhang , el->palindromic , el->semicolon , el->numSciz ,  scizsArray , el->numCompanies ,  companiesArray , el->numRefs ,  refsArray );
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&name);
freez(&seq);
freez(&scizsArray);
freez(&companiesArray);
freez(&refsArray);
}
void protVarLinkSaveToDbEscaped(struct sqlConnection *conn, struct protVarLink *el, char *tableName, int updateSize)
/* Save protVarLink as a row to the table specified by tableName.
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically
 * escapes all simple strings (not arrays of string) but may be slower than protVarLinkSaveToDb().
 * For example automatically copies and converts:
 * "autosql's features include" --> "autosql\'s features include"
 * before inserting into database. */
{
    struct dyString *update = newDyString(updateSize);
    char  *id, *attrType, *raKey, *acc, *displayVal;
    id = sqlEscapeString(el->id);
    attrType = sqlEscapeString(el->attrType);
    raKey = sqlEscapeString(el->raKey);
    acc = sqlEscapeString(el->acc);
    displayVal = sqlEscapeString(el->displayVal);

    dyStringPrintf(update, "insert into %s values ( '%s','%s','%s','%s','%s')",
                   tableName,  id,  attrType,  raKey,  acc,  displayVal);
    sqlUpdate(conn, update->string);
    freeDyString(&update);
    freez(&id);
    freez(&attrType);
    freez(&raKey);
    freez(&acc);
    freez(&displayVal);
}
void protVarSaveToDbEscaped(struct sqlConnection *conn, struct protVar *el, char *tableName, int updateSize)
/* Save protVar as a row to the table specified by tableName.
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically
 * escapes all simple strings (not arrays of string) but may be slower than protVarSaveToDb().
 * For example automatically copies and converts:
 * "autosql's features include" --> "autosql\'s features include"
 * before inserting into database. */
{
    struct dyString *update = newDyString(updateSize);
    char  *id, *name, *srcId, *baseChangeType, *location;
    id = sqlEscapeString(el->id);
    name = sqlEscapeString(el->name);
    srcId = sqlEscapeString(el->srcId);
    baseChangeType = sqlEscapeString(el->baseChangeType);
    location = sqlEscapeString(el->location);

    dyStringPrintf(update, "insert into %s values ( '%s','%s','%s','%s','%s',%u)",
                   tableName,  id,  name,  srcId,  baseChangeType,  location,  el->coordinateAccuracy);
    sqlUpdate(conn, update->string);
    freeDyString(&update);
    freez(&id);
    freez(&name);
    freez(&srcId);
    freez(&baseChangeType);
    freez(&location);
}
void affyAtlasSaveToDbEscaped(struct sqlConnection *conn, struct affyAtlas *el, char *tableName, int updateSize)
/* Save affyAtlas as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than affyAtlasSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *annName, *probeSet, *detection, *tissue;
annName = sqlEscapeString(el->annName);
probeSet = sqlEscapeString(el->probeSet);
detection = sqlEscapeString(el->detection);
tissue = sqlEscapeString(el->tissue);

dyStringPrintf(update, "insert into %s values ( '%s','%s',%f,'%s',%f,'%s')", 
	tableName,  annName,  probeSet, el->signal ,  detection, el->pval ,  tissue);
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&annName);
freez(&probeSet);
freez(&detection);
freez(&tissue);
}
void taxonGeneticCodeSaveToDbEscaped(struct sqlConnection *conn, struct taxonGeneticCode *el, char *tableName, int updateSize)
/* Save taxonGeneticCode as a row to the table specified by tableName.
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically
 * escapes all simple strings (not arrays of string) but may be slower than taxonGeneticCodeSaveToDb().
 * For example automatically copies and converts:
 * "autosql's features include" --> "autosql\'s features include"
 * before inserting into database. */
{
    struct dyString *update = newDyString(updateSize);
    char  *abbr, *name, *tranlsation, *starts, *comments;
    abbr = sqlEscapeString(el->abbr);
    name = sqlEscapeString(el->name);
    tranlsation = sqlEscapeString(el->tranlsation);
    starts = sqlEscapeString(el->starts);
    comments = sqlEscapeString(el->comments);

    dyStringPrintf(update, "insert into %s values ( %u,'%s','%s','%s','%s','%s')",
                   tableName, el->id ,  abbr,  name,  tranlsation,  starts,  comments);
    sqlUpdate(conn, update->string);
    freeDyString(&update);
    freez(&abbr);
    freez(&name);
    freez(&tranlsation);
    freez(&starts);
    freez(&comments);
}
void affy10KDetailsSaveToDbEscaped(struct sqlConnection *conn, struct affy10KDetails *el, char *tableName, int updateSize)
/* Save affy10KDetails as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than affy10KDetailsSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *affyId, *rsId, *tscId, *baseA, *baseB, *sequenceA, *sequenceB, *enzyme;
affyId = sqlEscapeString(el->affyId);
rsId = sqlEscapeString(el->rsId);
tscId = sqlEscapeString(el->tscId);
baseA = sqlEscapeString(el->baseA);
baseB = sqlEscapeString(el->baseB);
sequenceA = sqlEscapeString(el->sequenceA);
sequenceB = sqlEscapeString(el->sequenceB);
enzyme = sqlEscapeString(el->enzyme);

dyStringPrintf(update, "insert into %s values ( '%s','%s','%s','%s','%s','%s','%s','%s')", 
	tableName,  affyId,  rsId,  tscId,  baseA,  baseB,  sequenceA,  sequenceB,  enzyme);
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&affyId);
freez(&rsId);
freez(&tscId);
freez(&baseA);
freez(&baseB);
freez(&sequenceA);
freez(&sequenceB);
freez(&enzyme);
}
Exemple #8
0
struct edwScriptRegistry *edwScriptRegistryFromCgi()
/* Get script registery from cgi variables.  Does authentication too. */
{
struct sqlConnection *conn = edwConnect();
char *user = sqlEscapeString(cgiString("user"));
char *password = sqlEscapeString(cgiString("password"));
char query[256];
sqlSafef(query, sizeof(query), "select * from edwScriptRegistry where name='%s'", user);
struct edwScriptRegistry *reg = edwScriptRegistryLoadByQuery(conn, query);
if (reg == NULL)
    accessDenied();
char key[EDW_SID_SIZE];
edwMakeSid(password, key);
if (!sameString(reg->secretHash, key))
    accessDenied();
sqlDisconnect(&conn);
return reg;
}
void sangerGeneToWBGeneIDSaveToDbEscaped(struct sqlConnection *conn, struct sangerGeneToWBGeneID *el, char *tableName, int updateSize)
/* Save sangerGeneToWBGeneID as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than sangerGeneToWBGeneIDSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *sangerGene, *WBGeneID;
sangerGene = sqlEscapeString(el->sangerGene);
WBGeneID = sqlEscapeString(el->WBGeneID);

dyStringPrintf(update, "insert into %s values ( '%s','%s')", 
	tableName,  sangerGene,  WBGeneID);
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&sangerGene);
freez(&WBGeneID);
}
void polyGenotypeSaveToDbEscaped(struct sqlConnection *conn, struct polyGenotype *el, char *tableName, int updateSize)
/* Save polyGenotype as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than polyGenotypeSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *name, *ethnicGroup;
name = sqlEscapeString(el->name);
ethnicGroup = sqlEscapeString(el->ethnicGroup);

dyStringPrintf(update, "insert into %s values ( '%s','%s',%d,%d,%d,%d,%g,%g)", 
	tableName,  name,  ethnicGroup, el->plusPlus , el->plusMinus , el->minusMinus , el->sampleSize , el->alleleFrequency , el->unbiasedHeterozygosity );
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&name);
freez(&ethnicGroup);
}
void tfbsConsSaveToDbEscaped(struct sqlConnection *conn, struct tfbsCons *el, char *tableName, int updateSize)
/* Save tfbsCons as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than tfbsConsSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *chrom, *name, *strand, *species, *factor, *id;
chrom = sqlEscapeString(el->chrom);
name = sqlEscapeString(el->name);
strand = sqlEscapeString(el->strand);
species = sqlEscapeString(el->species);
factor = sqlEscapeString(el->factor);
id = sqlEscapeString(el->id);

dyStringPrintf(update, "insert into %s values ( '%s',%u,%u,'%s',%u,'%s','%s','%s','%s')", 
	tableName,  chrom, el->chromStart , el->chromEnd ,  name, el->score ,  strand,  species,  factor,  id);
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&chrom);
freez(&name);
freez(&strand);
freez(&species);
freez(&factor);
freez(&id);
}
void ggMrnaAliSaveToDbEscaped(struct sqlConnection *conn, struct ggMrnaAli *el, char *tableName, int updateSize)
/* Save ggMrnaAli as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than ggMrnaAliSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *tName, *strand, *qName;
tName = sqlEscapeString(el->tName);
strand = sqlEscapeString(el->strand);
qName = sqlEscapeString(el->qName);

dyStringPrintf(update, "insert into %s values ( '%s',%d,%d,'%s','%s',%d,%d,%u,%d,%d,%d,%d, NULL )", 
	tableName,  tName, el->tStart , el->tEnd ,  strand,  qName, el->qStart , el->qEnd , el->baseCount , el->orientation , el->hasIntrons , el->milliScore , el->blockCount );
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&tName);
freez(&strand);
freez(&qName);
}
void affy10KSaveToDbEscaped(struct sqlConnection *conn, struct affy10K *el, char *tableName, int updateSize)
/* Save affy10K as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than affy10KSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *chrom;
chrom = sqlEscapeString(el->chrom);

dyStringPrintf(update, "insert into %s values ( '%s',%u,%u,%u)", 
	tableName,  chrom, el->chromStart , el->chromEnd , el->affyId );
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&chrom);
}
static void
convert_query_term_to_sql( const GncSqlBackend* be, const gchar* fieldName, QofQueryTerm* pTerm, GString* sql )
{
    QofQueryPredData* pPredData;
    gboolean isInverted;

    g_return_if_fail( pTerm != NULL );
    g_return_if_fail( sql != NULL );

    pPredData = qof_query_term_get_pred_data( pTerm );
    isInverted = qof_query_term_is_inverted( pTerm );

    if ( g_strcmp0( pPredData->type_name, QOF_TYPE_GUID ) == 0 )
    {
        query_guid_t guid_data = (query_guid_t)pPredData;
        GList* guid_entry;

        g_string_append( sql, "(" );
        g_string_append( sql, fieldName );

        switch ( guid_data->options )
        {
        case QOF_GUID_MATCH_ANY:
            if ( isInverted ) g_string_append( sql, " NOT IN (" );
            else g_string_append( sql, " IN (" );
            break;

        case QOF_GUID_MATCH_NONE:
            if ( isInverted ) g_string_append( sql, " IN (" );
            else g_string_append( sql, " NOT IN (" );
            break;

        default:
            PERR( "Unexpected GncGUID match type: %d\n", guid_data->options );
        }

        for ( guid_entry = guid_data->guids; guid_entry != NULL; guid_entry = guid_entry->next )
        {
            gchar guid_buf[GUID_ENCODING_LENGTH+1];

            if ( guid_entry != guid_data->guids ) g_string_append( sql, "," );
            (void)guid_to_string_buff( guid_entry->data, guid_buf );
            g_string_append_printf( sql, "'%s'", guid_buf );
        }
        g_string_append( sql, "))" );

    }
    else if ( g_strcmp0( pPredData->type_name, QOF_TYPE_CHAR ) == 0 )
    {
        query_char_t char_data = (query_char_t)pPredData;
        int i;

        if ( isInverted )
        {
            g_string_append( sql, "NOT(" );
        }
        if ( char_data->options == QOF_CHAR_MATCH_NONE )
        {
            g_string_append( sql, "NOT " );
        }
        g_string_append( sql, "(" );
        for ( i = 0; char_data->char_list[i] != '\0'; i++ )
        {
            if ( i != 0 )
            {
                g_string_append( sql, " OR " );
            }
            g_string_append( sql, fieldName );
            g_string_append( sql, " = '" );
            g_string_append_c( sql, char_data->char_list[i] );
            g_string_append( sql, "'" );
        }
        g_string_append( sql, ") " );
        if ( isInverted )
        {
            g_string_append( sql, ") " );
        }

    }
    else if ( g_strcmp0( pPredData->type_name, QOF_TYPE_STRING ) == 0 )
    {
        query_string_t string_data = (query_string_t)pPredData;
        sqlEscape* escape = sqlEscape_new();

        if ( isInverted )
        {
            g_string_append( sql, "NOT(" );
        }
        if ( pPredData->how == QOF_COMPARE_NEQ )
        {
            g_string_append( sql, "NOT(" );
        }
        g_string_append( sql, fieldName );
        if ( string_data->is_regex || string_data->options == QOF_STRING_MATCH_CASEINSENSITIVE )
        {
            PWARN( "String is_regex || option = QOF_STRING_MATCH_INSENSITIVE\n" );
        }
//			g_string_append( sql, " ~" );
//		} else {
        g_string_append( sql, " =" );
//		}
//		if( string_data->options == QOF_STRING_MATCH_CASEINSENSITIVE ) {
//			g_string_append( sql, "*" );
//		}
        g_string_append( sql, "'" );
        g_string_append( sql, sqlEscapeString( escape, string_data->matchstring ) );
        g_string_append( sql, "'" );
        if ( pPredData->how == QOF_COMPARE_NEQ )
        {
            g_string_append( sql, ")" );
        }
        if ( isInverted )
        {
            g_string_append( sql, ")" );
        }
        sqlEscape_destroy( escape );

    }
    else
    {
        g_string_append( sql, "(" );
        g_string_append( sql, fieldName );
        convert_query_comparison_to_sql( pPredData, isInverted, sql );

        if ( strcmp( pPredData->type_name, QOF_TYPE_NUMERIC ) == 0 )
        {
            query_numeric_t pData = (query_numeric_t)pPredData;
            double d = gnc_numeric_to_double( pData->amount );

            g_string_append_printf( sql, "%f", d );

        }
        else if ( g_strcmp0( pPredData->type_name, QOF_TYPE_DATE ) == 0 )
        {
            query_date_t date_data = (query_date_t)pPredData;
            gchar* datebuf;

            datebuf = gnc_sql_convert_timespec_to_string( be, date_data->date );
            g_string_append_printf( sql, "'%s'", datebuf );

        }
        else if ( strcmp( pPredData->type_name, QOF_TYPE_INT32 ) == 0 )
        {
            query_int32_t pData = (query_int32_t)pPredData;

            g_string_append_printf( sql, "%d", pData->val );

        }
        else if ( strcmp( pPredData->type_name, QOF_TYPE_INT64 ) == 0 )
        {
            query_int64_t pData = (query_int64_t)pPredData;

            g_string_append_printf( sql, "%" G_GINT64_FORMAT, pData->val );

        }
        else if ( strcmp( pPredData->type_name, QOF_TYPE_DOUBLE ) == 0 )
        {
            query_double_t pData = (query_double_t)pPredData;

            g_string_append_printf( sql, "%f", pData->val );

        }
        else if ( strcmp( pPredData->type_name, QOF_TYPE_BOOLEAN ) == 0 )
        {
            query_boolean_t pData = (query_boolean_t)pPredData;

            g_string_append_printf( sql, "%d", pData->val );

        }
        else
        {
            PERR( "Unknown query predicate type: %s\n", pPredData->type_name );
        }

        g_string_append( sql, ")" );
    }
}
void dbRIPSaveToDbEscaped(struct sqlConnection *conn, struct dbRIP *el, char *tableName, int updateSize)
/* Save dbRIP as a row to the table specified by tableName.
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically
 * escapes all simple strings (not arrays of string) but may be slower than dbRIPSaveToDb().
 * For example automatically copies and converts:
 * "autosql's features include" --> "autosql\'s features include"
 * before inserting into database. */
{
    struct dyString *update = newDyString(updateSize);
    char  *chrom, *name, *strand, *originalId, *forwardPrimer, *reversePrimer, *polyClass, *polyFamily, *polySubfamily, *polySeq, *polySource, *reference, *ascertainingMethod, *remarks, *disease, *genoRegion;
    chrom = sqlEscapeString(el->chrom);
    name = sqlEscapeString(el->name);
    strand = sqlEscapeString(el->strand);
    originalId = sqlEscapeString(el->originalId);
    forwardPrimer = sqlEscapeString(el->forwardPrimer);
    reversePrimer = sqlEscapeString(el->reversePrimer);
    polyClass = sqlEscapeString(el->polyClass);
    polyFamily = sqlEscapeString(el->polyFamily);
    polySubfamily = sqlEscapeString(el->polySubfamily);
    polySeq = sqlEscapeString(el->polySeq);
    polySource = sqlEscapeString(el->polySource);
    reference = sqlEscapeString(el->reference);
    ascertainingMethod = sqlEscapeString(el->ascertainingMethod);
    remarks = sqlEscapeString(el->remarks);
    disease = sqlEscapeString(el->disease);
    genoRegion = sqlEscapeString(el->genoRegion);

    dyStringPrintf(update, "insert into %s values ( '%s',%u,%u,'%s',%u,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%g,%d,%d,'%s','%s')",
                   tableName,  chrom, el->chromStart , el->chromEnd ,  name, el->score ,  strand,  originalId,  forwardPrimer,  reversePrimer,  polyClass,  polyFamily,  polySubfamily,  polySeq,  polySource,  reference,  ascertainingMethod,  remarks, el->tm , el->filledSize , el->emptySize ,  disease,  genoRegion);
    sqlUpdate(conn, update->string);
    freeDyString(&update);
    freez(&chrom);
    freez(&name);
    freez(&strand);
    freez(&originalId);
    freez(&forwardPrimer);
    freez(&reversePrimer);
    freez(&polyClass);
    freez(&polyFamily);
    freez(&polySubfamily);
    freez(&polySeq);
    freez(&polySource);
    freez(&reference);
    freez(&ascertainingMethod);
    freez(&remarks);
    freez(&disease);
    freez(&genoRegion);
}
void tigrCmrGeneSaveToDbEscaped(struct sqlConnection *conn, struct tigrCmrGene *el, char *tableName, int updateSize)
/* Save tigrCmrGene as a row to the table specified by tableName.
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically
 * escapes all simple strings (not arrays of string) but may be slower than tigrCmrGeneSaveToDb().
 * For example automatically copies and converts:
 * "autosql's features include" --> "autosql\'s features include"
 * before inserting into database. */
{
    struct dyString *update = newDyString(updateSize);
    char  *chrom, *name, *strand, *tigrCommon, *tigrGene, *tigrECN, *primLocus, *tigrMainRole, *tigrSubRole, *swissProt, *genbank, *goTerm;
    chrom = sqlEscapeString(el->chrom);
    name = sqlEscapeString(el->name);
    strand = sqlEscapeString(el->strand);
    tigrCommon = sqlEscapeString(el->tigrCommon);
    tigrGene = sqlEscapeString(el->tigrGene);
    tigrECN = sqlEscapeString(el->tigrECN);
    primLocus = sqlEscapeString(el->primLocus);
    tigrMainRole = sqlEscapeString(el->tigrMainRole);
    tigrSubRole = sqlEscapeString(el->tigrSubRole);
    swissProt = sqlEscapeString(el->swissProt);
    genbank = sqlEscapeString(el->genbank);
    goTerm = sqlEscapeString(el->goTerm);

    dyStringPrintf(update, "insert into %s values ( %d,'%s',%u,%u,'%s',%u,'%s','%s','%s','%s','%s',%u,%u,'%s','%s','%s','%s',%f,%f,%f,'%s')",
                   tableName, el->bin ,  chrom, el->chromStart , el->chromEnd ,  name, el->score ,  strand,  tigrCommon,  tigrGene,  tigrECN,  primLocus, el->tigrLength , el->tigrPepLength ,  tigrMainRole,  tigrSubRole,  swissProt,  genbank, el->tigrMw , el->tigrPi , el->tigrGc ,  goTerm);
    sqlUpdate(conn, update->string);
    freeDyString(&update);
    freez(&chrom);
    freez(&name);
    freez(&strand);
    freez(&tigrCommon);
    freez(&tigrGene);
    freez(&tigrECN);
    freez(&primLocus);
    freez(&tigrMainRole);
    freez(&tigrSubRole);
    freez(&swissProt);
    freez(&genbank);
    freez(&goTerm);
}
void genotypeSaveToDbEscaped(struct sqlConnection *conn, struct genotype *el, char *tableName, int updateSize)
/* Save genotype as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than genotypeSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *rsId, *SNPalleles, *chrom, *strand, *assembly, *center, *protLSID, *assayLSID, *panelLSID, *NA06985, *NA06991, *NA06993, *NA06993_dup, *NA06994, *NA07000, *NA07019, *NA07022, *NA07029, *NA07034, *NA07048, *NA07055, *NA07056, *NA07345, *NA07348, *NA07357, *NA10830, *NA10831, *NA10835, *NA10838, *NA10839, *NA10846, *NA10847, *NA10851, *NA10854, *NA10855, *NA10856, *NA10857, *NA10859, *NA10860, *NA10861, *NA10863, *NA11829, *NA11830, *NA11831, *NA11832, *NA11839, *NA11840, *NA11881, *NA11882, *NA11992, *NA11993, *NA11993_dup, *NA11994, *NA11995, *NA12003, *NA12003_dup, *NA12004, *NA12005, *NA12006, *NA12043, *NA12044, *NA12056, *NA12057, *NA12144, *NA12145, *NA12146, *NA12154, *NA12155, *NA12156, *NA12156_dup, *NA12234, *NA12236, *NA12239, *NA12248, *NA12248_dup, *NA12249, *NA12264, *NA12707, *NA12716, *NA12717, *NA12740, *NA12750, *NA12751, *NA12752, *NA12753, *NA12760, *NA12761, *NA12762, *NA12763, *NA12801, *NA12802, *NA12812, *NA12813, *NA12814, *NA12815, *NA12864, *NA12865, *NA12872, *NA12873, *NA12874, *NA12875, *NA12878, *NA12891, *NA12892;
rsId = sqlEscapeString(el->rsId);
SNPalleles = sqlEscapeString(el->SNPalleles);
chrom = sqlEscapeString(el->chrom);
strand = sqlEscapeString(el->strand);
assembly = sqlEscapeString(el->assembly);
center = sqlEscapeString(el->center);
protLSID = sqlEscapeString(el->protLSID);
assayLSID = sqlEscapeString(el->assayLSID);
panelLSID = sqlEscapeString(el->panelLSID);
NA06985 = sqlEscapeString(el->NA06985);
NA06991 = sqlEscapeString(el->NA06991);
NA06993 = sqlEscapeString(el->NA06993);
NA06993_dup = sqlEscapeString(el->NA06993_dup);
NA06994 = sqlEscapeString(el->NA06994);
NA07000 = sqlEscapeString(el->NA07000);
NA07019 = sqlEscapeString(el->NA07019);
NA07022 = sqlEscapeString(el->NA07022);
NA07029 = sqlEscapeString(el->NA07029);
NA07034 = sqlEscapeString(el->NA07034);
NA07048 = sqlEscapeString(el->NA07048);
NA07055 = sqlEscapeString(el->NA07055);
NA07056 = sqlEscapeString(el->NA07056);
NA07345 = sqlEscapeString(el->NA07345);
NA07348 = sqlEscapeString(el->NA07348);
NA07357 = sqlEscapeString(el->NA07357);
NA10830 = sqlEscapeString(el->NA10830);
NA10831 = sqlEscapeString(el->NA10831);
NA10835 = sqlEscapeString(el->NA10835);
NA10838 = sqlEscapeString(el->NA10838);
NA10839 = sqlEscapeString(el->NA10839);
NA10846 = sqlEscapeString(el->NA10846);
NA10847 = sqlEscapeString(el->NA10847);
NA10851 = sqlEscapeString(el->NA10851);
NA10854 = sqlEscapeString(el->NA10854);
NA10855 = sqlEscapeString(el->NA10855);
NA10856 = sqlEscapeString(el->NA10856);
NA10857 = sqlEscapeString(el->NA10857);
NA10859 = sqlEscapeString(el->NA10859);
NA10860 = sqlEscapeString(el->NA10860);
NA10861 = sqlEscapeString(el->NA10861);
NA10863 = sqlEscapeString(el->NA10863);
NA11829 = sqlEscapeString(el->NA11829);
NA11830 = sqlEscapeString(el->NA11830);
NA11831 = sqlEscapeString(el->NA11831);
NA11832 = sqlEscapeString(el->NA11832);
NA11839 = sqlEscapeString(el->NA11839);
NA11840 = sqlEscapeString(el->NA11840);
NA11881 = sqlEscapeString(el->NA11881);
NA11882 = sqlEscapeString(el->NA11882);
NA11992 = sqlEscapeString(el->NA11992);
NA11993 = sqlEscapeString(el->NA11993);
NA11993_dup = sqlEscapeString(el->NA11993_dup);
NA11994 = sqlEscapeString(el->NA11994);
NA11995 = sqlEscapeString(el->NA11995);
NA12003 = sqlEscapeString(el->NA12003);
NA12003_dup = sqlEscapeString(el->NA12003_dup);
NA12004 = sqlEscapeString(el->NA12004);
NA12005 = sqlEscapeString(el->NA12005);
NA12006 = sqlEscapeString(el->NA12006);
NA12043 = sqlEscapeString(el->NA12043);
NA12044 = sqlEscapeString(el->NA12044);
NA12056 = sqlEscapeString(el->NA12056);
NA12057 = sqlEscapeString(el->NA12057);
NA12144 = sqlEscapeString(el->NA12144);
NA12145 = sqlEscapeString(el->NA12145);
NA12146 = sqlEscapeString(el->NA12146);
NA12154 = sqlEscapeString(el->NA12154);
NA12155 = sqlEscapeString(el->NA12155);
NA12156 = sqlEscapeString(el->NA12156);
NA12156_dup = sqlEscapeString(el->NA12156_dup);
NA12234 = sqlEscapeString(el->NA12234);
NA12236 = sqlEscapeString(el->NA12236);
NA12239 = sqlEscapeString(el->NA12239);
NA12248 = sqlEscapeString(el->NA12248);
NA12248_dup = sqlEscapeString(el->NA12248_dup);
NA12249 = sqlEscapeString(el->NA12249);
NA12264 = sqlEscapeString(el->NA12264);
NA12707 = sqlEscapeString(el->NA12707);
NA12716 = sqlEscapeString(el->NA12716);
NA12717 = sqlEscapeString(el->NA12717);
NA12740 = sqlEscapeString(el->NA12740);
NA12750 = sqlEscapeString(el->NA12750);
NA12751 = sqlEscapeString(el->NA12751);
NA12752 = sqlEscapeString(el->NA12752);
NA12753 = sqlEscapeString(el->NA12753);
NA12760 = sqlEscapeString(el->NA12760);
NA12761 = sqlEscapeString(el->NA12761);
NA12762 = sqlEscapeString(el->NA12762);
NA12763 = sqlEscapeString(el->NA12763);
NA12801 = sqlEscapeString(el->NA12801);
NA12802 = sqlEscapeString(el->NA12802);
NA12812 = sqlEscapeString(el->NA12812);
NA12813 = sqlEscapeString(el->NA12813);
NA12814 = sqlEscapeString(el->NA12814);
NA12815 = sqlEscapeString(el->NA12815);
NA12864 = sqlEscapeString(el->NA12864);
NA12865 = sqlEscapeString(el->NA12865);
NA12872 = sqlEscapeString(el->NA12872);
NA12873 = sqlEscapeString(el->NA12873);
NA12874 = sqlEscapeString(el->NA12874);
NA12875 = sqlEscapeString(el->NA12875);
NA12878 = sqlEscapeString(el->NA12878);
NA12891 = sqlEscapeString(el->NA12891);
NA12892 = sqlEscapeString(el->NA12892);

dyStringPrintf(update, "insert into %s values ( '%s','%s','%s',%d,'%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')", 
	tableName,  rsId,  SNPalleles,  chrom, el->chromStart ,  strand,  assembly,  center,  protLSID,  assayLSID,  panelLSID,  NA06985,  NA06991,  NA06993,  NA06993_dup,  NA06994,  NA07000,  NA07019,  NA07022,  NA07029,  NA07034,  NA07048,  NA07055,  NA07056,  NA07345,  NA07348,  NA07357,  NA10830,  NA10831,  NA10835,  NA10838,  NA10839,  NA10846,  NA10847,  NA10851,  NA10854,  NA10855,  NA10856,  NA10857,  NA10859,  NA10860,  NA10861,  NA10863,  NA11829,  NA11830,  NA11831,  NA11832,  NA11839,  NA11840,  NA11881,  NA11882,  NA11992,  NA11993,  NA11993_dup,  NA11994,  NA11995,  NA12003,  NA12003_dup,  NA12004,  NA12005,  NA12006,  NA12043,  NA12044,  NA12056,  NA12057,  NA12144,  NA12145,  NA12146,  NA12154,  NA12155,  NA12156,  NA12156_dup,  NA12234,  NA12236,  NA12239,  NA12248,  NA12248_dup,  NA12249,  NA12264,  NA12707,  NA12716,  NA12717,  NA12740,  NA12750,  NA12751,  NA12752,  NA12753,  NA12760,  NA12761,  NA12762,  NA12763,  NA12801,  NA12802,  NA12812,  NA12813,  NA12814,  NA12815,  NA12864,  NA12865,  NA12872,  NA12873,  NA12874,  NA12875,  NA12878,  NA12891,  NA12892);
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&rsId);
freez(&SNPalleles);
freez(&chrom);
freez(&strand);
freez(&assembly);
freez(&center);
freez(&protLSID);
freez(&assayLSID);
freez(&panelLSID);
freez(&NA06985);
freez(&NA06991);
freez(&NA06993);
freez(&NA06993_dup);
freez(&NA06994);
freez(&NA07000);
freez(&NA07019);
freez(&NA07022);
freez(&NA07029);
freez(&NA07034);
freez(&NA07048);
freez(&NA07055);
freez(&NA07056);
freez(&NA07345);
freez(&NA07348);
freez(&NA07357);
freez(&NA10830);
freez(&NA10831);
freez(&NA10835);
freez(&NA10838);
freez(&NA10839);
freez(&NA10846);
freez(&NA10847);
freez(&NA10851);
freez(&NA10854);
freez(&NA10855);
freez(&NA10856);
freez(&NA10857);
freez(&NA10859);
freez(&NA10860);
freez(&NA10861);
freez(&NA10863);
freez(&NA11829);
freez(&NA11830);
freez(&NA11831);
freez(&NA11832);
freez(&NA11839);
freez(&NA11840);
freez(&NA11881);
freez(&NA11882);
freez(&NA11992);
freez(&NA11993);
freez(&NA11993_dup);
freez(&NA11994);
freez(&NA11995);
freez(&NA12003);
freez(&NA12003_dup);
freez(&NA12004);
freez(&NA12005);
freez(&NA12006);
freez(&NA12043);
freez(&NA12044);
freez(&NA12056);
freez(&NA12057);
freez(&NA12144);
freez(&NA12145);
freez(&NA12146);
freez(&NA12154);
freez(&NA12155);
freez(&NA12156);
freez(&NA12156_dup);
freez(&NA12234);
freez(&NA12236);
freez(&NA12239);
freez(&NA12248);
freez(&NA12248_dup);
freez(&NA12249);
freez(&NA12264);
freez(&NA12707);
freez(&NA12716);
freez(&NA12717);
freez(&NA12740);
freez(&NA12750);
freez(&NA12751);
freez(&NA12752);
freez(&NA12753);
freez(&NA12760);
freez(&NA12761);
freez(&NA12762);
freez(&NA12763);
freez(&NA12801);
freez(&NA12802);
freez(&NA12812);
freez(&NA12813);
freez(&NA12814);
freez(&NA12815);
freez(&NA12864);
freez(&NA12865);
freez(&NA12872);
freez(&NA12873);
freez(&NA12874);
freez(&NA12875);
freez(&NA12878);
freez(&NA12891);
freez(&NA12892);
}
void hapmapPrimateAllelesSaveToDbEscaped(struct sqlConnection *conn, struct hapmapPrimateAlleles *el, char *tableName, int updateSize)
/* Save hapmapPrimateAlleles as a row to the table specified by tableName. 
 * As blob fields may be arbitrary size updateSize specifies the approx size.
 * of a string that would contain the entire query. Automatically 
 * escapes all simple strings (not arrays of string) but may be slower than hapmapPrimateAllelesSaveToDb().
 * For example automatically copies and converts: 
 * "autosql's features include" --> "autosql\'s features include" 
 * before inserting into database. */ 
{
struct dyString *update = newDyString(updateSize);
char  *chrom, *name, *strand, *refAllele, *otherAllele, *chimpChrom, *chimpStrand, *chimpAllele, *rhesusChrom, *rhesusStrand, *rhesusAllele;
chrom = sqlEscapeString(el->chrom);
name = sqlEscapeString(el->name);
strand = sqlEscapeString(el->strand);
refAllele = sqlEscapeString(el->refAllele);
otherAllele = sqlEscapeString(el->otherAllele);
chimpChrom = sqlEscapeString(el->chimpChrom);
chimpStrand = sqlEscapeString(el->chimpStrand);
chimpAllele = sqlEscapeString(el->chimpAllele);
rhesusChrom = sqlEscapeString(el->rhesusChrom);
rhesusStrand = sqlEscapeString(el->rhesusStrand);
rhesusAllele = sqlEscapeString(el->rhesusAllele);

dyStringPrintf(update, "insert into %s values ( '%s',%u,%u,'%s',%u,'%s','%s','%s','%s',%u,'%s','%s',%u,'%s',%u,'%s','%s',%u)", 
	tableName,  chrom, el->chromStart , el->chromEnd ,  name, el->score ,  strand,  refAllele,  otherAllele,  chimpChrom, el->chimpPos ,  chimpStrand,  chimpAllele, el->chimpQual ,  rhesusChrom, el->rhesusPos ,  rhesusStrand,  rhesusAllele, el->rhesusQual );
sqlUpdate(conn, update->string);
freeDyString(&update);
freez(&chrom);
freez(&name);
freez(&strand);
freez(&refAllele);
freez(&otherAllele);
freez(&chimpChrom);
freez(&chimpStrand);
freez(&chimpAllele);
freez(&rhesusChrom);
freez(&rhesusStrand);
freez(&rhesusAllele);
}