aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2019-12-28 21:14:35 +0100
committerMartin Polden <mpolden@mpolden.no>2019-12-28 21:14:35 +0100
commit54d04fdfc68cd3a5c28740f5bfe739acc2d3e1d3 (patch)
treeb0f06d16b03ee56fb8dbc0f723b86e489ab5b8ee
parent209e7522d2e6bc4b90de9ab36b37ade24fae0b50 (diff)
Read log entry with zero answers
-rw-r--r--sql/sql.go6
-rw-r--r--sql/sql_test.go15
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)
}
}
}