Commit 2aac7b89 authored by Stephen Morris's avatar Stephen Morris
Browse files

[1330] Update after review

Resolved confusion over "operation" values for adding and deleting
records.  Added ORDER BY clause to SQL statement and removed
redundant variable declaration.
parent f94f5bc0
......@@ -23,6 +23,7 @@
#include <datasrc/logger.h>
#include <datasrc/data_source.h>
#include <datasrc/factory.h>
#include <datasrc/database.h>
#include <util/filename.h>
using namespace std;
......@@ -96,16 +97,17 @@ const char* const text_statements[NUM_STATEMENTS] = {
// Two statements to select the lowest ID and highest ID in a set of
// differences.
"SELECT id FROM diffs " // LOW_DIFF_ID
"WHERE zone_id=?1 AND version=?2 and OPERATION=0 "
"WHERE zone_id=?1 AND version=?2 and OPERATION=?3 "
"ORDER BY id ASC LIMIT 1",
"SELECT id FROM diffs " // HIGH_DIFF_ID
"WHERE zone_id=?1 AND version=?2 and OPERATION=1 "
"WHERE zone_id=?1 AND version=?2 and OPERATION=?3 "
"ORDER BY id DESC LIMIT 1",
// In the next statement, note the redundant ID. This is to ensure
// that the columns match the column IDs passed to the iterator
"SELECT rrtype, ttl, id, rdata, name FROM diffs " // DIFF_RECS
"WHERE zone_id=?1 AND id>=?2 and id<=?3"
"WHERE zone_id=?1 AND id>=?2 and id<=?3 "
"ORDER BY id ASC"
};
struct SQLite3Parameters {
......@@ -622,8 +624,8 @@ public:
last_status_(SQLITE_ROW)
{
try {
int low_id = findIndex(LOW_DIFF_ID, zone_id, start);
int high_id = findIndex(HIGH_DIFF_ID, zone_id, end);
int low_id = findIndex(LOW_DIFF_ID, zone_id, start, DIFF_DELETE);
int high_id = findIndex(HIGH_DIFF_ID, zone_id, end, DIFF_ADD);
// Prepare the statement that will return data values
reset(DIFF_RECS);
......@@ -743,7 +745,7 @@ private:
// Got some data, extract the value
result = sqlite3_column_int(stmt, 0);
int rc = sqlite3_step(stmt);
rc = sqlite3_step(stmt);
if (rc == SQLITE_DONE) {
// All OK, exit with the value.
......@@ -777,6 +779,7 @@ private:
/// \param stmt_id Index of the prepared statement to execute
/// \param zone_id ID of the zone for which the index is being sought
/// \param serial Zone serial number for which an index is being sought.
/// \param diff Code to delete record additions or deletions
///
/// \return int ID of the row in the difss table corresponding to the
/// statement.
......@@ -785,19 +788,20 @@ private:
/// was expected.
/// \exception NoSuchSerial Serial number not found.
/// \exception NoDiffsData No data for this zone found in diffs table
int findIndex(StatementID stindex, int zone_id, uint32_t serial) {
int findIndex(StatementID stindex, int zone_id, uint32_t serial, int diff) {
// Set up the statement
reset(stindex);
bindInt(stindex, 1, zone_id);
bindInt(stindex, 2, serial);
bindInt(stindex, 3, diff);
// Execute the statement
int result = -1;
try {
result = getSingleValue(stindex);
} catch (TooLittleData) {
} catch (const TooLittleData&) {
// No data returned but the SQL query succeeded. Only possibility
// is that there is no entry in the differences table for the given
......
......@@ -45,77 +45,77 @@ CREATE TABLE diffs (id INTEGER PRIMARY KEY,
-- Change from 4294967280 (0xfffffff0) to 1230 to show serial rollover
-- Update one record in the zone.
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 4294967280, 0, "example.org.", "SOA", 3600,
VALUES(1, 4294967280, 1, "example.org.", "SOA", 3600,
"ns1.example.org. admin.example.org. 4294967280 3600 1800 2419200 7200");
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 4294967280, 0, "www.example.org.", "A", 3600, "192.0.2.31");
VALUES(1, 4294967280, 1, "www.example.org.", "A", 3600, "192.0.2.31");
-- Records added in version 1230 of the zone
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1230, 1, "example.org.", "SOA", 1800,
VALUES(1, 1230, 0, "example.org.", "SOA", 1800,
"ns1.example.org. admin.example.org. 1230 3600 1800 2419200 7200");
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1230, 1, "www.example.org.", "A", 3600, "192.0.2.21");
VALUES(1, 1230, 0, "www.example.org.", "A", 3600, "192.0.2.21");
-- Change 1230 to 1231: Change change a parameter of the SOA record
-- Records removed from version 1230 of the zone
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1230, 0, "example.org.", "SOA", 1800,
VALUES(1, 1230, 1, "example.org.", "SOA", 1800,
"ns1.example.org. admin.example.org. 1230 3600 1800 2419200 7200");
-- Records added in version 1231 of the zone
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1231, 1, "example.org.", "SOA", 3600,
VALUES(1, 1231, 0, "example.org.", "SOA", 3600,
"ns1.example.org. admin.example.org. 1231 3600 1800 2419200 7200");
-- Change 1231 to 1232: Remove one record, don't add anything.
-- Records removed from version 1231 of the zone
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1231, 0, "example.org.", "SOA", 3600,
VALUES(1, 1231, 1, "example.org.", "SOA", 3600,
"ns1.example.org. admin.example.org. 1231 3600 1800 2419200 7200");
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1231, 0, "unused.example.org.", "A", 3600, "192.0.2.102");
VALUES(1, 1231, 1, "unused.example.org.", "A", 3600, "192.0.2.102");
-- Records added in version 1232 of the zone
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1232, 1, "example.org.", "SOA", 3600,
VALUES(1, 1232, 0, "example.org.", "SOA", 3600,
"ns1.example.org. admin.example.org. 1232 3600 1800 2419200 7200");
-- Change 1232 to 1233: Add two, don't remove anything.
-- Records removed from version 1232 of the zone
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1232, 0, "example.org.", "SOA", 3600,
VALUES(1, 1232, 1, "example.org.", "SOA", 3600,
"ns1.example.org. admin.example.org. 1232 3600 1800 2419200 7200");
-- Records added in version 1233 of the zone
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1233, 1, "example.org.", "SOA", 3600,
VALUES(1, 1233, 0, "example.org.", "SOA", 3600,
"ns1.example.org. admin.example.org. 1233 3600 1800 2419200 7200");
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1233, 1, "sub.example.org.", "NS", 3600, "ns.sub.example.org.");
VALUES(1, 1233, 0, "sub.example.org.", "NS", 3600, "ns.sub.example.org.");
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1233, 1, "ns.sub.example.org.", "A", 3600, "192.0.2.101");
VALUES(1, 1233, 0, "ns.sub.example.org.", "A", 3600, "192.0.2.101");
-- Change 1233 to 1234: change addresses of two A records
-- Records removed from version 1233 of the zone
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1233, 0, "example.org.", "SOA", 3600,
VALUES(1, 1233, 1, "example.org.", "SOA", 3600,
"ns1.example.org. admin.example.org. 1233 3600 1800 2419200 7200");
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1233, 0, "www.example.org.", "A", 3600, "192.0.2.21");
VALUES(1, 1233, 1, "www.example.org.", "A", 3600, "192.0.2.21");
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1233, 0, "mail.example.org.", "A", 3600, "192.0.2.210");
VALUES(1, 1233, 1, "mail.example.org.", "A", 3600, "192.0.2.210");
-- Records added in version 1234 of the zone
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1234, 1, "example.org.", "SOA", 3600,
VALUES(1, 1234, 0, "example.org.", "SOA", 3600,
"ns1.example.org. admin.example.org. 1234 3600 1800 2419200 7200");
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1234, 1, "www.example.org.", "A", 3600, "192.0.2.1");
VALUES(1, 1234, 0, "www.example.org.", "A", 3600, "192.0.2.1");
INSERT INTO diffs(zone_id, version, operation, name, rrtype, ttl, rdata)
VALUES(1, 1234, 1, "mail.example.org.", "A", 3600, "192.0.2.10");
VALUES(1, 1234, 0, "mail.example.org.", "A", 3600, "192.0.2.10");
-- Finally, update the zone_id in the diffs table with what is actually
-- in the zone table.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment