Hi Hung,
Reviewed and tested the patch.
Ack.
/Neel.
On Thursday 21 January 2016 02:38 PM, Hung Nguyen wrote:
> osaf/libs/common/immsv/immpbe_dump.cc | 65
> +++++++++++++++++++++++++++++++++++
> 1 files changed, 65 insertions(+), 0 deletions(-)
>
>
> Check duplicate values for attributes defined as SA_NO_DUPLICATES.
>
> diff --git a/osaf/libs/common/immsv/immpbe_dump.cc
> b/osaf/libs/common/immsv/immpbe_dump.cc
> --- a/osaf/libs/common/immsv/immpbe_dump.cc
> +++ b/osaf/libs/common/immsv/immpbe_dump.cc
> @@ -3632,6 +3632,70 @@ done:
> return err;
> }
>
> +static int pbeAuditNoDuplicates(sqlite3 *dbHandle) {
> + sqlite3_stmt *stmt = NULL;
> + int rc;
> + int err = 0;
> + /* SA_IMM_ATTR_NO_DUPLICATES = 16777216 */
> + const char *sql =
> + "select obj.dn, ad.attr_name, oim.int_val as val,
> count(oim.int_val) as num "
> + "from attr_def ad, objects obj, objects_int_multi oim "
> + "where (ad.attr_flags & 16777216) = 16777216 "
> + "and obj.class_id = ad.class_id and oim.obj_id =
> obj.obj_id and oim.attr_name = ad.attr_name "
> + "group by obj.dn, ad.attr_name, oim.int_val "
> + "having num > 1 "
> + "union all "
> + "select obj.dn, ad.attr_name, otm.text_val as val,
> count(otm.text_val) as num "
> + "from attr_def ad, objects obj, objects_text_multi otm "
> + "where (ad.attr_flags & 16777216) = 16777216 "
> + "and obj.class_id = ad.class_id and otm.obj_id =
> obj.obj_id and otm.attr_name = ad.attr_name "
> + "group by obj.dn, ad.attr_name, otm.text_val "
> + "having num > 1 "
> + "union all "
> + "select obj.dn, ad.attr_name, orm.real_val as val,
> count(orm.real_val) as num "
> + "from attr_def ad, objects obj, objects_real_multi orm "
> + "where (ad.attr_flags & 16777216) = 16777216 "
> + "and obj.class_id = ad.class_id and orm.obj_id =
> obj.obj_id and orm.attr_name = ad.attr_name "
> + "group by obj.dn, ad.attr_name, orm.real_val "
> + "having num > 1 "
> + "union all "
> + "select obj.dn, ad.attr_name, obm.blob_val as val,
> count(obm.blob_val) as num "
> + "from attr_def ad, objects obj, objects_blob_multi obm "
> + "where (ad.attr_flags & 16777216) = 16777216 "
> + "and obj.class_id = ad.class_id and obm.obj_id =
> obj.obj_id and obm.attr_name = ad.attr_name "
> + "group by obj.dn, ad.attr_name, obm.blob_val "
> + "having num > 1";
> +
> + /* Audit NO_DUPLICATES for multi-valued attributes */
> + rc = sqlite3_prepare_v2(dbHandle, sql, -1, &stmt, NULL);
> + if(rc != SQLITE_OK) {
> + LOG_ER("Failed to prepare SQL statement for(%d): %s", rc, sql);
> + err = 1;
> + goto end;
> + }
> +
> + while((rc = sqlite3_step(stmt)) == SQLITE_ROW) {
> + LOG_ER("NO_DUPLICATES: '%s:%s' has %s values of '%s'",
> + sqlite3_column_text(stmt, 0),
> + sqlite3_column_text(stmt, 1),
> + sqlite3_column_text(stmt, 3),
> + sqlite3_column_text(stmt, 2));
> + err = 1;
> + }
> +
> + if(rc != SQLITE_DONE) {
> + LOG_ER("SQL statement ('%s') failed with error code: %d\n",
> sql, rc);
> + err = 1;
> + }
> +
> +end:
> + if(stmt) {
> + sqlite3_finalize(stmt);
> + }
> +
> + return err;
> +}
> +
> int pbeAudit(void *db_handle) {
> int rc;
>
> @@ -3640,6 +3704,7 @@ int pbeAudit(void *db_handle) {
> rc |= pbeAuditObjectRdnFlag((sqlite3 *)db_handle);
> rc |= pbeAuditObjectDn((sqlite3 *)db_handle);
> rc |= pbeAuditClasses((sqlite3 *)db_handle);
> + rc |= pbeAuditNoDuplicates((sqlite3 *)db_handle);
>
> return rc;
> }
------------------------------------------------------------------------------
Transform Data into Opportunity.
Accelerate data analysis in your applications with
Intel Data Analytics Acceleration Library.
Click to learn more.
http://pubads.g.doubleclick.net/gampad/clk?id=278785351&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel