Skip to content

Commit

Permalink
Merge pull request #28 from webability-go/late-night
Browse files Browse the repository at this point in the history
patch v0.3.0
  • Loading branch information
metalwolf committed Nov 10, 2020
2 parents 6214b73 + b90b90d commit 8a0eae8
Show file tree
Hide file tree
Showing 5 changed files with 341 additions and 187 deletions.
276 changes: 149 additions & 127 deletions README.md
Expand Up @@ -21,133 +21,6 @@ TO DO:
- Synchro to upgrade DB tables and fields
- Oracle, Informix, Mongo, other DBs

Version Changes Control
=======================

v0.2.3 - 2020-06-03
-----------------------
- Upgrade to xcore/v2
- Modularization with go.mod

v0.2.2 - 2020-06-03
-----------------------
- Bug Corrected on Clonation of XRecord, it now consider XRecords (via interface Clone() XDatasetCollectionDef) as possible subset to clone too.

v0.2.1 - 2020-02-11
-----------------------
- Bug Corrected on String and GoString of XRecord and XRecords

v0.2.0 - 2020-02-10
-----------------------
- Modification to XRecord and XRecords to meet xcore v1.0.0 (.String and .GoString functions added, .Stringify function removed)

v0.1.3 - 2020-01-08
-----------------------
- Corrected an error in Insert, Update to use XRecordDef and XRecordsDef instead of XRecord and XRecords to be widely compatible with any entry parameter
- All functions will auto-identify if parameters are XRecord, *XRecord, XRecords or *XRecords

v0.1.2 - 2020-01-06
-----------------------
- Corrected an error in Select, Update, Delete to use int32, int64, float32 as values
- Added functions Min, Max, Avg

v0.1.1 - 2019-12-17
-----------------------
- Corrected an error in Upsert func that was inserting a 0 even if the key was present into the record

v0.1.0 - 2019-12-06
-----------------------
- Added new XTable Language functionality to know the default language of data into a table
- gofmt code formated before pushing a change on github

v0.0.15 - 2019-10-11
-----------------------
- Added record conversions for float values, from string, float32, int, etc
- Added Upsert function in table (update or insert if not exists)

v0.0.14 - 2019-06-25
-----------------------
- Added Clone on XRecord and XRecords to meet definition of xcore.XDatasetDef and xcore.XDatasetCollectionDef

v0.0.13 - 2019-06-19
-----------------------
- Error corrected on XTable.SelectAll. It was not working as expected
- Error corrected on XRecord.GetString. was returning "<nil>" instead of "" when the database field was null

v0.0.12 - 2019-03-06
-----------------------
- Support for Time functions added in the XRecord (instanciated from XDatasetDef)

v0.0.11 - 2019-03-01
-----------------------
- Many correction on Mysql support to make it work correctly
- Removed GetValue function from FieldDef
- "?" implemented for fields, conditions and having queries (in select, insert, update, delete statements)
- Values are directly passed to the query with "?", not a string representation of them

v0.0.10 - 2019-02-18
-----------------------
- Support for MySQL added
- Queries and conditions now uses "?" or "$x" for parameters
- Orderby implemented
- like and ilike implemented for text fields
- fields.GetValue function added when the code needs the raw string value (not like CreateValue where then value is created with ' for strings)

v0.0.9 - 2019-02-15
-----------------------
- New funcion for field: GetValue created
- Error corrected on conflict between CreateValue (with ' for strings) and GetValue (for use with $d to inject into queries)

v0.0.8 - 2019-02-14
-----------------------
- XCondition works with string queries (not yet with "?" parameters)
- Correction done on CreateValue for string fields (text, varchar, dates)

v0.0.7 - 2019-02-05
-----------------------
- Added XOrderBy, XOrder structures
- Added XGroupBy, XGroup structures
- Added XHaving structures
- Error corrected on xrecord.GetTime when the field comes NIL from database
- Added DEBUG main xdominion global variable. Set to true to print all the built queries

V0.0.6 - 2019-01-15
-----------------------
- Added conversion between types con Get* functions
- XTable.Count implemented

V0.0.5 - 2019-01-15
-----------------------
- XTable.Update implemented
- XTable.Delete implemented

V0.0.4 - 2019-01-06
-----------------------
- Modify XRecord to match XDataset last version (xcore 0.0.4)
- Modify XRecords to match XDatasetCollection last version (xcore 0.0.4)

V0.0.3 - 2018-12-19
-----------------------
- XField added: Float, Date, DateTime, Text, partially implemented
- XConditions and XCondition added, partially implemented
- XConstraints and XConstaint added, partially implemented
- XFieldSet added, partially implemented
- XOrderBy added, partially implemented

V0.0.2 - 2018-12-17
-----------------------
- Postgres implementation
- XTable created. select and insert partially done
- XField created, Integer and VarChar partially done
- XRecord created
- XRecords created
- XCursor created

V0.0.1 - 2018-11-14
-----------------------
- First commit, Eventually does not work yet
- Base object done


Manual:
=======================
Expand Down Expand Up @@ -290,6 +163,21 @@ Query by Where:
}
```

Transactions:

```
tx, err := base.BeginTransaction()
res1, err := tb.Insert(XRecord{"f1": 5, "f2": "Data line 1"}, tx)
res2, err := tb.Update(2, XRecord{"f1": 5, "f2": "Data line 1"}, tx)
res3, err := tb.Delete(3, tx)
// Note that the transaction is always passed as a parameter to the insert, update, delete operations
if err != nil {
tx.Rollback()
return err
}
tx.Commit()
```


2. Reference
------------------------
Expand All @@ -305,4 +193,138 @@ XRecord





Version Changes Control
=======================

v0.3.0 - 2020-11-10
-----------------------
- Implementation of transactions, new XTransaction object and functions to create a transaction, commit or rollback it.

v0.2.3 - 2020-06-03
-----------------------
- Upgrade to xcore/v2
- Modularization with go.mod

v0.2.2 - 2020-06-03
-----------------------
- Bug Corrected on Clonation of XRecord, it now consider XRecords (via interface Clone() XDatasetCollectionDef) as possible subset to clone too.

v0.2.1 - 2020-02-11
-----------------------
- Bug Corrected on String and GoString of XRecord and XRecords

v0.2.0 - 2020-02-10
-----------------------
- Modification to XRecord and XRecords to meet xcore v1.0.0 (.String and .GoString functions added, .Stringify function removed)

v0.1.3 - 2020-01-08
-----------------------
- Corrected an error in Insert, Update to use XRecordDef and XRecordsDef instead of XRecord and XRecords to be widely compatible with any entry parameter
- All functions will auto-identify if parameters are XRecord, *XRecord, XRecords or *XRecords

v0.1.2 - 2020-01-06
-----------------------
- Corrected an error in Select, Update, Delete to use int32, int64, float32 as values
- Added functions Min, Max, Avg

v0.1.1 - 2019-12-17
-----------------------
- Corrected an error in Upsert func that was inserting a 0 even if the key was present into the record

v0.1.0 - 2019-12-06
-----------------------
- Added new XTable Language functionality to know the default language of data into a table
- gofmt code formated before pushing a change on github

v0.0.15 - 2019-10-11
-----------------------
- Added record conversions for float values, from string, float32, int, etc
- Added Upsert function in table (update or insert if not exists)

v0.0.14 - 2019-06-25
-----------------------
- Added Clone on XRecord and XRecords to meet definition of xcore.XDatasetDef and xcore.XDatasetCollectionDef

v0.0.13 - 2019-06-19
-----------------------
- Error corrected on XTable.SelectAll. It was not working as expected
- Error corrected on XRecord.GetString. was returning "<nil>" instead of "" when the database field was null

v0.0.12 - 2019-03-06
-----------------------
- Support for Time functions added in the XRecord (instanciated from XDatasetDef)

v0.0.11 - 2019-03-01
-----------------------
- Many correction on Mysql support to make it work correctly
- Removed GetValue function from FieldDef
- "?" implemented for fields, conditions and having queries (in select, insert, update, delete statements)
- Values are directly passed to the query with "?", not a string representation of them

v0.0.10 - 2019-02-18
-----------------------
- Support for MySQL added
- Queries and conditions now uses "?" or "$x" for parameters
- Orderby implemented
- like and ilike implemented for text fields
- fields.GetValue function added when the code needs the raw string value (not like CreateValue where then value is created with ' for strings)

v0.0.9 - 2019-02-15
-----------------------
- New funcion for field: GetValue created
- Error corrected on conflict between CreateValue (with ' for strings) and GetValue (for use with $d to inject into queries)

v0.0.8 - 2019-02-14
-----------------------
- XCondition works with string queries (not yet with "?" parameters)
- Correction done on CreateValue for string fields (text, varchar, dates)

v0.0.7 - 2019-02-05
-----------------------
- Added XOrderBy, XOrder structures
- Added XGroupBy, XGroup structures
- Added XHaving structures
- Error corrected on xrecord.GetTime when the field comes NIL from database
- Added DEBUG main xdominion global variable. Set to true to print all the built queries

V0.0.6 - 2019-01-15
-----------------------
- Added conversion between types con Get* functions
- XTable.Count implemented

V0.0.5 - 2019-01-15
-----------------------
- XTable.Update implemented
- XTable.Delete implemented

V0.0.4 - 2019-01-06
-----------------------
- Modify XRecord to match XDataset last version (xcore 0.0.4)
- Modify XRecords to match XDatasetCollection last version (xcore 0.0.4)

V0.0.3 - 2018-12-19
-----------------------
- XField added: Float, Date, DateTime, Text, partially implemented
- XConditions and XCondition added, partially implemented
- XConstraints and XConstaint added, partially implemented
- XFieldSet added, partially implemented
- XOrderBy added, partially implemented

V0.0.2 - 2018-12-17
-----------------------
- Postgres implementation
- XTable created. select and insert partially done
- XField created, Integer and VarChar partially done
- XRecord created
- XRecords created
- XCursor created

V0.0.1 - 2018-11-14
-----------------------
- First commit, Eventually does not work yet
- Base object done


---
39 changes: 25 additions & 14 deletions xbase.go
@@ -1,6 +1,7 @@
package xdominion

import (
"context"
"database/sql"
"fmt"
"log"
Expand All @@ -17,7 +18,7 @@ As of 2018/12/01, only postgres and mysql are supported for now

const (
// Version of XDominion
VERSION = "0.2.3"
VERSION = "0.3.0"

// The distinct supported databases
DB_Postgres = "postgres"
Expand Down Expand Up @@ -90,25 +91,35 @@ func (b *XBase) Exec(query string, args ...interface{}) (*sql.Rows, error) {
}

func (b *XBase) Cursor() *Cursor {
return &Cursor{Base: b, Transactional: false}
return &Cursor{Base: b}
}

func (b *XBase) CursorTransactional() *Cursor {
c := b.Cursor()
c.BeginTransaction()
return c
type XTransaction struct {
DB *XBase
TX *sql.Tx
}

/*
func (b *XBase)BeginTransaction() {
b.DB.Begin()
func (b *XBase) BeginTransaction() (*XTransaction, error) {
ctx := context.Background()
tx, err := b.DB.BeginTx(ctx, &sql.TxOptions{Isolation: sql.LevelSerializable})
if err != nil {
return nil, err
}
return &XTransaction{
DB: b,
TX: tx,
}, nil
}

func (t *XTransaction) Exec(query string, args ...interface{}) (*sql.Rows, error) {
cursor, err := t.TX.Query(query, args...)
return cursor, err
}

func (b *XBase)Commit() {
b.DB.Commit()
func (t *XTransaction) Commit() error {
return t.TX.Commit()
}

func (b *XBase)Rollback() {
b.DB.Rollback()
func (t *XTransaction) Rollback() error {
return t.TX.Rollback()
}
*/

0 comments on commit 8a0eae8

Please sign in to comment.