datatable

package module
v0.0.0-...-794c519 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 14, 2020 License: Apache-2.0 Imports: 11 Imported by: 0

README

datatable.go

A memory table, similar to. Net DataTable Forked from https://github.com/linlexing/datatable.go Thank you to linlexing for such a great repo. Forked to add additional functions that are missing and to bring it to feature parity with the .net DataTable

http://godoc.org/github.com/cohenoshri/datatable.go

exemple for base:
table := NewDataTable("Table1")
table.AddColumn(NewStringColumn("column1"))
table.AddColumn(NewInt64Column("column2"))
table.SetPK("column1")
table.AddRow(map[string]interface{}{
	"column1":"row1",
	"column2":int64(1),
})
table.AddValues("row2",int64(2))
row1 := table.GetValues(0)
row2 := table.GetRow(1)
exemple for find:
table := NewDataTable("Table1")
table.AddColumn(NewStringColumn("column1"))
table.AddColumn(NewInt64Column("column2"))
table.SetPK("column1")
table.AddValues("row1",int64(1))
table.AddValues("row2",int64(2))
//only find the primary key's column
if foundIndex := table.Find("row1");foundIndex == -1{
	//not found
}else{
	foundRow := table.GetValue(foundIndex)
}
exemple for change:
table := NewDataTable("Table1")
table.AddColumn(NewStringColumn("column1"))
table.AddColumn(NewInt64Column("column2"))
table.SetPK("column1")
table.AddValues("row1",int64(1))
table.AddValues("row2",int64(2))
table.SetValues(0,"row3",int64(3))
table.DeleteRow(1)
if table.HasChange() {
	data := table.GetChange()
	/*apply to database,the result is TableChange struct:
	type ChangeRow struct {
		Data       []interface{}
		OriginData []interface{}
	}

	type TableChange struct {
		InsertRows []*ChangeRow
		UpdateRows []*ChangeRow
		DeleteRows []*ChangeRow
		RowCount   int
	}*/
}

Documentation

Overview

datatable project datatable.go

datatable document

Index

Examples

Constants

View Source
const (
	UNCHANGE byte = iota
	UPDATE
	INSERT
	DELETE
)

Variables

View Source
var (
	ColumnExistsError = errors.New("the column exists")
	RowNotFoundError  = errors.New("the row not found")
	KeyValueExists    = errors.New("the key value aleary exists")
	InterfaceType     = reflect.TypeOf((*interface{})(nil)).Elem()
	NilValue          = reflect.Zero(InterfaceType)
)

Functions

func ColumnNotFoundError

func ColumnNotFoundError(cname string) error

func NumberOfValueError

func NumberOfValueError(valNum, colNum int) error

func PrimaryKeyTypeError

func PrimaryKeyTypeError(t string) error

func ValueOf

func ValueOf(v interface{}) reflect.Value

Types

type ChangeRow

type ChangeRow struct {
	Data       []interface{}
	OriginData []interface{}
}

type ColumnType

type ColumnType string
const (
	String  ColumnType = "string"
	Int64   ColumnType = "int64"
	Float64 ColumnType = "float64"
	Bool    ColumnType = "bool"
	Time    ColumnType = "time"
	Bytea   ColumnType = "bytea"
)

type DataColumn

type DataColumn struct {
	DataType ColumnType
	Name     string
	MaxSize  int
	NotNull  bool
	// contains filtered or unexported fields
}

func BoolColumn

func BoolColumn(name string, notnull bool) *DataColumn

func ByteaColumn

func ByteaColumn(name string, notnull bool) *DataColumn

func Float64Column

func Float64Column(name string, notnull bool) *DataColumn

func Int64Column

func Int64Column(name string, notnull bool) *DataColumn

func NewBoolColumn

func NewBoolColumn(name string) *DataColumn

func NewByteaColumn

func NewByteaColumn(name string) *DataColumn

func NewDataColumn

func NewDataColumn(name string, dataType ColumnType, maxsize int, notnull bool) *DataColumn

func NewFloat64Column

func NewFloat64Column(name string) *DataColumn

func NewInt64Column

func NewInt64Column(name string) *DataColumn

func NewStringColumn

func NewStringColumn(name string) *DataColumn

func NewTimeColumn

func NewTimeColumn(name string) *DataColumn

func StringColumn

func StringColumn(name string, maxsize int, notnull bool) *DataColumn

func TimeColumn

func TimeColumn(name string, notnull bool) *DataColumn

func (*DataColumn) Clone

func (d *DataColumn) Clone() *DataColumn

func (*DataColumn) Decode

func (d *DataColumn) Decode(v interface{}) interface{}

func (*DataColumn) DecodeString

func (d *DataColumn) DecodeString(value string) (interface{}, error)

func (*DataColumn) Encode

func (d *DataColumn) Encode(v interface{}) interface{}

func (*DataColumn) EncodeString

func (d *DataColumn) EncodeString(value interface{}) string

Encodes strings, raw strings will be encoded with double quotes

func (*DataColumn) Index

func (d *DataColumn) Index() int

func (*DataColumn) ReflectType

func (d *DataColumn) ReflectType() reflect.Type

func (*DataColumn) StoreType

func (d *DataColumn) StoreType() reflect.Type

func (*DataColumn) Valid

func (d *DataColumn) Valid(value interface{}) error

func (*DataColumn) ZeroValue

func (d *DataColumn) ZeroValue() interface{}

type DataTable

type DataTable struct {
	TableName string

	Columns []*DataColumn
	PK      []string
	// contains filtered or unexported fields
}

func NewDataTable

func NewDataTable(name string) *DataTable

func (*DataTable) AcceptChange

func (d *DataTable) AcceptChange()

func (*DataTable) AddColumn

func (d *DataTable) AddColumn(c *DataColumn) *DataColumn

func (*DataTable) AddRow

func (d *DataTable) AddRow(r map[string]interface{}) error

func (*DataTable) AddValues

func (d *DataTable) AddValues(vs ...interface{}) error
Example
table := NewDataTable("table1")
table.AddColumn(NewStringColumn("column1"))
table.AddColumn(NewInt64Column("column2"))
table.AddColumn(NewStringColumn("column3"))
table.AddColumn(NewStringColumn("column4"))
table.AddColumn(NewStringColumn("column5"))
table.AddColumn(NewStringColumn("column6"))
table.AddColumn(NewStringColumn("column7"))
table.AddColumn(NewStringColumn("column8"))
table.SetPK("column2", "column1")
for i := 10; i >= 1; i-- {
	table.AddValues(fmt.Sprint("row", i), int64(i), "field3", "field4", "field5", "field6", "field7", "field8")
}
table.AddValues(fmt.Sprint("row", 200), int64(2), "field3", "field4", "field5", "field6", "field7", "field8")
err := table.SetValues(0, fmt.Sprint("row", 201), int64(6), "field3", "field4", "field5", "field6", "field7", "field8")
if err != nil {
	fmt.Print(err)
}
r := table.Row(3)
r["column1"] = "row101"
r["column2"] = int64(2)
if err := table.UpdateRow(3, r); err != nil {
	fmt.Print(err)
}
fmt.Print(table.AsTabText("column1", "column2"))
Output:

column1	column2
row101	2
row2	2
row200	2
row3	3
row5	5
row201	6
row6	6
row7	7
row8	8
row9	9
row10	10

func (*DataTable) AsCsv

func (d *DataTable) AsCsv(columns ...string) string

Exports as CSV, if no columns provided it will use all columns

func (*DataTable) AsJSONP

func (d *DataTable) AsJSONP(callback string, columns ...string) string

func (*DataTable) AsTabText

func (d *DataTable) AsTabText(columns ...string) string

func (*DataTable) Clear

func (d *DataTable) Clear()

func (*DataTable) Clone

func (d *DataTable) Clone() *DataTable

func (*DataTable) ColumnCount

func (d *DataTable) ColumnCount() int

func (*DataTable) ColumnIndex

func (d *DataTable) ColumnIndex(col string) int

func (*DataTable) ColumnNames

func (d *DataTable) ColumnNames() []string

func (*DataTable) DeleteAll

func (d *DataTable) DeleteAll()

func (*DataTable) DeleteRow

func (d *DataTable) DeleteRow(rowIndex int) error

func (*DataTable) Find

func (d *DataTable) Find(data ...interface{}) int

func (*DataTable) GetChange

func (d *DataTable) GetChange() *TableChange

func (*DataTable) GetColumnValues

func (d *DataTable) GetColumnValues(columnIndex int) []interface{}

func (*DataTable) GetOriginRow

func (d *DataTable) GetOriginRow(rowIndex int) map[string]interface{}

func (*DataTable) GetString

func (d *DataTable) GetString(rowIndex, colIndex int) string

func (*DataTable) GetValue

func (d *DataTable) GetValue(rowIndex, colIndex int) interface{}

func (*DataTable) GetValues

func (d *DataTable) GetValues(rowIndex int) []interface{}

func (*DataTable) HasChange

func (d *DataTable) HasChange() bool

func (*DataTable) HasPrimaryKey

func (d *DataTable) HasPrimaryKey() bool

func (*DataTable) IsPrimaryKey

func (d *DataTable) IsPrimaryKey(cname string) bool

func (*DataTable) KeyValues

func (d *DataTable) KeyValues(rowIndex int) []interface{}

func (*DataTable) Merge

func (d *DataTable) Merge(srcTable *DataTable) error

func (*DataTable) NewRow

func (d *DataTable) NewRow() map[string]interface{}

func (*DataTable) Row

func (d *DataTable) Row(rowIndex int) map[string]interface{}

func (*DataTable) RowCount

func (d *DataTable) RowCount() int

func (*DataTable) Rows

func (d *DataTable) Rows() []map[string]interface{}

func (*DataTable) Search

func (d *DataTable) Search(data ...interface{}) []map[string]interface{}

func (*DataTable) SetPK

func (d *DataTable) SetPK(names ...string)

the primary key data type must in int int64 float32 float64 string []byte time.Time and/or above type's slice

func (*DataTable) SetValues

func (d *DataTable) SetValues(rowIndex int, values ...interface{}) error

func (*DataTable) UpdateRow

func (d *DataTable) UpdateRow(rowIndex int, r map[string]interface{}) error

type TableChange

type TableChange struct {
	InsertRows []*ChangeRow
	UpdateRows []*ChangeRow
	DeleteRows []*ChangeRow
	RowCount   int
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL