revert to non-subquery mode

This commit is contained in:
Barak Michener 2015-07-27 13:48:41 -04:00
parent 7153a766c1
commit 13d4d8b7b4
2 changed files with 18 additions and 44 deletions

View file

@ -31,7 +31,6 @@ var sqlTableID uint64
func init() { func init() {
sqlLinkType = graph.RegisterIterator("sqllink") sqlLinkType = graph.RegisterIterator("sqllink")
sqlNodeType = graph.RegisterIterator("sqlnode")
atomic.StoreUint64(&sqlTableID, 0) atomic.StoreUint64(&sqlTableID, 0)
} }
@ -64,7 +63,6 @@ type sqlIterator interface {
getTags() []tagDir getTags() []tagDir
buildWhere() (string, []string) buildWhere() (string, []string)
tableID() tagDir tableID() tagDir
height() int
} }
type SQLLinkIterator struct { type SQLLinkIterator struct {
@ -72,7 +70,6 @@ type SQLLinkIterator struct {
qs *QuadStore qs *QuadStore
tagger graph.Tagger tagger graph.Tagger
err error err error
next bool
cursor *sql.Rows cursor *sql.Rows
nodeIts []sqlItDir nodeIts []sqlItDir
@ -110,10 +107,11 @@ func (l *SQLLinkIterator) sqlClone() sqlIterator {
func (l *SQLLinkIterator) Clone() graph.Iterator { func (l *SQLLinkIterator) Clone() graph.Iterator {
m := &SQLLinkIterator{ m := &SQLLinkIterator{
uid: iterator.NextUID(), uid: iterator.NextUID(),
qs: l.qs, qs: l.qs,
tableName: l.tableName, tableName: l.tableName,
size: l.size, size: l.size,
constraints: make([]constraint, 0, len(l.constraints)),
} }
for _, i := range l.nodeIts { for _, i := range l.nodeIts {
m.nodeIts = append(m.nodeIts, sqlItDir{ m.nodeIts = append(m.nodeIts, sqlItDir{
@ -121,7 +119,7 @@ func (l *SQLLinkIterator) Clone() graph.Iterator {
it: i.it.sqlClone(), it: i.it.sqlClone(),
}) })
} }
m.constraints = l.constraints[:] copy(m.constraints, l.constraints)
m.tagger.CopyFrom(l) m.tagger.CopyFrom(l)
return m return m
} }
@ -292,20 +290,10 @@ func (l *SQLLinkIterator) buildResult(i int) {
func (l *SQLLinkIterator) getTables() []string { func (l *SQLLinkIterator) getTables() []string {
out := []string{l.tableName} 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 { for _, i := range l.nodeIts {
if i.it.height() > v { out = append(out, i.it.getTables()...)
v = i.it.height()
}
} }
return v + 1 return out
} }
func (l *SQLLinkIterator) getTags() []tagDir { func (l *SQLLinkIterator) getTags() []tagDir {
@ -317,9 +305,9 @@ func (l *SQLLinkIterator) getTags() []tagDir {
tag: tag, tag: tag,
}) })
} }
//for _, i := range l.nodeIts { for _, i := range l.nodeIts {
//out = append(out, i.it.getTags()...) out = append(out, i.it.getTags()...)
//} }
return out return out
} }
@ -331,17 +319,14 @@ func (l *SQLLinkIterator) buildWhere() (string, []string) {
vals = append(vals, c.vals[0]) vals = append(vals, c.vals[0])
} }
for _, i := range l.nodeIts { for _, i := range l.nodeIts {
sni := i.it.(*SQLNodeIterator) t := i.it.tableID()
sql, s := sni.buildSQL(true, nil) q = append(q, fmt.Sprintf("%s.%s = %s.%s", l.tableName, i.dir, t.table, t.dir))
q = append(q, fmt.Sprintf("%s.%s in (%s)", l.tableName, i.dir, sql[:len(sql)-1])) }
vals = append(vals, s...) for _, i := range l.nodeIts {
//q = append(q, fmt.Sprintf("%s.%s = %s.%s", l.tableName, i.dir, t.table, t.dir)) 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 ") query := strings.Join(q, " AND ")
return query, vals return query, vals
} }
@ -372,7 +357,6 @@ func (l *SQLLinkIterator) buildSQL(next bool, val graph.Value) (string, []string
} }
query += strings.Join(t, ", ") query += strings.Join(t, ", ")
query += " WHERE " query += " WHERE "
l.next = next
constraint, values := l.buildWhere() constraint, values := l.buildWhere()
if !next { if !next {

View file

@ -221,16 +221,6 @@ func (n *SQLNodeIterator) getTags() []tagDir {
return out 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) { func (n *SQLNodeIterator) buildWhere() (string, []string) {
var q []string var q []string
var vals []string var vals []string