parent
543acd4d7b
commit
a52c480e06
@ -1,5 +1,5 @@
|
|||||||
package go_library
|
package go_library
|
||||||
|
|
||||||
func Version() string {
|
func Version() string {
|
||||||
return "v2022-07-01"
|
return "v2022-07-03"
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
package datatypes
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql/driver"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"gorm.io/gorm/schema"
|
||||||
|
)
|
||||||
|
|
||||||
|
type URL url.URL
|
||||||
|
|
||||||
|
func (u URL) Value() (driver.Value, error) {
|
||||||
|
return u.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *URL) Scan(value interface{}) error {
|
||||||
|
var us string
|
||||||
|
switch v := value.(type) {
|
||||||
|
case []byte:
|
||||||
|
us = string(v)
|
||||||
|
case string:
|
||||||
|
us = v
|
||||||
|
default:
|
||||||
|
return errors.New(fmt.Sprint("Failed to parse URL:", value))
|
||||||
|
}
|
||||||
|
uu, err := url.Parse(us)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*u = URL(*uu)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (URL) GormDataType() string {
|
||||||
|
return "url"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (URL) GormDBDataType(db *gorm.DB, field *schema.Field) string {
|
||||||
|
return "TEXT"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *URL) String() string {
|
||||||
|
return (*url.URL)(u).String()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u URL) MarshalJSON() ([]byte, error) {
|
||||||
|
return json.Marshal(u.String())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *URL) UnmarshalJSON(data []byte) error {
|
||||||
|
// ignore null
|
||||||
|
if string(data) == "null" {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
uu, err := url.Parse(strings.Trim(string(data), `"'`))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*u = URL(*uu)
|
||||||
|
return nil
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package migrator
|
||||||
|
|
||||||
|
import "database/sql"
|
||||||
|
|
||||||
|
// Index implements gorm.Index interface
|
||||||
|
type Index struct {
|
||||||
|
TableName string
|
||||||
|
NameValue string
|
||||||
|
ColumnList []string
|
||||||
|
PrimaryKeyValue sql.NullBool
|
||||||
|
UniqueValue sql.NullBool
|
||||||
|
OptionValue string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Table return the table name of the index.
|
||||||
|
func (idx Index) Table() string {
|
||||||
|
return idx.TableName
|
||||||
|
}
|
||||||
|
|
||||||
|
// Name return the name of the index.
|
||||||
|
func (idx Index) Name() string {
|
||||||
|
return idx.NameValue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Columns return the columns fo the index
|
||||||
|
func (idx Index) Columns() []string {
|
||||||
|
return idx.ColumnList
|
||||||
|
}
|
||||||
|
|
||||||
|
// PrimaryKey returns the index is primary key or not.
|
||||||
|
func (idx Index) PrimaryKey() (isPrimaryKey bool, ok bool) {
|
||||||
|
return idx.PrimaryKeyValue.Bool, idx.PrimaryKeyValue.Valid
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unique returns whether the index is unique or not.
|
||||||
|
func (idx Index) Unique() (unique bool, ok bool) {
|
||||||
|
return idx.UniqueValue.Bool, idx.UniqueValue.Valid
|
||||||
|
}
|
||||||
|
|
||||||
|
// Option return the optional attribute fo the index
|
||||||
|
func (idx Index) Option() string {
|
||||||
|
return idx.OptionValue
|
||||||
|
}
|
Loading…
Reference in new issue