mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-09-24 16:03:43 +08:00
Merge pull request #10 in YUNIONIO/onecloud from ~QIUJIAN/onecloud:feature/qj-dep-upgrade-pk-sqlchemy to release/2.1.0
* commit '6d8b27d5e6b5d3f77f160b0e33da7036c3edc800': 1. 更新sqlchemy & pkg;更新Gopkg.toml && Gopkg.lock 2. 增加make dep, make dep_install, make dep_clean三个Make
This commit is contained in:
Generated
+5
-3
@@ -279,6 +279,7 @@
|
||||
revision = "d2fe137411c230927e28dd82b1a3bcb618dbb28d"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
name = "github.com/yunionio/pkg"
|
||||
packages = [
|
||||
"gotypes",
|
||||
@@ -312,12 +313,13 @@
|
||||
"util/workqueue",
|
||||
"utils"
|
||||
]
|
||||
revision = "8c5eab6f0b758d3888fd9041419e38a5b1129725"
|
||||
revision = "607ffde100f37b77f1a90289c06ed6b103325ee8"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
name = "github.com/yunionio/sqlchemy"
|
||||
packages = ["."]
|
||||
revision = "a14641a90b9e5c72868b7a8358d62ea1d83eab53"
|
||||
revision = "b84d8e2b4313670f24cd50caa5bcc0c5288c16b5"
|
||||
|
||||
[[projects]]
|
||||
branch = "master"
|
||||
@@ -376,6 +378,6 @@
|
||||
[solve-meta]
|
||||
analyzer-name = "dep"
|
||||
analyzer-version = 1
|
||||
inputs-digest = "e90b051392bcbf484678dc55e4b1e44b57442f7b000c6d9956b2979560751ec1"
|
||||
inputs-digest = "a9c0d04bcafa27a0faa8d0725160249702ccf42913c108c3ac50e1191253f2f1"
|
||||
solver-name = "gps-cdcl"
|
||||
solver-version = 1
|
||||
|
||||
+2
-2
@@ -34,7 +34,7 @@
|
||||
name = "github.com/yunionio/jsonutils"
|
||||
|
||||
[[constraint]]
|
||||
revision = "a14641a90b9e5c72868b7a8358d62ea1d83eab53"
|
||||
branch = "master"
|
||||
name = "github.com/yunionio/sqlchemy"
|
||||
|
||||
[[constraint]]
|
||||
@@ -42,7 +42,7 @@
|
||||
name = "github.com/yunionio/log"
|
||||
|
||||
[[constraint]]
|
||||
revision = "8c5eab6f0b758d3888fd9041419e38a5b1129725"
|
||||
branch = "master"
|
||||
name = "github.com/yunionio/pkg"
|
||||
|
||||
[[constraint]]
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
REPO_PREFIX := github.com/yunionio/onecloud
|
||||
VENDOR_PATH := $(REPO_PREFIX)/vendor
|
||||
VERSION_PKG := $(VENDOR_PATH)/github.com/yunionio/pkg/util/version
|
||||
ROOT_DIR := $(shell pwd)
|
||||
ROOT_DIR := $(shell readlink -f `pwd`)
|
||||
BUILD_DIR := $(ROOT_DIR)/_output
|
||||
BIN_DIR := $(BUILD_DIR)/bin
|
||||
BUILD_SCRIPT := $(ROOT_DIR)/build/build.sh
|
||||
@@ -84,6 +84,16 @@ output_dir:
|
||||
@mkdir -p $(BUILD_DIR)
|
||||
|
||||
|
||||
dep:
|
||||
cd $(ROOT_DIR) && dep ensure -v
|
||||
|
||||
dep_clean:
|
||||
rm -fr $(GOPATH)/pkg/dep/sources/*
|
||||
|
||||
dep_install:
|
||||
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
|
||||
|
||||
|
||||
.PHONY: all build prepare_dir clean fmt rpm
|
||||
|
||||
|
||||
|
||||
+16
@@ -136,6 +136,22 @@ func FillEmbededStructValue(container reflect.Value, embed reflect.Value) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func SetStructFieldValue(structValue reflect.Value, fieldName string, val reflect.Value) bool {
|
||||
dataType := structValue.Type()
|
||||
for i := 0; i < dataType.NumField(); i += 1 {
|
||||
fieldType := dataType.Field(i)
|
||||
if gotypes.IsFieldExportable(fieldType.Name) {
|
||||
fName := GetStructFieldName(&fieldType)
|
||||
if fName == fieldName {
|
||||
fieldValue := structValue.Field(i)
|
||||
fieldValue.Set(val)
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func ExpandInterface(val interface{}) []interface{} {
|
||||
value := reflect.Indirect(reflect.ValueOf(val))
|
||||
if value.Kind() == reflect.Slice || value.Kind() == reflect.Array {
|
||||
|
||||
-18
@@ -1,21 +1,3 @@
|
||||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
// This file was autogenerated by set-gen. Do not edit it manually!
|
||||
|
||||
package secrules
|
||||
|
||||
import (
|
||||
|
||||
+22
-7
@@ -18,6 +18,7 @@ type IColumnSpec interface {
|
||||
Name() string
|
||||
ColType() string
|
||||
Default() string
|
||||
IsSupportDefault() bool
|
||||
IsNullable() bool
|
||||
IsPrimary() bool
|
||||
IsKeyIndex() bool
|
||||
@@ -67,6 +68,10 @@ func (c *SBaseColumn) Default() string {
|
||||
return c.defaultString
|
||||
}
|
||||
|
||||
func (c *SBaseColumn) IsSupportDefault() bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (c *SBaseColumn) IsNullable() bool {
|
||||
return c.isNullable
|
||||
}
|
||||
@@ -146,7 +151,7 @@ func definitionBuffer(c IColumnSpec) bytes.Buffer {
|
||||
}
|
||||
|
||||
def := c.Default()
|
||||
if len(def) > 0 {
|
||||
if len(def) > 0 && c.IsSupportDefault() {
|
||||
def = c.ConvertFromString(def)
|
||||
buf.WriteString(" DEFAULT ")
|
||||
if c.IsText() {
|
||||
@@ -475,6 +480,16 @@ type STextColumn struct {
|
||||
Charset string
|
||||
}
|
||||
|
||||
func (c *STextColumn) IsSupportDefault() bool {
|
||||
// https://stackoverflow.com/questions/3466872/why-cant-a-text-column-have-a-default-value-in-mysql
|
||||
// MySQL does not support default for TEXT/BLOB
|
||||
if c.sqlType == "VARCHAR" {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func (c *STextColumn) ColType() string {
|
||||
return fmt.Sprintf("%s CHARACTER SET '%s'", c.SBaseWidthColumn.ColType(), c.Charset)
|
||||
}
|
||||
@@ -588,16 +603,16 @@ func NewDateTimeColumn(name string, tagmap map[string]string) SDateTimeColumn {
|
||||
return dtc
|
||||
}
|
||||
|
||||
type CompondColumn struct {
|
||||
type CompoundColumn struct {
|
||||
STextColumn
|
||||
}
|
||||
|
||||
func (c *CompondColumn) DefinitionString() string {
|
||||
func (c *CompoundColumn) DefinitionString() string {
|
||||
buf := definitionBuffer(c)
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func (c *CompondColumn) IsZero(val interface{}) bool {
|
||||
func (c *CompoundColumn) IsZero(val interface{}) bool {
|
||||
if val == nil {
|
||||
return true
|
||||
}
|
||||
@@ -606,7 +621,7 @@ func (c *CompondColumn) IsZero(val interface{}) bool {
|
||||
return json.IsZero()
|
||||
}
|
||||
|
||||
func (c *CompondColumn) ConvertFromValue(val interface{}) interface{} {
|
||||
func (c *CompoundColumn) ConvertFromValue(val interface{}) interface{} {
|
||||
bVal, ok := val.(gotypes.ISerializable)
|
||||
if ok && bVal != nil {
|
||||
return bVal.String()
|
||||
@@ -615,8 +630,8 @@ func (c *CompondColumn) ConvertFromValue(val interface{}) interface{} {
|
||||
}
|
||||
}
|
||||
|
||||
func NewCompondColumn(name string, tagmap map[string]string) CompondColumn {
|
||||
dtc := CompondColumn{NewTextColumn(name, tagmap)}
|
||||
func NewCompoundColumn(name string, tagmap map[string]string) CompoundColumn {
|
||||
dtc := CompoundColumn{NewTextColumn(name, tagmap)}
|
||||
return dtc
|
||||
}
|
||||
|
||||
|
||||
+10
-10
@@ -12,11 +12,11 @@ type ICondition interface {
|
||||
Variables() []interface{}
|
||||
}
|
||||
|
||||
type SCompondConditions struct {
|
||||
type SCompoundConditions struct {
|
||||
conditions []ICondition
|
||||
}
|
||||
|
||||
func compondWhereClause(c *SCompondConditions, op string) string {
|
||||
func compoundWhereClause(c *SCompoundConditions, op string) string {
|
||||
var buf bytes.Buffer
|
||||
for _, cond := range c.conditions {
|
||||
if buf.Len() > 0 {
|
||||
@@ -31,11 +31,11 @@ func compondWhereClause(c *SCompondConditions, op string) string {
|
||||
return buf.String()
|
||||
}
|
||||
|
||||
func (c *SCompondConditions) WhereClause() string {
|
||||
func (c *SCompoundConditions) WhereClause() string {
|
||||
return ""
|
||||
}
|
||||
|
||||
func (c *SCompondConditions) Variables() []interface{} {
|
||||
func (c *SCompoundConditions) Variables() []interface{} {
|
||||
vars := make([]interface{}, 0)
|
||||
for _, cond := range c.conditions {
|
||||
nvars := cond.Variables()
|
||||
@@ -47,19 +47,19 @@ func (c *SCompondConditions) Variables() []interface{} {
|
||||
}
|
||||
|
||||
type SAndConditions struct {
|
||||
SCompondConditions
|
||||
SCompoundConditions
|
||||
}
|
||||
|
||||
func (c *SAndConditions) WhereClause() string {
|
||||
return compondWhereClause(&c.SCompondConditions, SQL_OP_AND)
|
||||
return compoundWhereClause(&c.SCompoundConditions, SQL_OP_AND)
|
||||
}
|
||||
|
||||
type SOrConditions struct {
|
||||
SCompondConditions
|
||||
SCompoundConditions
|
||||
}
|
||||
|
||||
func (c *SOrConditions) WhereClause() string {
|
||||
return compondWhereClause(&c.SCompondConditions, SQL_OP_OR)
|
||||
return compoundWhereClause(&c.SCompoundConditions, SQL_OP_OR)
|
||||
}
|
||||
|
||||
func AND(cond ...ICondition) ICondition {
|
||||
@@ -72,7 +72,7 @@ func AND(cond ...ICondition) ICondition {
|
||||
conds = append(conds, c)
|
||||
}
|
||||
}
|
||||
cc := SAndConditions{SCompondConditions{conditions: conds}}
|
||||
cc := SAndConditions{SCompoundConditions{conditions: conds}}
|
||||
return &cc
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@ func OR(cond ...ICondition) ICondition {
|
||||
conds = append(conds, c)
|
||||
}
|
||||
}
|
||||
cc := SOrConditions{SCompondConditions{conditions: conds}}
|
||||
cc := SOrConditions{SCompoundConditions{conditions: conds}}
|
||||
return &cc
|
||||
}
|
||||
|
||||
|
||||
+38
-1
@@ -6,7 +6,6 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/yunionio/log"
|
||||
"github.com/yunionio/pkg/gotypes"
|
||||
"github.com/yunionio/pkg/util/reflectutils"
|
||||
)
|
||||
|
||||
@@ -25,6 +24,7 @@ func (t *STableSpec) Insert(dt interface{}) error {
|
||||
names := make([]string, 0)
|
||||
format := make([]string, 0)
|
||||
values := make([]interface{}, 0)
|
||||
|
||||
fields := reflectutils.FetchStructFieldNameValueInterfaces(dataValue)
|
||||
for _, c := range t.columns {
|
||||
isAutoInc := false
|
||||
@@ -58,15 +58,23 @@ func (t *STableSpec) Insert(dt interface{}) error {
|
||||
} else {
|
||||
return fmt.Errorf("fail to insert for null primary key `%s`", k)
|
||||
}
|
||||
} else if ! c.IsSupportDefault() && len(c.Default()) > 0 && ov != nil && c.IsZero(ov) { // empty text value
|
||||
val := c.ConvertFromString(c.Default())
|
||||
values = append(values, val)
|
||||
names = append(names, fmt.Sprintf("`%s`", k))
|
||||
format = append(format, "?")
|
||||
}
|
||||
}
|
||||
|
||||
insertSql := fmt.Sprintf("INSERT INTO `%s` (%s) VALUES(%s)",
|
||||
t.name,
|
||||
strings.Join(names, ", "),
|
||||
strings.Join(format, ", "))
|
||||
|
||||
if DEBUG_SQLCHEMY {
|
||||
log.Debugf("%s values: %s", insertSql, values)
|
||||
}
|
||||
|
||||
results, err := _db.Exec(insertSql, values...)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -78,6 +86,8 @@ func (t *STableSpec) Insert(dt interface{}) error {
|
||||
if affectCnt != 1 {
|
||||
return fmt.Errorf("Insert affected cnt %d != 1", affectCnt)
|
||||
}
|
||||
|
||||
/*
|
||||
if len(autoIncField) > 0 {
|
||||
lastId, err := results.LastInsertId()
|
||||
if err == nil {
|
||||
@@ -87,5 +97,32 @@ func (t *STableSpec) Insert(dt interface{}) error {
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
// query the value, so default value can be feedback into the object
|
||||
// fields = reflectutils.FetchStructFieldNameValueInterfaces(dataValue)
|
||||
q := t.Query()
|
||||
for _, c := range t.columns {
|
||||
if c.IsPrimary() {
|
||||
nc, ok := c.(*SIntegerColumn)
|
||||
if ok && nc.IsAutoIncrement {
|
||||
lastId, err := results.LastInsertId()
|
||||
if err != nil {
|
||||
log.Errorf("Fail to fetch lastInsertId %s", err)
|
||||
return err
|
||||
} else {
|
||||
q = q.Equals(c.Name(), lastId)
|
||||
}
|
||||
} else {
|
||||
q = q.Equals(c.Name(), fields[c.Name()])
|
||||
}
|
||||
}
|
||||
}
|
||||
err = q.First(dt)
|
||||
if err != nil {
|
||||
log.Errorf("query after insert failed %s", err)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
+1
-1
@@ -86,7 +86,7 @@ func fieldToColumnSpec(field *reflect.StructField) IColumnSpec {
|
||||
return &col*/
|
||||
default:
|
||||
if gotypes.IsSerializable(field.Type) {
|
||||
col := NewCompondColumn(fieldname, tagmap)
|
||||
col := NewCompoundColumn(fieldname, tagmap)
|
||||
return &col
|
||||
} else {
|
||||
log.Fatalf("Unsupported type! %s", field.Type)
|
||||
|
||||
Reference in New Issue
Block a user