consistently check return value of BindParam*; rework macros to ease parameter binding; always add data length to string values (may need to specialize for integers)

This commit is contained in:
Pierangelo Masarati 2004-09-25 18:11:06 +00:00
parent 02cfafdded
commit b09663d784
7 changed files with 476 additions and 160 deletions

View File

@ -73,13 +73,7 @@ backsql_modify_delete_all_values(
return LDAP_SUCCESS;
}
#ifdef BACKSQL_ARBITRARY_KEY
rc = backsql_BindParamStr( asth, 1,
e_id->eid_keyval.bv_val,
BACKSQL_MAX_KEY_LEN );
#else /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( asth, 1, &e_id->eid_keyval );
#endif /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( asth, 1, SQL_PARAM_INPUT, &e_id->eid_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_delete_all_values(): "
@ -143,35 +137,59 @@ backsql_modify_delete_all_values(
rs->sr_text = "SQL-backend error";
return rs->sr_err = LDAP_OTHER;
}
return LDAP_SUCCESS;
continue;
}
if ( BACKSQL_IS_DEL( at->bam_expect_return ) ) {
pno = 1;
SQLBindParameter( sth, 1,
SQL_PARAM_OUTPUT,
SQL_C_ULONG,
SQL_INTEGER,
0, 0, &prc, 0, 0 );
rc = backsql_BindParamInt( sth, 1,
SQL_PARAM_OUTPUT, &prc );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_delete_all_values(): "
"error binding output parameter for %s[%d]\n",
at->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
if ( BACKSQL_FAIL_IF_NO_MAPPING( bi ) ) {
rs->sr_text = "SQL-backend error";
return rs->sr_err = LDAP_OTHER;
}
continue;
}
} else {
pno = 0;
}
po = ( BACKSQL_IS_DEL( at->bam_param_order ) ) > 0;
rc = backsql_BindParamID( sth, pno + 1 + po,
SQL_PARAM_INPUT, &e_id->eid_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_delete_all_values(): "
"error binding keyval parameter for %s[%d]\n",
at->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
if ( BACKSQL_FAIL_IF_NO_MAPPING( bi ) ) {
rs->sr_text = "SQL-backend error";
return rs->sr_err = LDAP_OTHER;
}
continue;
}
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, pno + 1 + po,
SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_VARCHAR,
0, 0, e_id->eid_keyval.bv_val,
0, 0 );
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_delete_all_values() "
"arg%d=%s\n",
pno + 1 + po, e_id->eid_keyval.bv_val, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, pno + 1 + po,
SQL_PARAM_INPUT,
SQL_C_ULONG, SQL_INTEGER,
0, 0, &e_id->eid_keyval, 0, 0 );
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_delete_all_values() "
"arg%d=%lu\n",
@ -183,11 +201,24 @@ backsql_modify_delete_all_values(
* maybe need binary bind?
*/
col_len = strlen( row.cols[ i ] );
SQLBindParameter( sth, pno + 2 - po,
SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_CHAR,
col_len, 0, row.cols[ i ],
col_len, 0 );
rc = backsql_BindParamStr( sth, pno + 2 - po,
SQL_PARAM_INPUT, row.cols[ i ], col_len );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_delete_all_values(): "
"error binding value parameter for %s[%d]\n",
at->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
if ( BACKSQL_FAIL_IF_NO_MAPPING( bi ) ) {
rs->sr_text = "SQL-backend error";
return rs->sr_err = LDAP_OTHER;
}
continue;
}
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_delete_all_values(): "
@ -393,28 +424,47 @@ add_only:;
if ( BACKSQL_IS_ADD( at->bam_expect_return ) ) {
pno = 1;
SQLBindParameter( sth, 1,
SQL_PARAM_OUTPUT,
SQL_C_ULONG, SQL_INTEGER,
0, 0, &prc, 0, 0);
rc = backsql_BindParamInt( sth, 1,
SQL_PARAM_OUTPUT, &prc );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"error binding output parameter for %s[%d]\n",
at->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
} else {
pno = 0;
}
po = ( BACKSQL_IS_ADD( at->bam_param_order ) ) > 0;
rc = backsql_BindParamID( sth, pno + 1 + po,
SQL_PARAM_INPUT, &e_id->eid_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"error binding keyval parameter for %s[%d]\n",
at->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, pno + 1 + po,
SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_VARCHAR,
0, 0, e_id->eid_keyval.bv_val, 0, 0 );
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"arg%d=\"%s\"\n",
pno + 1 + po, e_id->eid_keyval.bv_val, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, pno + 1 + po,
SQL_PARAM_INPUT,
SQL_C_ULONG, SQL_INTEGER,
0, 0, &e_id->eid_keyval, 0, 0 );
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"arg%d=\"%lu\"\n",
@ -425,11 +475,21 @@ add_only:;
* check for syntax needed here
* maybe need binary bind?
*/
SQLBindParameter( sth, pno + 2 - po,
SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_CHAR,
at_val->bv_len, 0, at_val->bv_val,
at_val->bv_len, 0 );
rc = backsql_BindParamBerVal( sth, pno + 2 - po,
SQL_PARAM_INPUT, at_val );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"error binding value parameter for %s[%d]\n",
at->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"arg%d=\"%s\"; executing \"%s\"\n",
@ -507,34 +567,74 @@ add_only:;
if ( BACKSQL_IS_DEL( at->bam_expect_return ) ) {
pno = 1;
SQLBindParameter( sth, 1,
SQL_PARAM_OUTPUT,
SQL_C_ULONG, SQL_INTEGER,
0, 0, &prc, 0, 0 );
rc = backsql_BindParamInt( sth, 1,
SQL_PARAM_OUTPUT, &prc );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"error binding output parameter for %s[%d]\n",
at->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
} else {
pno = 0;
}
po = ( BACKSQL_IS_DEL( at->bam_param_order ) ) > 0;
rc = backsql_BindParamID( sth, pno + 1 + po,
SQL_PARAM_INPUT, &e_id->eid_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"error binding keyval parameter for %s[%d]\n",
at->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, pno + 1 + po,
SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_VARCHAR,
0, 0, e_id->eid_keyval.bv_val, 0, 0 );
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"arg%d=\"%s\"\n",
pno + 1 + po, e_id->eid_keyval.bv_val, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, pno + 1 + po,
SQL_PARAM_INPUT,
SQL_C_ULONG, SQL_INTEGER,
0, 0, &e_id->eid_keyval, 0, 0 );
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"arg%d=\"%lu\"\n",
pno + 1 + po, e_id->eid_keyval, 0 );
#endif /* ! BACKSQL_ARBITRARY_KEY */
/*
* check for syntax needed here
* maybe need binary bind?
*/
SQLBindParameter( sth, pno + 2 - po,
SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR,
at_val->bv_len, 0, at_val->bv_val,
at_val->bv_len, 0 );
rc = backsql_BindParamBerVal( sth, pno + 2 - po,
SQL_PARAM_INPUT, at_val );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
"error binding value parameter for %s[%d]\n",
at->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
if ( BACKSQL_FAIL_IF_NO_MAPPING( bi ) ) {
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
}
Debug( LDAP_DEBUG_TRACE,
" backsql_modify_internal(): "
@ -672,18 +772,49 @@ backsql_add_attr(
if ( BACKSQL_IS_ADD( at_rec->bam_expect_return ) ) {
pno = 1;
SQLBindParameter( sth, 1, SQL_PARAM_OUTPUT,
SQL_C_ULONG, SQL_INTEGER,
0, 0, &prc, 0, 0 );
rc = backsql_BindParamInt( sth, 1, SQL_PARAM_OUTPUT, &prc );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding output parameter for %s[%d]\n",
at_rec->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
if ( BACKSQL_FAIL_IF_NO_MAPPING( bi ) ) {
rs->sr_text = "SQL-backend error";
return rs->sr_err = LDAP_OTHER;
}
return LDAP_SUCCESS;
}
} else {
pno = 0;
}
po = ( BACKSQL_IS_ADD( at_rec->bam_param_order ) ) > 0;
currpos = pno + 1 + po;
SQLBindParameter( sth, currpos,
SQL_PARAM_INPUT, SQL_C_ULONG,
SQL_INTEGER, 0, 0, &new_keyval, 0, 0 );
rc = backsql_BindParamInt( sth, currpos,
SQL_PARAM_INPUT, &new_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding keyval parameter for %s[%d]\n",
at_rec->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
if ( BACKSQL_FAIL_IF_NO_MAPPING( bi ) ) {
rs->sr_text = "SQL-backend error";
return rs->sr_err = LDAP_OTHER;
}
return LDAP_SUCCESS;
}
currpos = pno + 2 - po;
/*
@ -691,8 +822,23 @@ backsql_add_attr(
* maybe need binary bind?
*/
backsql_BindParamStr( sth, currpos,
at_val->bv_val, at_val->bv_len + 1 );
rc = backsql_BindParamBerVal( sth, currpos, SQL_PARAM_INPUT, at_val );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding value parameter for %s[%d]\n",
at_rec->bam_ad->ad_cname.bv_val, i, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
if ( BACKSQL_FAIL_IF_NO_MAPPING( bi ) ) {
rs->sr_text = "SQL-backend error";
return rs->sr_err = LDAP_OTHER;
}
return LDAP_SUCCESS;
}
#ifdef LDAP_DEBUG
snprintf( logbuf, sizeof( logbuf ), "val[%lu], id=%lu",
@ -958,8 +1104,20 @@ backsql_add( Operation *op, SlapReply *rs )
}
if ( BACKSQL_IS_ADD( oc->bom_expect_return ) ) {
SQLBindParameter( sth, 1, SQL_PARAM_OUTPUT, SQL_C_ULONG,
SQL_INTEGER, 0, 0, &new_keyval, 0, 0 );
rc = backsql_BindParamInt( sth, 1, SQL_PARAM_OUTPUT, &new_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding keyval parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
}
Debug( LDAP_DEBUG_TRACE, " backsql_add(\"%s\"): executing \"%s\"\n",
@ -1104,18 +1262,65 @@ backsql_add( Operation *op, SlapReply *rs )
goto done;
}
backsql_BindParamStr( sth, 1, realdn.bv_val, BACKSQL_MAX_DN_LEN );
SQLBindParameter( sth, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER,
0, 0, &oc->bom_id, 0, 0 );
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR,
0, 0, parent_id.eid_id.bv_val, 0, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, 3, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER,
0, 0, &parent_id.eid_id, 0, 0 );
#endif /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, 4, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER,
0, 0, &new_keyval, 0, 0 );
rc = backsql_BindParamBerVal( sth, 1, SQL_PARAM_INPUT, &realdn );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding DN parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = backsql_BindParamInt( sth, 2, SQL_PARAM_INPUT, &oc->bom_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding objectClass ID parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = backsql_BindParamID( sth, 3, SQL_PARAM_INPUT, &parent_id.eid_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding parent ID parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = backsql_BindParamInt( sth, 4, SQL_PARAM_INPUT, &new_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding entry ID parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
Debug( LDAP_DEBUG_TRACE, " backsql_add(): executing \"%s\" for dn \"%s\"\n",
bi->insentry_query, op->oq_add.rs_e->e_name.bv_val, 0 );

View File

@ -86,6 +86,7 @@ backsql_delete( Operation *op, SlapReply *rs )
SQLHDBC dbh;
SQLHSTMT sth;
RETCODE rc;
int retval;
backsql_oc_map_rec *oc = NULL;
backsql_entryID e_id = BACKSQL_ENTRYID_INIT;
Entry e;
@ -184,21 +185,39 @@ backsql_delete( Operation *op, SlapReply *rs )
if ( BACKSQL_IS_DEL( oc->bom_expect_return ) ) {
pno = 1;
SQLBindParameter( sth, 1, SQL_PARAM_OUTPUT, SQL_C_ULONG,
SQL_INTEGER, 0, 0, &rc, 0, 0 );
rc = backsql_BindParamInt( sth, 1, SQL_PARAM_OUTPUT, &retval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_delete(): "
"error binding output parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
} else {
pno = 0;
}
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, pno + 1, SQL_PARAM_INPUT,
SQL_C_CHAR, SQL_VARCHAR, 0, 0, e_id.eid_keyval.bv_val,
0, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, pno + 1, SQL_PARAM_INPUT,
SQL_C_ULONG, SQL_INTEGER, 0, 0, &e_id.eid_keyval,
0, 0 );
#endif /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( sth, pno + 1, SQL_PARAM_INPUT, &e_id.eid_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_delete(): "
"error binding keyval parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = SQLExecute( sth );
if ( rc != SQL_SUCCESS ) {
@ -226,13 +245,22 @@ backsql_delete( Operation *op, SlapReply *rs )
goto done;
}
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR,
0, 0, e_id.eid_id.bv_val, 0, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER,
0, 0, &e_id.eid_id, 0, 0 );
#endif /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( sth, 1, SQL_PARAM_INPUT, &e_id.eid_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_delete(): "
"error binding auxiliary objectClasses "
"entry ID parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = SQLExecute( sth );
switch ( rc ) {
case SQL_NO_DATA:
@ -267,13 +295,22 @@ backsql_delete( Operation *op, SlapReply *rs )
goto done;
}
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR,
0, 0, e_id.eid_id.bv_val, 0, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER,
0, 0, &e_id.eid_id, 0, 0 );
#endif /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( sth, 1, SQL_PARAM_INPUT, &e_id.eid_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_delete(): "
"error binding referrals entry ID parameter "
"for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = SQLExecute( sth );
switch ( rc ) {
case SQL_NO_DATA:
@ -308,13 +345,22 @@ backsql_delete( Operation *op, SlapReply *rs )
goto done;
}
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR,
0, 0, e_id.eid_id.bv_val, 0, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER,
0, 0, &e_id.eid_id, 0, 0 );
#endif /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( sth, 1, SQL_PARAM_INPUT, &e_id.eid_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_delete(): "
"error binding entry ID parameter "
"for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = SQLExecute( sth );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, " backsql_delete(): "

