Skip to content
Snippets Groups Projects
Select Git revision
  • 248707e483c54f75cd33cc388aea171ad7960730
  • master default protected
  • v0.0.x
  • v0.0.32
  • v0.0.31
  • v0.0.30
  • v0.0.29
  • v0.0.28
  • v0.0.28-rc1
  • v0.0.27
  • v0.0.26
  • v0.0.25
  • v0.0.24
  • v0.0.23
  • v0.0.22
  • v0.0.21
  • v0.0.20
  • v0.0.19
  • v0.0.18
  • v0.0.17
  • v0.0.16
  • v0.0.15
  • v0.0.14
23 results

sql.go

Blame
  • sql.go 2.33 KiB
    // Copyright (C) 2013-2018 by Maxim Bublis <b@codemonkey.ru>
    //
    // Permission is hereby granted, free of charge, to any person obtaining
    // a copy of this software and associated documentation files (the
    // "Software"), to deal in the Software without restriction, including
    // without limitation the rights to use, copy, modify, merge, publish,
    // distribute, sublicense, and/or sell copies of the Software, and to
    // permit persons to whom the Software is furnished to do so, subject to
    // the following conditions:
    //
    // The above copyright notice and this permission notice shall be
    // included in all copies or substantial portions of the Software.
    //
    // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    
    package uuid
    
    import (
    	"database/sql/driver"
    	"fmt"
    )
    
    // Value implements the driver.Valuer interface.
    func (u UUID) Value() (driver.Value, error) {
    	return u.String(), nil
    }
    
    // Scan implements the sql.Scanner interface.
    // A 16-byte slice is handled by UnmarshalBinary, while
    // a longer byte slice or a string is handled by UnmarshalText.
    func (u *UUID) Scan(src interface{}) error {
    	switch src := src.(type) {
    	case []byte:
    		if len(src) == Size {
    			return u.UnmarshalBinary(src)
    		}
    		return u.UnmarshalText(src)
    
    	case string:
    		return u.UnmarshalText([]byte(src))
    	}
    
    	return fmt.Errorf("uuid: cannot convert %T to UUID", src)
    }
    
    // NullUUID can be used with the standard sql package to represent a
    // UUID value that can be NULL in the database
    type NullUUID struct {
    	UUID  UUID
    	Valid bool
    }
    
    // Value implements the driver.Valuer interface.
    func (u NullUUID) Value() (driver.Value, error) {
    	if !u.Valid {
    		return nil, nil
    	}
    	// Delegate to UUID Value function
    	return u.UUID.Value()
    }
    
    // Scan implements the sql.Scanner interface.
    func (u *NullUUID) Scan(src interface{}) error {
    	if src == nil {