Bläddra i källkod

odb-go schema

libf 1 månad sedan
förälder
incheckning
e17077ce38
7 ändrade filer med 25 tillägg och 19 borttagningar
  1. 2 2
      go.mod
  2. 4 4
      go.sum
  3. 8 8
      importer/classstruct.go
  4. 1 1
      importer/importer.go
  5. 3 0
      importer/odbcimporter.go
  6. 3 2
      reader/blockreader.go
  7. 4 2
      reader/csvreader.go

+ 2 - 2
go.mod

@@ -3,11 +3,11 @@ module git.wecise.com/wecise/cgimport
 go 1.22.0
 
 require (
-	git.wecise.com/wecise/odb-go v0.0.0-20250224131503-50eb807bbe42
+	git.wecise.com/wecise/odb-go v0.0.0-20250321042023-40edb95aba8a
 	github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da
 	github.com/scylladb/go-set v1.0.2
 	github.com/spf13/cast v1.7.1
-	github.com/wecisecode/util v0.1.2
+	github.com/wecisecode/util v0.2.5
 )
 
 require (

+ 4 - 4
go.sum

@@ -1,5 +1,5 @@
-git.wecise.com/wecise/odb-go v0.0.0-20250224131503-50eb807bbe42 h1:19RGgqaA4liw4zQuBR8oTyfPKJrdOD+TRwQBzufOgno=
-git.wecise.com/wecise/odb-go v0.0.0-20250224131503-50eb807bbe42/go.mod h1:xIY+Dmw2LK9ephqNs8r8clD6zQ5+BuaTgk+6TxEe15M=
+git.wecise.com/wecise/odb-go v0.0.0-20250321042023-40edb95aba8a h1:DZT5pkoy30+NHpYeoH2LoUJChjDQ245d786EIw08SHk=
+git.wecise.com/wecise/odb-go v0.0.0-20250321042023-40edb95aba8a/go.mod h1:DInxP5wFvuPbMRr7+LjbUFTbNdrFG/6f6IQYvKJ1yT8=
 github.com/bluele/gcache v0.0.2 h1:WcbfdXICg7G/DGBh1PFfcirkWOQV+v077yF1pSy3DGw=
 github.com/bluele/gcache v0.0.2/go.mod h1:m15KV+ECjptwSPxKhOhQoAFQVtUFjTVkc3H8o0t/fp0=
 github.com/bsm/ginkgo/v2 v2.7.0 h1:ItPMPH90RbmZJt5GtkcNvIRuGEdwlBItdNVoyzaNQao=
@@ -73,8 +73,8 @@ github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IU
 github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok=
 github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g=
 github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds=
-github.com/wecisecode/util v0.1.2 h1:ELBM95ZptoY/suWdWWn07rXXl56v5KLC4TvqQFibGag=
-github.com/wecisecode/util v0.1.2/go.mod h1:fASrRbyMPjssR1owWRMZIBCUSRYo5YkcxOk+kG59byY=
+github.com/wecisecode/util v0.2.5 h1:nAGdiuh9x9W6Cv9ezx8mWGvzrQ3fGb+9htqQeq9k1eA=
+github.com/wecisecode/util v0.2.5/go.mod h1:fASrRbyMPjssR1owWRMZIBCUSRYo5YkcxOk+kG59byY=
 github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 go.etcd.io/etcd/api/v3 v3.5.18 h1:Q4oDAKnmwqTo5lafvB+afbgCDF7E35E4EYV2g+FNGhs=

+ 8 - 8
importer/classstruct.go

@@ -79,7 +79,7 @@ func (odbci *ODBCImporter) createclass(classname, mql string) (err error) {
 		return merrs.New("len(cis) != 1")
 	}
 	oci := cis[0]
-	aci := ci.Schema.NewClassinfo(oci)
+	aci := odbci.schema.NewClassinfo(oci)
 	// add graph tags
 	_, e = odbci.client.Query(aci.Addtagmql, aci.Classaliasname, aci.Classaliasname, []string{aci.Classaliasname}).Do()
 	if e != nil {
@@ -105,13 +105,13 @@ func (odbci *ODBCImporter) createedgetype(edgetypename, mql string) (err error)
 }
 
 func (odbci *ODBCImporter) getClassinfos() (err error) {
-	ci.Schema.Clear()
+	odbci.schema.Clear()
 	classinfos, e := odbci.client.ClassInfo("/m3cnet", true)
 	if e != nil {
 		return e
 	}
 	for _, oci := range classinfos {
-		aci := ci.Schema.NewClassinfo(oci)
+		aci := odbci.schema.NewClassinfo(oci)
 		cdi := &classdatainfo{ClassInfoHelper: aci}
 		classdatainfos.Set(aci.Classaliasname, cdi)
 		classdatainfos.Set(aci.Classfullname, cdi)
@@ -132,9 +132,9 @@ func (odbci *ODBCImporter) init(rebuild bool) (err error) {
 		if err != nil {
 			return
 		}
-		ci.Schema.Clear()
+		odbci.schema.Clear()
 	}
-	if ci.Schema.ClassCount() == 0 {
+	if odbci.schema.ClassCount() == 0 {
 		// 建类
 		err = odbci.ReviseClassStruct()
 		if err != nil {
@@ -146,10 +146,10 @@ func (odbci *ODBCImporter) init(rebuild bool) (err error) {
 
 func (odbci *ODBCImporter) rebuild() error {
 	if odbci.client != nil {
-		classaliasnames := ci.Schema.ClassAliasNames()
+		classaliasnames := odbci.schema.ClassAliasNames()
 		for i := len(classaliasnames) - 1; i >= 0; i-- {
 			classaliasname := classaliasnames[i]
-			ci := ci.Schema.GetClassInfo(classaliasname)
+			ci := odbci.schema.GetClassInfo(classaliasname)
 			if ci == nil {
 				continue
 			}
@@ -194,7 +194,7 @@ func (odbci *ODBCImporter) dropclass(classnames ...string) error {
 			}
 		}
 		logger.Info("drop class " + classname)
-		ci.Schema.RemoveClassInfo(classname)
+		odbci.schema.RemoveClassInfo(classname)
 	}
 	return nil
 }

+ 1 - 1
importer/importer.go

@@ -273,7 +273,7 @@ func (importer *Importer) importReader(filename string, buf io.Reader, linefrom,
 		err = merrs.NewError("cannot mapping to class, filename:" + filename)
 		return
 	}
-	br, e := reader.NewBlockReader(filename, classname, buf)
+	br, e := reader.NewBlockReader(filename, classname, buf, importer.odbcimporter.schema)
 	if e != nil {
 		return linecount, blockcount, retrycount, merrs.NewError(e, merrs.SSMaps{{"filename": filename}})
 	}

+ 3 - 0
importer/odbcimporter.go

@@ -12,6 +12,7 @@ import (
 	"git.wecise.com/wecise/cgimport/graph"
 	"git.wecise.com/wecise/cgimport/odbc"
 	"git.wecise.com/wecise/odb-go/odb"
+	"git.wecise.com/wecise/odb-go/schema"
 	"github.com/dgryski/go-farm"
 	"github.com/scylladb/go-set/strset"
 	"github.com/wecisecode/util/cast"
@@ -22,12 +23,14 @@ import (
 
 type ODBCImporter struct {
 	client odb.Client
+	schema *schema.Schema
 }
 
 func NewODBCImporter() *ODBCImporter {
 	odbci := &ODBCImporter{}
 	if odbc.DevPhase&(odbc.DP_CREATECLASS|odbc.DP_INSERTDATA) != 0 {
 		odbci.client = odbc.ODBC()
+		odbci.schema = schema.NewSchema()
 	}
 	return odbci
 }

+ 3 - 2
reader/blockreader.go

@@ -5,6 +5,7 @@ import (
 	"path/filepath"
 
 	"git.wecise.com/wecise/cgimport/odbc"
+	"git.wecise.com/wecise/odb-go/schema"
 	"github.com/wecisecode/util/merrs"
 )
 
@@ -15,11 +16,11 @@ type BlockReader interface {
 	ReadBlock(skiplines int) (block map[string]any, line string, linecount int, err error)
 }
 
-func NewBlockReader(filename string, classname string, reader io.Reader) (BlockReader, error) {
+func NewBlockReader(filename string, classname string, reader io.Reader, schema *schema.Schema) (BlockReader, error) {
 	fileext := filepath.Ext(filename)
 	switch fileext {
 	case ".csv":
-		return NewCSVBlockReader(filename, classname, reader), nil
+		return NewCSVBlockReader(filename, classname, reader, schema), nil
 	case ".txt":
 		return NewTXTBlockReader(filename, classname, reader), nil
 	}

+ 4 - 2
reader/csvreader.go

@@ -13,20 +13,22 @@ import (
 
 type CSVBlockReader struct {
 	*LineReader
+	schema    *schema.Schema
 	classname string
 	csvkeys   []string
 }
 
-func NewCSVBlockReader(filename string, classname string, reader io.Reader) *CSVBlockReader {
+func NewCSVBlockReader(filename string, classname string, reader io.Reader, schema *schema.Schema) *CSVBlockReader {
 	return &CSVBlockReader{
 		LineReader: NewLineReader(filename, reader),
+		schema:     schema,
 		classname:  classname,
 	}
 }
 
 func (br *CSVBlockReader) ReadBlock(skiplines int) (block map[string]any, line string, linecount int, err error) {
 	classname := br.classname
-	ci := schema.Schema.GetClassInfo(classname)
+	ci := br.schema.GetClassInfo(classname)
 	eof := false
 	for {
 		line, linecount, eof, err = br.ReadLine()