View File

@ -139,7 +139,7 @@ backsql_dn2id(
}
}
rc = backsql_BindParamStr( sth, 1, toBind.bv_val, BACKSQL_MAX_DN_LEN );
rc = backsql_BindParamBerVal( sth, 1, SQL_PARAM_INPUT, &toBind );
if ( rc != SQL_SUCCESS) {
/* end TimesTen */
Debug( LDAP_DEBUG_TRACE, "backsql_dn2id(): "
@ -229,7 +229,7 @@ backsql_count_children(
return LDAP_OTHER;
}
rc = backsql_BindParamStr( sth, 1, dn->bv_val, BACKSQL_MAX_DN_LEN );
rc = backsql_BindParamBerVal( sth, 1, SQL_PARAM_INPUT, dn );
if ( rc != SQL_SUCCESS) {
/* end TimesTen */
Debug( LDAP_DEBUG_TRACE, "backsql_count_children(): "
@ -329,12 +329,8 @@ backsql_get_attr_vals( void *v_at, void *v_bsi )
return 1;
}
#ifdef BACKSQL_ARBITRARY_KEY
rc = backsql_BindParamStr( sth, 1, bsi->bsi_c_eid->eid_keyval.bv_val,
BACKSQL_MAX_KEY_LEN );
#else /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( sth, 1, &bsi->bsi_c_eid->eid_keyval );
#endif /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( sth, 1, SQL_PARAM_INPUT,
&bsi->bsi_c_eid->eid_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, "backsql_get_attr_values(): "
"error binding key value parameter\n", 0, 0, 0 );

View File

@ -247,13 +247,22 @@ backsql_modrdn( Operation *op, SlapReply *rs )
goto done;
}
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR,
0, 0, e_id.eid_id.bv_val, 0, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, 1, SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER,
0, 0, &e_id.eid_id, 0, 0 );
#endif /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( sth, 1, SQL_PARAM_INPUT, &e_id.eid_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_delete(): "
"error binding entry ID parameter "
"for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = SQLExecute( sth );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, " backsql_modrdn(): "
@ -285,20 +294,66 @@ backsql_modrdn( Operation *op, SlapReply *rs )
goto done;
}
backsql_BindParamStr( sth, 1, new_dn.bv_val, BACKSQL_MAX_DN_LEN );
SQLBindParameter( sth, 2, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER,
0, 0, &e_id.eid_oc_id, 0, 0 );
#ifdef BACKSQL_ARBITRARY_KEY
SQLBindParameter( sth, 3, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR,
0, 0, new_pe_id.eid_id.bv_val, 0, 0 );
SQLBindParameter( sth, 4, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR,
0, 0, e_id.eid_keyval.bv_val, 0, 0 );
#else /* ! BACKSQL_ARBITRARY_KEY */
SQLBindParameter( sth, 3, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER,
0, 0, &new_pe_id.eid_id, 0, 0 );
SQLBindParameter( sth, 4, SQL_PARAM_INPUT, SQL_C_LONG, SQL_INTEGER,
0, 0, &e_id.eid_keyval, 0, 0 );
#endif /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamBerVal( sth, 1, SQL_PARAM_INPUT, &new_dn );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding DN parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = backsql_BindParamInt( sth, 2, SQL_PARAM_INPUT, &e_id.eid_oc_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding objectClass ID parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = backsql_BindParamID( sth, 3, SQL_PARAM_INPUT, &new_pe_id.eid_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding parent ID parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = backsql_BindParamID( sth, 4, SQL_PARAM_INPUT, &e_id.eid_keyval );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE,
" backsql_add_attr(): "
"error binding entry ID parameter for objectClass %s\n",
oc->bom_oc->soc_cname.bv_val, 0, 0 );
backsql_PrintErrors( bi->db_env, dbh,
sth, rc );
SQLFreeStmt( sth, SQL_DROP );
rs->sr_text = "SQL-backend error";
rs->sr_err = LDAP_OTHER;
goto done;
}
rc = SQLExecute( sth );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, " backsql_modrdn(): "

