revert to non-subquery mode
This commit is contained in:
parent
7153a766c1
commit
13d4d8b7b4
2 changed files with 18 additions and 44 deletions
|
|
@ -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 {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue