From 54d04fdfc68cd3a5c28740f5bfe739acc2d3e1d3 Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Sat, 28 Dec 2019 21:14:35 +0100 Subject: Read log entry with zero answers --- sql/sql.go | 6 +++--- sql/sql_test.go | 15 ++++++++++++++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/sql/sql.go b/sql/sql.go index a02c939..6763c8f 100644 --- a/sql/sql.go +++ b/sql/sql.go @@ -99,13 +99,13 @@ SELECT log.id AS id, hijacked, type, rr_question.name AS question, - rr_answer.name AS answer + IFNULL(rr_answer.name, "") AS answer FROM log INNER JOIN remote_addr ON remote_addr.id = log.remote_addr_id INNER JOIN rr_question ON rr_question.id = rr_question_id INNER JOIN rr_type ON rr_type.id = rr_type_id -INNER JOIN log_rr_answer ON log_rr_answer.log_id = log.id -INNER JOIN rr_answer ON rr_answer.id = log_rr_answer.rr_answer_id +LEFT JOIN log_rr_answer ON log_rr_answer.log_id = log.id +LEFT JOIN rr_answer ON rr_answer.id = log_rr_answer.rr_answer_id WHERE log.id IN (SELECT id FROM log ORDER BY time DESC, id DESC LIMIT $1) ORDER BY time DESC, rr_answer.id DESC ` diff --git a/sql/sql_test.go b/sql/sql_test.go index 868fecb..9fc20e2 100644 --- a/sql/sql_test.go +++ b/sql/sql_test.go @@ -1,8 +1,10 @@ package sql import ( + "fmt" "net" "reflect" + "strings" "sync" "testing" "time" @@ -36,6 +38,8 @@ var tests = []struct { []rowCount{{"rr_question", 2}, {"rr_answer", 5}, {"log", 6}, {"rr_type", 2}, {"remote_addr", 3}}}, {"baz.example.com", 28, false, []string{"2001:db8::4"}, time.Date(2019, 6, 15, 23, 35, 0, 0, time.UTC), net.IPv4(192, 0, 2, 102), []rowCount{{"rr_question", 3}, {"rr_answer", 6}, {"log", 7}, {"rr_type", 2}, {"remote_addr", 3}}}, + {"baz.example.com", 28, false, nil, time.Date(2019, 6, 16, 1, 5, 0, 0, time.UTC), net.IPv4(192, 0, 2, 102), + []rowCount{{"rr_question", 3}, {"rr_answer", 6}, {"log", 8}, {"rr_type", 2}, {"remote_addr", 3}}}, } func testClient() *Client { @@ -77,6 +81,7 @@ func TestReadLog(t *testing.T) { } } allEntries := [][]LogEntry{ + {{ID: 8, Question: "baz.example.com", Qtype: 28, Time: 1560647100, RemoteAddr: net.IPv4(192, 0, 2, 102)}}, {{ID: 7, Question: "baz.example.com", Qtype: 28, Answer: "2001:db8::4", Time: 1560641700, RemoteAddr: net.IPv4(192, 0, 2, 102)}}, { {ID: 6, Question: "bar.example.com", Qtype: 28, Answer: "2001:db8::3", Time: 1560641700, RemoteAddr: net.IPv4(192, 0, 2, 102)}, @@ -98,7 +103,15 @@ func TestReadLog(t *testing.T) { t.Errorf("len(got) = %d, want %d", len(got), len(want)) } if err != nil || !reflect.DeepEqual(got, want) { - t.Errorf("ReadLog(%d) = (%+v, %v), want (%+v, %v)", n, got, err, want, nil) + var sb1 strings.Builder + for _, e := range got { + sb1.WriteString(fmt.Sprintf(" %+v\n", e)) + } + var sb2 strings.Builder + for _, e := range want { + sb2.WriteString(fmt.Sprintf(" %+v\n", e)) + } + t.Errorf("ReadLog(%d) = (\n%s, %v),\nwant (\n%s, %v)", n, sb1.String(), err, sb2.String(), nil) } } } -- cgit v1.2.3