From 13d4d8b7b49a853853e6ca21768c4f9b457995d0 Mon Sep 17 00:00:00 2001 From: Barak Michener Date: Mon, 27 Jul 2015 13:48:41 -0400 Subject: [PATCH] revert to non-subquery mode --- graph/sql/sql_link_iterator.go | 52 +++++++++++++++--------------------------- graph/sql/sql_node_iterator.go | 10 -------- 2 files changed, 18 insertions(+), 44 deletions(-) diff --git a/graph/sql/sql_link_iterator.go b/graph/sql/sql_link_iterator.go index 5f913d3..1986df1 100644 --- a/graph/sql/sql_link_iterator.go +++ b/graph/sql/sql_link_iterator.go @@ -31,7 +31,6 @@ var sqlTableID uint64 func init() { sqlLinkType = graph.RegisterIterator("sqllink") - sqlNodeType = graph.RegisterIterator("sqlnode") atomic.StoreUint64(&sqlTableID, 0) } @@ -64,7 +63,6 @@ type sqlIterator interface { getTags() []tagDir buildWhere() (string, []string) tableID() tagDir - height() int } type SQLLinkIterator struct { @@ -72,7 +70,6 @@ type SQLLinkIterator struct { qs *QuadStore tagger graph.Tagger err error - next bool cursor *sql.Rows nodeIts []sqlItDir @@ -110,10 +107,11 @@ func (l *SQLLinkIterator) sqlClone() sqlIterator { func (l *SQLLinkIterator) Clone() graph.Iterator { m := &SQLLinkIterator{ - uid: iterator.NextUID(), - qs: l.qs, - tableName: l.tableName, - size: l.size, + uid: iterator.NextUID(), + qs: l.qs, + tableName: l.tableName, + size: l.size, + constraints: make([]constraint, 0, len(l.constraints)), } for _, i := range l.nodeIts { m.nodeIts = append(m.nodeIts, sqlItDir{ @@ -121,7 +119,7 @@ func (l *SQLLinkIterator) Clone() graph.Iterator { it: i.it.sqlClone(), }) } - m.constraints = l.constraints[:] + copy(m.constraints, l.constraints) m.tagger.CopyFrom(l) return m } @@ -292,20 +290,10 @@ func (l *SQLLinkIterator) buildResult(i int) { func (l *SQLLinkIterator) getTables() []string { out := []string{l.tableName} - //for _, i := range l.nodeIts { - //out = append(out, i.it.getTables()...) - //} - return out -} - -func (l *SQLLinkIterator) height() int { - v := 0 for _, i := range l.nodeIts { - if i.it.height() > v { - v = i.it.height() - } + out = append(out, i.it.getTables()...) } - return v + 1 + return out } func (l *SQLLinkIterator) getTags() []tagDir { @@ -317,9 +305,9 @@ func (l *SQLLinkIterator) getTags() []tagDir { tag: tag, }) } - //for _, i := range l.nodeIts { - //out = append(out, i.it.getTags()...) - //} + for _, i := range l.nodeIts { + out = append(out, i.it.getTags()...) + } return out } @@ -331,17 +319,14 @@ func (l *SQLLinkIterator) buildWhere() (string, []string) { vals = append(vals, c.vals[0]) } for _, i := range l.nodeIts { - sni := i.it.(*SQLNodeIterator) - sql, s := sni.buildSQL(true, nil) - q = append(q, fmt.Sprintf("%s.%s in (%s)", l.tableName, i.dir, sql[:len(sql)-1])) - vals = append(vals, s...) - //q = append(q, fmt.Sprintf("%s.%s = %s.%s", l.tableName, i.dir, t.table, t.dir)) + t := i.it.tableID() + q = append(q, fmt.Sprintf("%s.%s = %s.%s", l.tableName, i.dir, t.table, t.dir)) + } + for _, i := range l.nodeIts { + s, v := i.it.buildWhere() + q = append(q, s) + vals = append(vals, v...) } - //for _, i := range l.nodeIts { - //s, v := i.it.buildWhere() - //q = append(q, s) - //vals = append(vals, v...) - //} query := strings.Join(q, " AND ") return query, vals } @@ -372,7 +357,6 @@ func (l *SQLLinkIterator) buildSQL(next bool, val graph.Value) (string, []string } query += strings.Join(t, ", ") query += " WHERE " - l.next = next constraint, values := l.buildWhere() if !next { diff --git a/graph/sql/sql_node_iterator.go b/graph/sql/sql_node_iterator.go index e276399..4f18382 100644 --- a/graph/sql/sql_node_iterator.go +++ b/graph/sql/sql_node_iterator.go @@ -221,16 +221,6 @@ func (n *SQLNodeIterator) getTags() []tagDir { return out } -func (n *SQLNodeIterator) height() int { - v := 0 - for _, i := range n.linkIts { - if i.it.height() > v { - v = i.it.height() - } - } - return v + 1 -} - func (n *SQLNodeIterator) buildWhere() (string, []string) { var q []string var vals []string