- SQLHSTMT oc_sth,at_sth;
- RETCODE rc;
- BACKSQL_ROW_NTS oc_row,at_row;
- unsigned long oc_id;
- backsql_oc_map_rec *oc_map;
- backsql_at_map_rec *at_map;
- char *tmps;
- int tmpslen;
-
- Debug(LDAP_DEBUG_TRACE,"==>load_schema_map()\n",0,0,0);
-
- /* TimesTen : See if the ldap_entries.dn_ru field exists in the schema. */
-
- rc = backsql_Prepare(dbh, &oc_sth, backsql_check_dn_ru_query, 0);
- if (rc == SQL_SUCCESS) {
- si->has_ldapinfo_dn_ru = 1; /* Yes, the field exists */
- Debug(LDAP_DEBUG_TRACE, "ldapinfo.dn_ru field exists in the schema\n", 0, 0,0);
- }
- else {
- si->has_ldapinfo_dn_ru = 0; /* No such field exists */
- }
-
- SQLFreeStmt(oc_sth, SQL_DROP);
-
- rc=backsql_Prepare(dbh,&oc_sth,si->oc_query,0);
- if (rc != SQL_SUCCESS)
- {
- Debug(LDAP_DEBUG_TRACE,"load_schema_map(): error preparing oc_query: '%s'\n",si->oc_query,0,0);
- backsql_PrintErrors(si->db_env,dbh,oc_sth,rc);
- return -1;
- }
- Debug(LDAP_DEBUG_TRACE, "load_schema_map(): at_query '%s'\n", si->at_query,0,0);
-
- rc=backsql_Prepare(dbh,&at_sth,si->at_query,0);
- if (rc != SQL_SUCCESS)
- {
- Debug(LDAP_DEBUG_TRACE,"load_schema_map(): error preparing at_query: '%s'\n",si->at_query,0,0);
- backsql_PrintErrors(si->db_env,dbh,at_sth,rc);
- return -1;
- }
- if ((rc=backsql_BindParamID(at_sth,1,&oc_id)) != SQL_SUCCESS)
- {
- Debug(LDAP_DEBUG_TRACE,"load_schema_map(): error binding param for at_query: \n",0,0,0);
- backsql_PrintErrors(si->db_env,dbh,at_sth,rc);
- return -1;
- }
- if ((rc=SQLExecute(oc_sth)) != SQL_SUCCESS)
- {
- Debug(LDAP_DEBUG_TRACE,"load_schema_map(): error executing oc_query: \n",0,0,0);
- backsql_PrintErrors(si->db_env,dbh,oc_sth,rc);
- return -1;
- }
- backsql_BindRowAsStrings(oc_sth,&oc_row);
- while ((rc=SQLFetch(oc_sth)) == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
- {
- oc_map=(backsql_oc_map_rec*)ch_calloc(1,sizeof(backsql_oc_map_rec));
- oc_map->id=atoi(oc_row.cols[0]);
- oc_map->name=ch_strdup(oc_row.cols[1]);
- oc_map->keytbl=ch_strdup(oc_row.cols[2]);
- oc_map->keycol=ch_strdup(oc_row.cols[3]);
- oc_map->create_proc=(oc_row.is_null[4]<0)?NULL:ch_strdup(oc_row.cols[4]);
- oc_map->delete_proc=(oc_row.is_null[5]<0)?NULL:ch_strdup(oc_row.cols[5]);
- oc_map->expect_return=atoi(oc_row.cols[6]);
-
- oc_map->attrs=NULL;
- avl_insert(&si->oc_by_name,oc_map,(AVL_CMP)backsql_cmp_oc_name,backsql_dummy);
- avl_insert(&si->oc_by_id,oc_map,(AVL_CMP)backsql_cmp_oc_id,backsql_dummy);
- oc_id=oc_map->id;
- Debug(LDAP_DEBUG_TRACE,"load_schema_map(): objectclass '%s': keytbl='%s' keycol='%s' ",
- oc_map->name,oc_map->keytbl,oc_map->keycol);
- if (oc_map->delete_proc) {
- Debug(LDAP_DEBUG_TRACE,"delete_proc='%s'\n", oc_map->delete_proc, 0, 0);
- }
- if (oc_map->create_proc) {
- Debug(LDAP_DEBUG_TRACE,"create_proc='%s'\n", oc_map->create_proc, 0, 0);
- }
- Debug(LDAP_DEBUG_TRACE,"expect_return=%d; attributes:\n",
- oc_map->expect_return, 0, 0);
-
- Debug(LDAP_DEBUG_TRACE,"load_schema_map(): autoadding 'objectClass' and 'ref' mappings\n",0,0,0);
- backsql_add_sysmaps(oc_map);
- if ((rc=SQLExecute(at_sth)) != SQL_SUCCESS)
- {
- Debug(LDAP_DEBUG_TRACE,"load_schema_map(): error executing at_query: \n",0,0,0);
- backsql_PrintErrors(SQL_NULL_HENV,dbh,at_sth,rc);
- return -1;
- }
- backsql_BindRowAsStrings(at_sth,&at_row);
- while ((rc=SQLFetch(at_sth)) == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO)
- {
- Debug(LDAP_DEBUG_TRACE,"********'%s'\n",at_row.cols[0],0,0);
- Debug(LDAP_DEBUG_TRACE,"name='%s',sel_expr='%s' from='%s' ",at_row.cols[0],
- at_row.cols[1],at_row.cols[2]);
- Debug(LDAP_DEBUG_TRACE,"join_where='%s',add_proc='%s' ",at_row.cols[3],
- at_row.cols[4],0);
- Debug(LDAP_DEBUG_TRACE,"delete_proc='%s'\n",at_row.cols[5],0,0);
- Debug(LDAP_DEBUG_TRACE,"sel_expr_u='%s'\n", at_row.cols[8],0,0); // TimesTen
- at_map=(backsql_at_map_rec*)ch_calloc(1,sizeof(backsql_at_map_rec));
- at_map->name=ch_strdup(at_row.cols[0]);
- at_map->sel_expr=ch_strdup(at_row.cols[1]);
- at_map->sel_expr_u = (at_row.is_null[8]<0)?NULL:ch_strdup(at_row.cols[8
-]);
- tmps=NULL;tmpslen=0;
- backsql_merge_from_clause(&tmps,&tmpslen,at_row.cols[2]);
- at_map->from_tbls=ch_strdup(tmps);
- ch_free(tmps);
- at_map->join_where=ch_strdup((at_row.is_null[3]<0)?"":at_row.cols[3]);
- at_map->add_proc=(at_row.is_null[4]<0)?NULL:ch_strdup(at_row.cols[4]);
- at_map->delete_proc=(at_row.is_null[5]<0)?NULL:ch_strdup(at_row.cols[5]);
- at_map->param_order=atoi(at_row.cols[6]);
- at_map->expect_return=atoi(at_row.cols[7]);
- backsql_make_attr_query(oc_map,at_map);
- Debug(LDAP_DEBUG_TRACE,"load_schema_map(): preconstructed query '%s'\n",at_map->query,0,0);
- avl_insert(&oc_map->attrs,at_map,(AVL_CMP)backsql_cmp_attr,backsql_dummy);
- }
- backsql_FreeRow(&at_row);
- SQLFreeStmt(at_sth,SQL_CLOSE);
- }
- backsql_FreeRow(&oc_row);
- SQLFreeStmt(at_sth,SQL_DROP);
- SQLFreeStmt(oc_sth,SQL_DROP);
- si->schema_loaded=1;
- Debug(LDAP_DEBUG_TRACE,"<==load_schema_map()\n",0,0,0);
- return 1;