Skip to content

Commit

Permalink
prepare to release v0.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
Thanh Nguyen committed May 31, 2023
1 parent 92f0942 commit cb5c938
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 79 deletions.
2 changes: 1 addition & 1 deletion RELEASE-NOTES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# godynamo release notes

## 2023-05-xx - v0.2.0
## 2023-05-31 - v0.2.0

- Add transation support.

Expand Down
22 changes: 11 additions & 11 deletions godynamo.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (

const (
// Version of package godynamo.
Version = "0.1.0"
Version = "0.2.0"
)

var (
Expand Down Expand Up @@ -59,16 +59,16 @@ func ValuesToNamedValues(values []driver.Value) []driver.NamedValue {
return result
}

// NamedValuesToValues transforms a []driver.NamedValue to []driver.Value.
//
// @Available since v0.2.0
func NamedValuesToValues(values []driver.NamedValue) []driver.Value {
result := make([]driver.Value, len(values))
for i, v := range values {
result[i] = v.Value
}
return result
}
// // NamedValuesToValues transforms a []driver.NamedValue to []driver.Value.
// //
// // @Available since v0.2.0
// func NamedValuesToValues(values []driver.NamedValue) []driver.Value {
// result := make([]driver.Value, len(values))
// for i, v := range values {
// result[i] = v.Value
// }
// return result
// }

// ToAttributeValue marshals a Go value to AWS AttributeValue.
func ToAttributeValue(value interface{}) (types.AttributeValue, error) {
Expand Down
18 changes: 7 additions & 11 deletions stmt_document.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,11 @@ func (s *StmtSelect) Query(values []driver.Value) (driver.Rows, error) {
// @Available since v0.2.0
func (s *StmtSelect) QueryContext(ctx context.Context, values []driver.NamedValue) (driver.Rows, error) {
outputFn, err := s.conn.executeContext(ctx, s.Stmt, values)
if err == ErrInTx {
return &TxResultResultSet{wrap: ResultResultSet{err: err}, outputFn: outputFn}, nil
}
result := &ResultResultSet{stmtOutput: outputFn()}
if err == nil {
result.init()
}
// TODO Query is not supported yet in tx mode
// if err == ErrInTx {
// return &TxResultResultSet{wrap: ResultResultSet{err: err}, outputFn: outputFn}, nil
// }
result := (&ResultResultSet{stmtOutput: outputFn()}).init()
return result, err
}

Expand Down Expand Up @@ -139,9 +137,8 @@ func (s *StmtUpdate) Query(values []driver.Value) (driver.Rows, error) {
// @Available since v0.2.0
func (s *StmtUpdate) QueryContext(ctx context.Context, values []driver.NamedValue) (driver.Rows, error) {
outputFn, err := s.conn.executeContext(ctx, s.Stmt, values)
result := &ResultResultSet{stmtOutput: outputFn()}
result := (&ResultResultSet{stmtOutput: outputFn()}).init()
if err == nil || IsAwsError(err, "ConditionalCheckFailedException") {
result.init()
err = nil
}
return result, err
Expand Down Expand Up @@ -198,9 +195,8 @@ func (s *StmtDelete) Query(values []driver.Value) (driver.Rows, error) {
// @Available since v0.2.0
func (s *StmtDelete) QueryContext(ctx context.Context, values []driver.NamedValue) (driver.Rows, error) {
outputFn, err := s.conn.executeContext(ctx, s.Stmt, values)
result := &ResultResultSet{stmtOutput: outputFn()}
result := (&ResultResultSet{stmtOutput: outputFn()}).init()
if err == nil || IsAwsError(err, "ConditionalCheckFailedException") {
result.init()
err = nil
}
return result, err
Expand Down
2 changes: 1 addition & 1 deletion stmt_index.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ func (s *StmtDescribeLSI) Query(_ []driver.Value) (driver.Rows, error) {
// QueryContext implements driver.StmtQueryContext/QueryContext.
//
// @Available since v0.2.0
func (s *StmtDescribeLSI) QueryContext(ctx context.Context, _ []driver.Value) (driver.Rows, error) {
func (s *StmtDescribeLSI) QueryContext(ctx context.Context, _ []driver.NamedValue) (driver.Rows, error) {
input := &dynamodb.DescribeTableInput{
TableName: &s.tableName,
}
Expand Down
2 changes: 1 addition & 1 deletion stmt_table.go
Original file line number Diff line number Diff line change
Expand Up @@ -395,7 +395,7 @@ func (s *StmtAlterTable) Query(_ []driver.Value) (driver.Rows, error) {

// QueryContext implements driver.StmtQueryContext/QueryContext.
// This function is not implemented, use ExecContext instead.
func (s *StmtAlterTable) QueryContext(_ []driver.Value) (driver.Rows, error) {
func (s *StmtAlterTable) QueryContext(_ []driver.NamedValue) (driver.Rows, error) {
return nil, errors.New("this operation is not supported, please use ExecContext")
}

Expand Down
106 changes: 52 additions & 54 deletions tx.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
package godynamo

import (
"database/sql/driver"
"fmt"
"reflect"
)

// TxResultNoResultSet is transaction-aware version of ResultNoResultSet.
Expand Down Expand Up @@ -35,59 +33,59 @@ func (t *TxResultNoResultSet) RowsAffected() (int64, error) {
return t.affectedRows, nil
}

// TxResultResultSet is transaction-aware version of ResultResultSet.
// // TxResultResultSet is transaction-aware version of ResultResultSet.
// //
// // @Available since v0.2.0
// type TxResultResultSet struct {
// wrap ResultResultSet
// hasOutput bool
// outputFn executeStatementOutputWrapper
// }
//
// @Available since v0.2.0
type TxResultResultSet struct {
wrap ResultResultSet
hasOutput bool
outputFn executeStatementOutputWrapper
}

func (r *TxResultResultSet) checkOutput() {
if !r.hasOutput {
r.wrap.stmtOutput = r.outputFn()
fmt.Println("DEBUG", r.wrap.stmtOutput)
if r.wrap.stmtOutput != nil {
r.wrap.err = nil
r.hasOutput = true
r.wrap.init()
}
}
}

// Columns implements driver.Rows/Columns.
func (r *TxResultResultSet) Columns() []string {
r.checkOutput()
return r.wrap.Columns()
}

// ColumnTypeScanType implements driver.RowsColumnTypeScanType/ColumnTypeScanType
func (r *TxResultResultSet) ColumnTypeScanType(index int) reflect.Type {
r.checkOutput()
return r.wrap.ColumnTypeScanType(index)
}

// ColumnTypeDatabaseTypeName implements driver.RowsColumnTypeDatabaseTypeName/ColumnTypeDatabaseTypeName
func (r *TxResultResultSet) ColumnTypeDatabaseTypeName(index int) string {
r.checkOutput()
return r.wrap.ColumnTypeDatabaseTypeName(index)
}

// Close implements driver.Rows/Close.
func (r *TxResultResultSet) Close() error {
r.checkOutput()
if !r.hasOutput {
return ErrInTx
}
return nil
}

// Next implements driver.Rows/Next.
func (r *TxResultResultSet) Next(dest []driver.Value) error {
r.checkOutput()
return r.wrap.Next(dest)
}
// func (r *TxResultResultSet) checkOutput() {
// if !r.hasOutput {
// r.wrap.stmtOutput = r.outputFn()
// fmt.Println("DEBUG", r.wrap.stmtOutput)
// if r.wrap.stmtOutput != nil {
// r.wrap.err = nil
// r.hasOutput = true
// r.wrap.init()
// }
// }
// }
//
// // Columns implements driver.Rows/Columns.
// func (r *TxResultResultSet) Columns() []string {
// r.checkOutput()
// return r.wrap.Columns()
// }
//
// // ColumnTypeScanType implements driver.RowsColumnTypeScanType/ColumnTypeScanType
// func (r *TxResultResultSet) ColumnTypeScanType(index int) reflect.Type {
// r.checkOutput()
// return r.wrap.ColumnTypeScanType(index)
// }
//
// // ColumnTypeDatabaseTypeName implements driver.RowsColumnTypeDatabaseTypeName/ColumnTypeDatabaseTypeName
// func (r *TxResultResultSet) ColumnTypeDatabaseTypeName(index int) string {
// r.checkOutput()
// return r.wrap.ColumnTypeDatabaseTypeName(index)
// }
//
// // Close implements driver.Rows/Close.
// func (r *TxResultResultSet) Close() error {
// r.checkOutput()
// if !r.hasOutput {
// return ErrInTx
// }
// return nil
// }
//
// // Next implements driver.Rows/Next.
// func (r *TxResultResultSet) Next(dest []driver.Value) error {
// r.checkOutput()
// return r.wrap.Next(dest)
// }

/*----------------------------------------------------------------------*/

Expand Down

0 comments on commit cb5c938

Please sign in to comment.