refactor db_subscr_purge

Use named parameters in the SQL statements.

Use db_bind_* functions to drop some code dup.

Adopt error handling (rc and logging) to match the other db functions: return
-ENOENT for unknown subscriber, -EIO for SQL failures.

Change-Id: Iad49d29b90a708c6cf55bfb3bcc02d9e29001a15
diff --git a/tests/db/db_test.c b/tests/db/db_test.c
index 5acd1e8..20553ef 100644
--- a/tests/db/db_test.c
+++ b/tests/db/db_test.c
@@ -320,6 +320,44 @@
 	ASSERT_RC(db_subscr_lu(dbc, 99999, "712", false), -ENOENT);
 	ASSERT_SEL(id, 99999, -ENOENT);
 
+	comment("Purge and un-purge PS and CS");
+
+	/*                               purge_val, is_ps */
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, true, true), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, true, false), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, false, false), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, false, true), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+
+	comment("Purge PS and CS *again*");
+
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, true, true), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, true, true), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, false, true), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, false, true), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, true, false), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, true, false), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, false, false), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+	ASSERT_RC(db_subscr_purge(dbc, imsi0, false, false), 0);
+	ASSERT_SEL(imsi, imsi0, 0);
+
+	comment("Purge on non-existent / invalid IMSI");
+
+	ASSERT_RC(db_subscr_purge(dbc, unknown_imsi, true, true), -ENOENT);
+	ASSERT_SEL(imsi, unknown_imsi, -ENOENT);
+	ASSERT_RC(db_subscr_purge(dbc, unknown_imsi, true, false), -ENOENT);
+	ASSERT_SEL(imsi, unknown_imsi, -ENOENT);
+
 	comment("Delete non-existent / invalid IDs");
 
 	ASSERT_RC(db_subscr_delete_by_id(dbc, 999), -ENOENT);