View File

@ -160,17 +160,31 @@ void backsql_init_search( backsql_srch_info *bsi,
RETCODE backsql_Prepare( SQLHDBC dbh, SQLHSTMT *sth, char* query, int timeout );
#define backsql_BindParamStr( sth, par_ind, str, maxlen ) \
#define backsql_BindParamStr( sth, par_ind, io, str, maxlen ) \
SQLBindParameter( (sth), (SQLUSMALLINT)(par_ind), \
SQL_PARAM_INPUT, \
SQL_C_CHAR, SQL_VARCHAR, \
(io), SQL_C_CHAR, SQL_VARCHAR, \
(SQLUINTEGER)(maxlen), 0, (SQLPOINTER)(str), \
(SQLUINTEGER)(maxlen), NULL )
#define backsql_BindParamID( sth, par_ind, id ) \
#define backsql_BindParamBerVal( sth, par_ind, io, bv ) \
SQLBindParameter( (sth), (SQLUSMALLINT)(par_ind), \
(io), SQL_C_CHAR, SQL_VARCHAR, \
(SQLUINTEGER)(bv)->bv_len, 0, \
(SQLPOINTER)(bv)->bv_val, \
(SQLUINTEGER)(bv)->bv_len, NULL )
#define backsql_BindParamInt( sth, par_ind, io, val ) \
SQLBindParameter( (sth), (SQLUSMALLINT)(par_ind), \
SQL_PARAM_INPUT, SQL_C_ULONG, SQL_INTEGER, \
0, 0, (SQLPOINTER)(id), 0, (SQLINTEGER*)NULL )
(io), SQL_C_ULONG, SQL_INTEGER, \
0, 0, (SQLPOINTER)(val), 0, (SQLINTEGER*)NULL )
#ifdef BACKSQL_ARBITRARY_KEY
#define backsql_BindParamID( sth, par_ind, io, id ) \
backsql_BindParamBerVal( (sth), (par_ind), (io), (id) )
#else /* ! BACKSQL_ARBITRARY_KEY */
#define backsql_BindParamID( sth, par_ind, io, id ) \
backsql_BindParamInt( (sth), (par_ind), (io), (id) )
#endif /* ! BACKSQL_ARBITRARY_KEY */
RETCODE backsql_BindRowAsStrings( SQLHSTMT sth, BACKSQL_ROW_NTS *row );

View File

@ -633,11 +633,12 @@ backsql_load_schema_map( backsql_info *si, SQLHDBC dbh )
return LDAP_OTHER;
}
rc = backsql_BindParamID( sth, 1, &oc_id );
rc = backsql_BindParamInt( sth, 1, SQL_PARAM_INPUT, &oc_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, "backsql_load_schema_map(): "
"error binding param \"oc_id\" for at_query\n", 0, 0, 0 );
backsql_PrintErrors( si->db_env, dbh, sth, rc );
SQLFreeStmt( sth, SQL_DROP );
return LDAP_OTHER;
}

View File

@ -1241,7 +1241,9 @@ backsql_oc_get_candidates( void *v_oc, void *v_bsi )
Debug( LDAP_DEBUG_TRACE, "id: '%ld'\n", bsi->bsi_oc->bom_id, 0, 0 );
if ( backsql_BindParamID( sth, 1, &bsi->bsi_oc->bom_id ) != SQL_SUCCESS ) {
rc = backsql_BindParamInt( sth, 1, SQL_PARAM_INPUT,
&bsi->bsi_oc->bom_id );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, "backsql_oc_get_candidates(): "
"error binding objectclass id parameter\n", 0, 0, 0 );
bsi->bsi_status = LDAP_OTHER;
@ -1272,8 +1274,8 @@ backsql_oc_get_candidates( void *v_oc, void *v_bsi )
Debug( LDAP_DEBUG_TRACE, "(base)dn: \"%s\"\n",
temp_base_dn, 0, 0 );
rc = backsql_BindParamStr( sth, 2, temp_base_dn,
BACKSQL_MAX_DN_LEN );
rc = backsql_BindParamStr( sth, 2, SQL_PARAM_INPUT,
temp_base_dn, BACKSQL_MAX_DN_LEN );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, "backsql_oc_get_candidates(): "
"error binding base_dn parameter\n", 0, 0, 0 );
@ -1331,8 +1333,8 @@ backsql_oc_get_candidates( void *v_oc, void *v_bsi )
Debug( LDAP_DEBUG_TRACE, "(sub)dn: \"%s\"\n", temp_base_dn,
0, 0 );
rc = backsql_BindParamStr( sth, 2, temp_base_dn,
BACKSQL_MAX_DN_LEN );
rc = backsql_BindParamStr( sth, 2, SQL_PARAM_INPUT,
temp_base_dn, BACKSQL_MAX_DN_LEN );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, "backsql_oc_get_candidates(): "
"error binding base_dn parameter (2)\n",
@ -1360,15 +1362,12 @@ backsql_oc_get_candidates( void *v_oc, void *v_bsi )
#ifdef BACKSQL_ARBITRARY_KEY
Debug( LDAP_DEBUG_TRACE, "(one)id: \"%s\"\n",
base_id.eid_id.bv_val, 0, 0 );
rc = backsql_BindParamStr( sth, 2, base_id.eid_id.bv_val,
BACKSQL_MAX_KEY_LEN );
#else /* ! BACKSQL_ARBITRARY_KEY */
Debug( LDAP_DEBUG_TRACE, "(one)id: '%lu'\n", base_id.eid_id,
0, 0 );
rc = backsql_BindParamID( sth, 2, &base_id.eid_id );
#endif /* ! BACKSQL_ARBITRARY_KEY */
rc = backsql_BindParamID( sth, 2, SQL_PARAM_INPUT,
&base_id.eid_id );
backsql_free_entryID( &base_id, 0 );
if ( rc != SQL_SUCCESS ) {
Debug( LDAP_DEBUG_TRACE, "backsql_oc_get_candidates(): "