Skip to content
This repository was archived by the owner on Sep 7, 2021. It is now read-only.
This repository is currently being migrated. It's locked while the migration is in progress.
This repository was archived by the owner on Sep 7, 2021. It is now read-only.

errors when using cacher and session #1352

@guangfnian

Description

@guangfnian

I'm using sqlite3, my database is like

drop table if exists a;
create table if not exists a
(
    name  text primary key,
    value integer
);

drop table if exists b;

create table if not exists b
(
    id integer primary key autoincrement,
    name references a (name) on delete cascade on update cascade
);

and my golang code is here:

package main

import (
	"github.com/go-xorm/xorm"
	_ "github.com/mattn/go-sqlite3"
	"log"
)

type A struct {
	Name string `xorm:"text pk"`
	Value int `xorm:"integer"`
}

type B struct {
	Id int64
	Name string `xorm:"text"`
}

func createData(engine *xorm.Engine) {
	_, err := engine.InsertOne(&A{Name:"test", Value:233})
	if err != nil {
		log.Fatal("insert a", err)
	}
	_, err = engine.InsertOne(&B{Id:1, Name:"test"})
	if err != nil {
		log.Fatal("insert b", err)
	}
}

func main() {
	engine, err := xorm.NewEngine("sqlite3", "test.db?_foreign_keys=on")
	if err != nil {
		panic(err)
	}
	cacher := xorm.NewLRUCacher(xorm.NewMemoryStore(), 1000)
	engine.SetDefaultCacher(cacher)
	//createData(engine)

	session := engine.NewSession()

	nodeId := int64(1)

	b := &B{}
	has, err := session.ID(nodeId).Get(b)
	if err != nil {
		log.Fatal("select b err, ", err)
	}
	if !has {
		log.Fatal("b not exists")
	}

	a := &A{}
	has, err = session.Where("name=?", b.Name).Get(a)
	if err != nil {
		log.Fatal("select a err, ", err)
	}
	if !has {
		log.Fatal("a not exists")
	}

	log.Println(a)

	// ====  repeat to use cache
	b = &B{}
	has, err = session.ID(nodeId).Get(b)
	if err != nil {
		log.Fatal("select b err, ", err)
	}
	if !has {
		log.Fatal("b not exists")
	}

	a = &A{}
	has, err = session.Where("name=?", b.Name).Get(a)
	if err != nil {
		log.Fatal("select a err, ", err)
	}
	if !has {
		log.Fatal("a not exists")
	}
	log.Println(a)
}

and the result of this program is like that:

2019/07/10 14:44:10 &{test 233}
2019/07/10 14:44:10 select a err, no such column: id

session with NoCache() runs into the same error

has, err = session.NoCache().Where("name=?", b.Name).Get(a)

but if i don't set cacher, or if i use engine instead of session, the program just works fine.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions