Documentation ¶
Index ¶
- Constants
- Variables
- func Register(name string, driver Driver)
- func WithTransaction(tx Transactional, do func() error) (err error)
- type APSSetting
- type AccessModel
- type AppleAlert
- type Asset
- type AuthData
- type AuthInfo
- func (info *AuthInfo) GetProviderInfoData(principalID string) map[string]interface{}
- func (info *AuthInfo) HasAllRoles(roles []string) bool
- func (info *AuthInfo) HasAnyRoles(roles []string) bool
- func (info AuthInfo) IsSamePassword(password string) bool
- func (info *AuthInfo) RemoveProviderInfoData(principalID string)
- func (info *AuthInfo) SetPassword(password string)
- func (info *AuthInfo) SetProviderInfoData(principalID string, authData map[string]interface{})
- type Conn
- type CountFunc
- type DBHookFunc
- type Data
- type DataType
- type Database
- type DatabaseType
- type Device
- type DistanceFunc
- type Driver
- type DriverFunc
- type Expression
- func (expr Expression) Accept(visitor Visitor)
- func (expr Expression) IsEmpty() bool
- func (expr Expression) IsKeyPath() bool
- func (expr Expression) IsLiteralArray() bool
- func (expr Expression) IsLiteralMap() bool
- func (expr Expression) IsLiteralNull() bool
- func (expr Expression) IsLiteralString() bool
- func (expr Expression) KeyPathComponents() []string
- type ExpressionType
- type ExpressionVisitor
- type FieldACL
- type FieldACLEntry
- type FieldACLEntryList
- type FieldACLIterator
- type FieldAccessMode
- type FieldType
- type FieldUserRole
- type FieldUserRoleType
- type FullQueryVisitor
- type Func
- type Geometry
- type Index
- type KeyPathFunc
- type Location
- type MemoryRows
- type NotificationInfo
- type OAuthInfo
- type Operator
- type Predicate
- type PredicateVisitor
- type ProviderInfo
- type ProviderProfile
- type Query
- type QueryConfig
- type QueryVisitor
- type Record
- func (r *Record) Accessible(authinfo *AuthInfo, level RecordACLLevel) bool
- func (r *Record) Apply(src *Record)
- func (r *Record) Copy() Record
- func (r *Record) Get(key string) interface{}
- func (r *Record) MergedCopy(merge *Record) Record
- func (r *Record) Remove(key string)
- func (r *Record) Set(key string, i interface{})
- func (r *Record) UserKeys() []string
- type RecordACL
- type RecordACLEntry
- func NewRecordACLEntryDirect(userID string, level RecordACLLevel) RecordACLEntry
- func NewRecordACLEntryPublic(level RecordACLLevel) RecordACLEntry
- func NewRecordACLEntryRelation(relation string, level RecordACLLevel) RecordACLEntry
- func NewRecordACLEntryRole(role string, level RecordACLLevel) RecordACLEntry
- type RecordACLLevel
- type RecordEvent
- type RecordHookEvent
- type RecordID
- type RecordSchema
- type Reference
- type Rows
- type RowsIter
- type Sequence
- type Sort
- type SortOrder
- type SortVisitor
- type Subscription
- type TokenResponse
- type Transactional
- type TxDatabase
- type Unknown
- type UserRelationFunc
- type Visitor
Constants ¶
const ( Ascending SortOrder = iota Descending Asc = Ascending Desc = Descending )
A list of SordOrder, their meaning is self descriptive.
const WildcardRecordField = "*"
WildcardRecordField is a special record field that applies to all record fields
const WildcardRecordType = "*"
WildcardRecordType is a special record type that applies to all record types
Variables ¶
var EmptyRows = NewRows(emptyRowsIter(0))
EmptyRows is a convenient variable that acts as an empty Rows. Useful for skydb implementators and testing.
var ErrDatabaseIsReadOnly = errors.New("skydb: database is read only")
ErrDatabaseIsReadOnly is returned by skydb.Database if the requested operation modifies the database and the database is readonly.
var ErrDatabaseTxDidBegin = errors.New("skydb: a transaction has already begun")
var ErrDatabaseTxDidNotBegin = errors.New("skydb: a transaction has not begun")
var ErrDatabaseTxDone = errors.New("skydb: Database's transaction has already committed or rolled back")
var ErrDeviceNotFound = errors.New("skydb: Specific device not found")
ErrDeviceNotFound is returned by Conn.GetDevice, Conn.DeleteDevice, Conn.DeleteDevicesByToken and Conn.DeleteEmptyDevicesByTime, if the desired Device cannot be found in the current container
var ErrRecordNotFound = errors.New("skydb: Record not found for the specified key")
ErrRecordNotFound is returned from Get and Delete when Database cannot find the Record by the specified key
var ErrRoleUpdatesFailed = errors.New("skydb: Update of user roles failed")
var ErrSubscriptionNotFound = errors.New("skydb: Subscription ID not found")
ErrSubscriptionNotFound is returned from GetSubscription or DeleteSubscription when the specific subscription cannot be found.
var ErrUserDuplicated = errors.New("skydb: duplicated UserID or Username")
ErrUserDuplicated is returned by Conn.CreateAuth when the AuthInfo to be created has the same ID/username in the current container
var ErrUserNotFound = errors.New("skydb: AuthInfo ID not found")
ErrUserNotFound is returned by Conn.GetAuth, Conn.UpdateAuth and Conn.DeleteAuth when the AuthInfo's ID is not found in the current container
var PublicDatabaseIdentifier = "_public"
var UnionDatabaseIdentifier = "_union"
var ZeroTime = time.Time{}
ZeroTime represent a zero time.Time. It is used in DeleteDevicesByToken and DeleteEmptyDevicesByTime to signify a Delete without time constraint.
Functions ¶
func Register ¶
Register makes an Skygear Server database driver available with the given name.
Register panics if it is called with a nil driver or the same driver name is being registered twice.
func WithTransaction ¶ added in v1.1.0
func WithTransaction(tx Transactional, do func() error) (err error)
Types ¶
type APSSetting ¶
type APSSetting struct { Alert *AppleAlert `json:"alert,omitempty"` SoundName string `json:"sound,omitempty"` ShouldBadge bool `json:"should-badge,omitempty"` ShouldSendContentAvailable bool `json:"should-send-content-available,omitempty"` }
APSSetting describes how server should send a notification to a targeted device via Apple Push Service.
type AccessModel ¶
type AccessModel int
AccessModel indicates the type of access control model while db query.
const ( RoleBasedAccess AccessModel = iota + 1 RelationBasedAccess )
RoleBasedAccess is tranditional Role based Access Control RelationBasedAccess is Access Control determine by the user-user relation between creator and accessor
func GetAccessModel ¶
func GetAccessModel(accessString string) AccessModel
GetAccessModel convert the string config to internal const
func (AccessModel) String ¶
func (i AccessModel) String() string
type AppleAlert ¶
type AppleAlert struct { Body string `json:"body,omitempty"` LocalizationKey string `json:"loc-key,omitempty"` LocalizationArgs []string `json:"loc-args,omitempty"` LaunchImage string `json:"launch-image,omitempty"` ActionLocalizationKey string `json:"action-loc-key,omitempty"` }
AppleAlert describes how a remote notification behaves and shows itself when received.
It is a subset of attributes defined in Apple's "Local and Remote Notification Programming Guide". Please follow the following link for detailed description of the attributes.
https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/ApplePushService.html#//apple_ref/doc/uid/TP40008194-CH100-SW20
type AuthData ¶ added in v1.1.0
type AuthData struct {
// contains filtered or unexported fields
}
AuthData contains the unique authentication data of a user e.g.: {"username": "userA", "email": "userA@abc.com"}
func NewAuthData ¶ added in v1.1.0
func (AuthData) IsEmpty ¶ added in v1.1.0
IsEmpty would return true if
1. no entries or 2. all values are null
func (AuthData) MakeEqualPredicate ¶ added in v1.1.0
func (*AuthData) UpdateFromRecordData ¶ added in v1.1.0
type AuthInfo ¶
type AuthInfo struct { ID string `json:"_id"` HashedPassword []byte `json:"password,omitempty"` Roles []string `json:"roles,omitempty"` ProviderInfo ProviderInfo `json:"provider_info,omitempty"` // auth data for alternative methods TokenValidSince *time.Time `json:"token_valid_since,omitempty"` LastSeenAt *time.Time `json:"last_seen_at,omitempty"` }
AuthInfo contains a user's information for authentication purpose
func NewAnonymousAuthInfo ¶ added in v1.1.0
func NewAnonymousAuthInfo() AuthInfo
NewAnonymousAuthInfo returns an anonymous AuthInfo, which has no Password.
func NewAuthInfo ¶ added in v1.1.0
NewAuthInfo returns a new AuthInfo with specified password. An UUID4 ID will be generated by the system as unique identifier
func NewProviderInfoAuthInfo ¶ added in v1.1.0
NewProviderInfoAuthInfo returns an AuthInfo provided by a AuthProvider, which has no Password.
func (*AuthInfo) GetProviderInfoData ¶ added in v1.1.0
GetProviderInfoData gets the auth data for the specified principal.
func (*AuthInfo) HasAllRoles ¶ added in v1.1.0
HasAllRoles return true if authinfo has all roles supplied
func (*AuthInfo) HasAnyRoles ¶ added in v1.1.0
HasAnyRoles return true if authinfo belongs to one of the supplied roles
func (AuthInfo) IsSamePassword ¶ added in v1.1.0
IsSamePassword determines whether the specified password is the same password as where the HashedPassword is generated from
func (*AuthInfo) RemoveProviderInfoData ¶ added in v1.1.0
RemoveProviderInfoData remove the auth data for the specified principal.
func (*AuthInfo) SetPassword ¶ added in v1.1.0
SetPassword sets the HashedPassword with the password specified
func (*AuthInfo) SetProviderInfoData ¶ added in v1.1.0
SetProviderInfoData sets the auth data to the specified principal.
type Conn ¶
type Conn interface { // CreateAuth creates a new AuthInfo in the container // this Conn associated to. CreateAuth(authinfo *AuthInfo) error // GetAuth fetches the AuthInfo with supplied ID in the container and // fills in the supplied AuthInfo with the result. // // GetAuth returns ErrUserNotFound if no AuthInfo exists // for the supplied ID. GetAuth(id string, authinfo *AuthInfo) error // GetAuthByPrincipalID fetches the AuthInfo with supplied principal ID in the // container and fills in the supplied AuthInfo with the result. // // Principal ID is an ID of an authenticated principal with such // authentication provided by AuthProvider. // // GetAuthByPrincipalID returns ErrUserNotFound if no AuthInfo exists // for the supplied principal ID. GetAuthByPrincipalID(principalID string, authinfo *AuthInfo) error // UpdateAuth updates an existing AuthInfo matched by the ID field. // // UpdateAuth returns ErrUserNotFound if such AuthInfo does not // exist in the container. UpdateAuth(authinfo *AuthInfo) error // DeleteAuth removes AuthInfo with the supplied ID in the container. // // DeleteAuth returns ErrUserNotFound if such AuthInfo does not // exist in the container. DeleteAuth(id string) error // GetAdminRoles return the current admine roles GetAdminRoles() ([]string, error) // SetAdminRoles accepts array of role, the order will be SetAdminRoles(roles []string) error // GetDefaultRoles return the current default roles GetDefaultRoles() ([]string, error) // SetDefaultRoles accepts array of roles, the supplied roles will assigned // to newly created user CreateAuth SetDefaultRoles(roles []string) error // AssignRoles accepts array of roles and userID, the supplied roles will // be assigned to all passed in users AssignRoles(userIDs []string, roles []string) error // RevokeRoles accepts array of roles and userID, the supplied roles will // be revoked from all passed in users RevokeRoles(userIDs []string, roles []string) error // GetRoles returns roles of users specified by user IDs GetRoles(userIDs []string) (map[string][]string, error) // SetRecordAccess sets default record access of a specific type SetRecordAccess(recordType string, acl RecordACL) error // SetRecordDefaultAccess sets default record access of a specific type SetRecordDefaultAccess(recordType string, acl RecordACL) error // GetRecordAccess returns the record creation access of a specific type GetRecordAccess(recordType string) (RecordACL, error) // GetRecordDefaultAccess returns default record access of a specific type GetRecordDefaultAccess(recordType string) (RecordACL, error) // SetRecordFieldAccess replace field ACL setting SetRecordFieldAccess(acl FieldACL) (err error) // GetRecordFieldAccess retrieve field ACL setting GetRecordFieldAccess() (FieldACL, error) // GetAsset retrieves Asset information by its name GetAsset(name string, asset *Asset) error GetAssets(names []string) ([]Asset, error) // SaveAsset saves an Asset information into a container to // be referenced by records. SaveAsset(asset *Asset) error QueryRelation(user string, name string, direction string, config QueryConfig) []AuthInfo QueryRelationCount(user string, name string, direction string) (uint64, error) AddRelation(user string, name string, targetUser string) error RemoveRelation(user string, name string, targetUser string) error GetDevice(id string, device *Device) error // QueryDevicesByUser queries the Device database which are registered // by the specified user. QueryDevicesByUser(user string) ([]Device, error) QueryDevicesByUserAndTopic(user, topic string) ([]Device, error) SaveDevice(device *Device) error DeleteDevice(id string) error // DeleteDevicesByToken deletes device where its Token == token and // LastRegisteredAt < t. If t == ZeroTime, LastRegisteredAt is not considered. // // If such device does not exist, ErrDeviceNotFound is returned. DeleteDevicesByToken(token string, t time.Time) error // DeleteEmptyDevicesByTime deletes device where Token is empty and // LastRegisteredAt < t. If t == ZeroTime, LastRegisteredAt is not considered. // // If such device does not exist, ErrDeviceNotFound is returned. DeleteEmptyDevicesByTime(t time.Time) error PublicDB() Database PrivateDB(userKey string) Database UnionDB() Database // Subscribe registers the specified recordEventChan to receive // RecordEvent from the Conn implementation Subscribe(recordEventChan chan RecordEvent) error // EnsureAuthRecordKeysExist check if authRecordKeys exist in // user record schema EnsureAuthRecordKeysExist(authRecordKeys [][]string) error // EnsureAuthRecordKeysIndexesExist check if indexes of user record schema // match with authRecordKeys, so that: // // 1. indexes of authRecordKeys exist, if not and in dev mode, indexes with // special name would be created // // 2. indexes of old authRecordKeys with special name does not exist, if // found and in dev mode, they would be removed EnsureAuthRecordKeysIndexesMatch(authRecordKeys [][]string) error // CreateOAuthInfo creates a new OAuthInfo in the container // this Conn associated to. CreateOAuthInfo(oauthinfo *OAuthInfo) error // GetOAuthInfo fetches the OAuthInfo with supplied provider and principalID // in the container and fills in the supplied OAuthInfo with the result. // // GetOAuthInfo returns ErrUserNotFound if no OAuthInfo exists // for the supplied provider and principalID. GetOAuthInfo(provider string, principalID string, oauthinfo *OAuthInfo) error // GetOAuthInfoByProviderAndUserID fetches the OAuthInfo with supplied provider and userID // in the container and fills in the supplied OAuthInfo with the result. // // GetOAuthInfo returns ErrUserNotFound if no OAuthInfo exists // for the supplied provider and userID. GetOAuthInfoByProviderAndUserID(provider string, userID string, oauthinfo *OAuthInfo) error // // UpdateOAuthInfo updates an existing OAuthInfo matched by the // provider and principalID. // // UpdateOAuthInfo returns ErrUserNotFound if such OAuthInfo does not // exist in the container. UpdateOAuthInfo(oauthinfo *OAuthInfo) error // // DeleteOAuth removes OAuthInfo with the // supplied provider and principalID in the container for unlink provider. // // DeleteOAuth returns ErrUserNotFound if // such OAuthInfo does not exist in the container. DeleteOAuth(provider string, principalID string) error Close() error }
Conn encapsulates the interface of an Skygear Server connection to a container.
func Open ¶
func Open(ctx context.Context, implName string, appName string, accessString string, optionString string, migrate bool) (Conn, error)
Open returns an implementation of Conn to use w.r.t implName.
optionString is passed to the driver and is implementation specific. For example, in a SQL implementation it will be something like "sql://localhost/db0"
type CountFunc ¶
type CountFunc struct {
OverallRecords bool
}
CountFunc represents a function that count number of rows matching a query
type DBHookFunc ¶
type DBHookFunc func(Database, *Record, RecordHookEvent)
DBHookFunc specifies the interface of a database hook function
type Data ¶
type Data map[string]interface{}
A Data represents a key-value object used for storing ODRecord.
type DataType ¶
type DataType uint
DataType defines the type of data that can saved into an skydb database
const ( TypeString DataType = iota + 1 TypeNumber TypeBoolean TypeJSON TypeReference TypeLocation TypeDateTime TypeAsset TypeACL TypeInteger TypeSequence TypeGeometry TypeUnknown )
List of persistable data types in skydb
func (DataType) IsGeometryCompatibleType ¶ added in v0.23.0
func (DataType) IsNumberCompatibleType ¶
IsNumberCompatibleType returns true if the type is a numeric type
type Database ¶
type Database interface { // Conn returns the parent Conn of the Database Conn() Conn // ID returns the identifier of the Database. // We have public and private database. For public DB, the ID is // `_public`; for union DB, the ID is `_union`; // for private, the ID is the user identifier ID() string // DatabaseType returns the DatabaseType of the database. DatabaseType() DatabaseType // UserRecordType returns name of the user record type. UserRecordType() string // TableName returns the fully qualified name of a table. TableName(table string) string // IsReadOnly returns true if the database is read only IsReadOnly() bool // RemoteColumnTypes returns a typemap of a database table. RemoteColumnTypes(recordType string) (RecordSchema, error) // Get fetches the Record identified by the supplied key and // writes it onto the supplied Record. // // Get returns an ErrRecordNotFound if Record identified by // the supplied key does not exist in the Database. // It also returns error if the underlying implementation // failed to read the Record. Get(id RecordID, record *Record) error GetByIDs(ids []RecordID) (*Rows, error) // Save updates the supplied Record in the Database if Record with // the same key exists, else such Record is created. // // Save returns an error if the underlying implementation failed to // create / modify the Record. Save(record *Record) error // Delete removes the Record identified by the key in the Database. // // Delete returns an ErrRecordNotFound if the Record identified by // the supplied key does not exist in the Database. // It also returns an error if the underlying implementation // failed to remove the Record. Delete(id RecordID) error // Query executes the supplied query against the Database and returns // an Rows to iterate the results. Query(query *Query) (*Rows, error) // QueryCount executes the supplied query against the Database and returns // the number of records matching the query's predicate. QueryCount(query *Query) (uint64, error) // Extend extends the Database record schema such that a record // arrived subsequently with that schema can be saved // // Extend returns an bool indicating whether the schema is really extended. // Extend also returns an error if the specified schema conflicts with // existing schema in the Database Extend(recordType string, schema RecordSchema) (extended bool, err error) // RenameSchema renames a column of the Database record schema RenameSchema(recordType, oldColumnName, newColumnName string) error // DeleteSchema removes a column of the Database record schema DeleteSchema(recordType, columnName string) error // GetSchema returns the record schema of a record type GetSchema(recordType string) (RecordSchema, error) // FetchRecordTypes returns a list of all existing record type GetRecordSchemas() (map[string]RecordSchema, error) GetSubscription(key string, deviceID string, subscription *Subscription) error SaveSubscription(subscription *Subscription) error DeleteSubscription(key string, deviceID string) error GetSubscriptionsByDeviceID(deviceID string) []Subscription GetMatchingSubscriptions(record *Record) []Subscription GetIndexesByRecordType(recordType string) (indexes map[string]Index, err error) SaveIndex(recordType, indexName string, index Index) error DeleteIndex(recordType string, indexName string) error }
Database represents a collection of record (either public or private) in a container.
type DatabaseType ¶
type DatabaseType int
const ( // PublicDatabase is a database containing records shared among all // users. ACL settings may apply to restrict access. PublicDatabase DatabaseType = 0 + iota // PrivateDatabase is a database containing records visible to // an individual user. Each individual user has their own private // database. ACL settings do not apply. PrivateDatabase // UnionDatabase is a database containing all records in the PublicDatabase // and all PrivateDatabase. This database is only intended for admin // user and ACL settings do not apply. UnionDatabase )
type Device ¶
type Device struct { ID string Type string Token string AuthInfoID string Topic string LastRegisteredAt time.Time }
Device represents a device owned by a user and ready to receive notification.
type DistanceFunc ¶
DistanceFunc represents a function that calculates distance between a user supplied location and a Record's field
func (DistanceFunc) Args ¶
func (f DistanceFunc) Args() []interface{}
Args implements the Func interface
func (DistanceFunc) DataType ¶ added in v0.23.0
func (f DistanceFunc) DataType() DataType
func (DistanceFunc) ReferencedKeyPaths ¶ added in v1.1.0
func (f DistanceFunc) ReferencedKeyPaths() []string
ReferencedKeyPaths implements the KeyPathFunc interface.
type Driver ¶
type Driver interface {
Open(ctx context.Context, appName string, accessModel AccessModel, optionString string, migrate bool) (Conn, error)
}
Driver opens an connection to the underlying database.
type DriverFunc ¶
type DriverFunc func(ctx context.Context, appName string, accessModel AccessModel, optionString string, migrate bool) (Conn, error)
The DriverFunc type is an adapter such that an ordinary function can be used as a Driver.
type Expression ¶
type Expression struct { Type ExpressionType Value interface{} }
An Expression represents value to be compared against.
func (Expression) Accept ¶ added in v1.1.0
func (expr Expression) Accept(visitor Visitor)
Accept implements the Visitor pattern.
func (Expression) IsEmpty ¶
func (expr Expression) IsEmpty() bool
func (Expression) IsKeyPath ¶
func (expr Expression) IsKeyPath() bool
func (Expression) IsLiteralArray ¶
func (expr Expression) IsLiteralArray() bool
func (Expression) IsLiteralMap ¶
func (expr Expression) IsLiteralMap() bool
func (Expression) IsLiteralNull ¶
func (expr Expression) IsLiteralNull() bool
func (Expression) IsLiteralString ¶
func (expr Expression) IsLiteralString() bool
func (Expression) KeyPathComponents ¶
func (expr Expression) KeyPathComponents() []string
type ExpressionType ¶
type ExpressionType int
ExpressionType is the type of an Expression.
const ( Literal ExpressionType = iota + 1 KeyPath Function )
A list of ExpressionTypes.
type ExpressionVisitor ¶ added in v1.1.0
type ExpressionVisitor interface { VisitExpression(Expression) EndVisitExpression(Expression) }
ExpressionVisitor is an interface that implements the Visitor pattern for the Expression struct.
type FieldACL ¶ added in v1.1.0
type FieldACL struct {
// contains filtered or unexported fields
}
FieldACL contains all field ACL rules for all record types. This struct provides functions for evaluating whether access can be granted for a request.
func NewFieldACL ¶ added in v1.1.0
func NewFieldACL(list FieldACLEntryList) FieldACL
NewFieldACL returns a struct of FieldACL with a list of field ACL entries.
func (FieldACL) Accessible ¶ added in v1.1.0
func (acl FieldACL) Accessible( recordType string, field string, mode FieldAccessMode, authInfo *AuthInfo, record *Record, ) bool
Accessible returns true when the access mode is allowed access
The accessibility of a field access request is determined by the first matching rule. If no matching rule is found, the default rule is to grant access.
func (FieldACL) AllEntries ¶ added in v1.1.0
func (acl FieldACL) AllEntries() FieldACLEntryList
AllEntries return all ACL entries in FieldACL.
type FieldACLEntry ¶ added in v1.1.0
type FieldACLEntry struct { RecordType string `json:"record_type"` RecordField string `json:"record_field"` UserRole FieldUserRole `json:"user_role"` Writable bool `json:"writable"` Readable bool `json:"readable"` Comparable bool `json:"comparable"` Discoverable bool `json:"discoverable"` }
FieldACLEntry contains a single field ACL entry
func (FieldACLEntry) Accessible ¶ added in v1.1.0
func (entry FieldACLEntry) Accessible(mode FieldAccessMode) bool
Accessible returns true when the entry grants access for the specified access mode. This function does not consider whether the entry matches the user role or record type.
func (FieldACLEntry) Compare ¶ added in v1.1.0
func (entry FieldACLEntry) Compare(other FieldACLEntry) int
Compare the order for evaluation with the other entry.
This function returns negative when the specified entry have a lower priority.
type FieldACLEntryList ¶ added in v1.1.0
type FieldACLEntryList []FieldACLEntry
FieldACLEntryList contains a list of field ACL entries
func (FieldACLEntryList) Len ¶ added in v1.1.0
func (list FieldACLEntryList) Len() int
func (FieldACLEntryList) Less ¶ added in v1.1.0
func (list FieldACLEntryList) Less(i, j int) bool
func (FieldACLEntryList) Swap ¶ added in v1.1.0
func (list FieldACLEntryList) Swap(i, j int)
type FieldACLIterator ¶ added in v1.1.0
type FieldACLIterator struct {
// contains filtered or unexported fields
}
FieldACLIterator iterates FieldACL to find a list of rules that apply to the specified record type and record field.
The iterator does not consider the access mode, the AuthInfo and the Record of individual access. So the result is always the same as long as the FieldACL setting is unchanged. The list of rules can then be considered one by one, which is specific to each individual request.
func NewFieldACLIterator ¶ added in v1.1.0
func NewFieldACLIterator(acl FieldACL, recordType, recordField string) *FieldACLIterator
NewFieldACLIterator creates a new iterator.
func (*FieldACLIterator) Next ¶ added in v1.1.0
func (i *FieldACLIterator) Next() *FieldACLEntry
Next returns the next FieldACLEntry. If there is no more entries to return, this function will return nil.
type FieldAccessMode ¶ added in v1.1.0
type FieldAccessMode int
FieldAccessMode is the intended access operation to be granted access
const ( // ReadFieldAccessMode means the access mode is for reading ReadFieldAccessMode FieldAccessMode = iota + 1 // WriteFieldAccessMode means the access mode is for writing WriteFieldAccessMode // DiscoverOrCompareFieldAccessMode means the access mode is for discovery // or compare DiscoverOrCompareFieldAccessMode // CompareFieldAccessMode means the access mode is for query CompareFieldAccessMode )
type FieldType ¶
type FieldType struct { Type DataType ReferenceType string // used only by TypeReference Expression Expression // used by Computed Keys UnderlyingType string // indicates the underlying (pq) type }
FieldType represents the kind of data living within a field of a RecordSchema.
func DeriveFieldType ¶ added in v0.23.0
func SimpleNameToFieldType ¶
func TraverseColumnTypes ¶ added in v1.1.0
TraverseColumnTypes traverse the field type of a key path from database table.
func (FieldType) DefinitionCompatibleTo ¶ added in v0.23.0
DefinitionCompatibleTo returns if a value of the specifed FieldType can be saved to a database column of this FieldType.
When a FieldType is compatible with another FieldType, it also means it is possible to cast value of a type to another type. Whether the cast is successful is subject to the actual value, whether it will lose number precision for example.
This function is not associative. In other words, `a.fn(b) != b.fn(a)`.
func (FieldType) ToSimpleName ¶
type FieldUserRole ¶ added in v1.1.0
type FieldUserRole struct { // Type contains the type of the user role. Type FieldUserRoleType // Data is information specific to the type of user role. Data string }
FieldUserRole contains field user role information and checks whether a user matches the user role.
func NewFieldUserRole ¶ added in v1.1.0
func NewFieldUserRole(roleString string) FieldUserRole
NewFieldUserRole returns a FieldUserRole struct from the user role specification.
func ParseFieldUserRole ¶ added in v1.1.0
func ParseFieldUserRole(roleString string) (FieldUserRole, error)
ParseFieldUserRole parses a user role string to a FieldUserRole.
func (FieldUserRole) Compare ¶ added in v1.1.0
func (r FieldUserRole) Compare(other FieldUserRole) int
Compare compares two FieldUserRole according to the order of evaluation.
func (*FieldUserRole) MarshalJSON ¶ added in v1.1.0
func (r *FieldUserRole) MarshalJSON() ([]byte, error)
MarshalJSON implements json.Marshaler
func (FieldUserRole) Match ¶ added in v1.1.0
func (r FieldUserRole) Match(authinfo *AuthInfo, record *Record) bool
Match returns true if the specifid AuthInfo and Record matches the user role.
If the specified user role type is record dependent, this function returns false if Record is nil.
func (FieldUserRole) String ¶ added in v1.1.0
func (r FieldUserRole) String() string
String returns the user role specification in string representation.
func (*FieldUserRole) UnmarshalJSON ¶ added in v1.1.0
func (r *FieldUserRole) UnmarshalJSON(data []byte) (err error)
UnmarshalJSON implements json.Unmarshaler
type FieldUserRoleType ¶ added in v1.1.0
type FieldUserRoleType string
FieldUserRoleType denotes the type of field user role, which specify who can access certain fields.
const ( // OwnerFieldUserRoleType means field is accessible by the record owner. OwnerFieldUserRoleType FieldUserRoleType = "_owner" // SpecificUserFieldUserRoleType means field is accessible by a specific user. SpecificUserFieldUserRoleType FieldUserRoleType = "_user_id" // DynamicUserFieldUserRoleType means field is accessible by user contained in another field. DynamicUserFieldUserRoleType FieldUserRoleType = "_field" // DefinedRoleFieldUserRoleType means field is accessible by a users of specific role. DefinedRoleFieldUserRoleType FieldUserRoleType = "_role" // AnyUserFieldUserRoleType means field is accessible by any authenticated user. AnyUserFieldUserRoleType FieldUserRoleType = "_any_user" // PublicFieldUserRoleType means field is accessible by public. PublicFieldUserRoleType FieldUserRoleType = "_public" )
func (FieldUserRoleType) Compare ¶ added in v1.1.0
func (userRoleType FieldUserRoleType) Compare(other FieldUserRoleType) int
Compare compares two user role type in the order of evaluation.
func (FieldUserRoleType) RecordDependent ¶ added in v1.1.0
func (userRoleType FieldUserRoleType) RecordDependent() bool
RecordDependent returns true if this user role type requires record data when evaluating accessibility.
type FullQueryVisitor ¶ added in v1.1.0
type FullQueryVisitor interface { QueryVisitor PredicateVisitor SortVisitor ExpressionVisitor }
FullQueryVisitor is a marker interface for all query-related visitors
type Func ¶
type Func interface { Args() []interface{} DataType() DataType }
Func is a marker interface to denote a type being a function in skydb.
skydb's function receives zero or more arguments and returns a DataType as a result. Result data type is currently omitted in this interface since skygear doesn't use it internally yet. In the future it can be utilized to provide more extensive type checking at handler level.
type Geometry ¶ added in v0.23.0
type Geometry map[string]interface{}
Geometry represent a geometry in GeoJSON.
type Index ¶ added in v1.1.0
type Index struct {
Fields []string
}
Index indicates the value of fields within a record type cannot be duplicated
type KeyPathFunc ¶ added in v1.1.0
type KeyPathFunc interface { // Returns a list of key paths that is referenced by this function. ReferencedKeyPaths() []string }
KeyPathFunc is a marker interface to denote a func that references certain key paths.
type Location ¶
type Location [2]float64
Location represent a point of geometry.
It being an array of two floats is intended to provide no-copy conversion between paulmach/go.geo.Point.
type MemoryRows ¶
MemoryRows is a native implementation of RowIter. Can be used in test not support cursor.
func NewMemoryRows ¶
func NewMemoryRows(records []Record) *MemoryRows
func (*MemoryRows) Close ¶
func (rs *MemoryRows) Close() error
func (*MemoryRows) Next ¶
func (rs *MemoryRows) Next(record *Record) error
func (*MemoryRows) OverallRecordCount ¶
func (rs *MemoryRows) OverallRecordCount() *uint64
type NotificationInfo ¶
type NotificationInfo struct {
APS APSSetting `json:"aps,omitempty"`
}
NotificationInfo describes how server should send a notification to a target devices via a push service. Currently only APS is supported.
type OAuthInfo ¶ added in v1.2.0
type OAuthInfo struct { UserID string `json:"user_id"` Provider string `json:"provider"` PrincipalID string `json:"principal_id"` TokenResponse TokenResponse `json:"token_response,omitempty"` ProviderProfile ProviderProfile `json:"profile,omitempty"` CreatedAt *time.Time `json:"created_at,omitempty"` UpdatedAt *time.Time `json:"updated_at,omitempty"` }
OAuthInfo contains 3rd provider information for authentication
UserID is AuthInfo ID which incidcate user who link with the given oauth data
type Operator ¶
type Operator int
Operator denotes how the result of a predicate is determined from its subpredicates or subexpressions.
const ( And Operator = iota + 1 Or Not Equal GreaterThan LessThan GreaterThanOrEqual LessThanOrEqual NotEqual Like ILike In Functional )
A list of Operator.
func (Operator) IsBinary ¶
IsBinary checks whether the Operator determines the result of a predicate by comparing two subexpressions.
func (Operator) IsCommutative ¶
IsCommutative checks whether expressions on both side of the Operator can be swapped.
func (Operator) IsCompound ¶
IsCompound checks whether the Operator is a compound operator, meaning the operator combine the results of other subpredicates.
type Predicate ¶
type Predicate struct { Operator Operator Children []interface{} }
Predicate is a representation of used in query for filtering records.
func (Predicate) GetExpressions ¶
func (p Predicate) GetExpressions() (ps []Expression)
GetExpressions returns Predicate.Children as []Expression.
This method is only valid when Operator is binary operator. Caller is responsible to check for this preconditions. Otherwise the method will panic.
func (Predicate) GetSubPredicates ¶
GetSubPredicates returns Predicate.Children as []Predicate.
This method is only valid when Operator is either And, Or and Not. Caller is responsible to check for this preconditions. Otherwise the method will panic.
type PredicateVisitor ¶ added in v1.1.0
PredicateVisitor is an interface that implements the Visitor pattern for the Predicate struct.
type ProviderInfo ¶ added in v1.1.0
ProviderInfo represents the dictionary of authenticated principal ID => authData.
For example, a AuthInfo connected with a Facebook account might look like this:
{ "com.facebook:46709394": { "accessToken": "someAccessToken", "expiredAt": "2015-02-26T20:05:48", "facebookID": "46709394" } }
It is assumed that the Facebook AuthProvider has "com.facebook" as provider name and "46709394" as the authenticated Facebook account ID.
type ProviderProfile ¶ added in v1.2.0
type ProviderProfile map[string]interface{}
type Query ¶
type Query struct { Type string Predicate Predicate Sorts []Sort ComputedKeys map[string]Expression DesiredKeys []string GetCount bool Limit *uint64 Offset uint64 // The following fields are generated from the server side, rather // than supplied from the client side. ViewAsUser *AuthInfo BypassAccessControl bool }
Query specifies the type, predicate and sorting order of Database query.
type QueryConfig ¶
QueryConfig provides optional parameters for queries. result is unlimited if Limit=0
type QueryVisitor ¶ added in v1.1.0
QueryVisitor is an interface that implements the Visitor pattern for the Query struct.
type Record ¶
type Record struct { ID RecordID DatabaseID string `json:"-"` OwnerID string CreatedAt time.Time CreatorID string UpdatedAt time.Time UpdaterID string ACL RecordACL Data Data Transient Data `json:"-"` }
Record is the primary entity of storage in Skygear.
func (*Record) Accessible ¶
func (r *Record) Accessible(authinfo *AuthInfo, level RecordACLLevel) bool
func (*Record) Apply ¶ added in v1.1.0
Apply modifies the content of the record with the specified record.
func (*Record) Get ¶
Get returns the value specified by key. If no value is associated with the specified key, it returns nil.
Get also supports getting reserved fields starting with "_". If such reserved field does not exists, it returns nil.
func (*Record) MergedCopy ¶ added in v1.1.0
MergedCopy is similar to copy but the copy contains data dictionary which is creating by copying the original and apply the specified dictionary.
type RecordACL ¶
type RecordACL []RecordACLEntry
RecordACL is a list of ACL entries defining access control for a record
func NewRecordACL ¶
func NewRecordACL(entries []RecordACLEntry) RecordACL
NewRecordACL returns a new RecordACL
func (RecordACL) Accessible ¶
func (acl RecordACL) Accessible(authinfo *AuthInfo, level RecordACLLevel) bool
Accessible checks whether provided user info has certain access level
type RecordACLEntry ¶
type RecordACLEntry struct { Relation string `json:"relation,omitempty"` Role string `json:"role,omitempty"` Level RecordACLLevel `json:"level"` UserID string `json:"user_id,omitempty"` Public bool `json:"public,omitempty"` }
RecordACLEntry grants access to a record by relation or by user_id
func NewRecordACLEntryDirect ¶
func NewRecordACLEntryDirect(userID string, level RecordACLLevel) RecordACLEntry
NewRecordACLEntryDirect returns an ACE for a specific user
func NewRecordACLEntryPublic ¶
func NewRecordACLEntryPublic(level RecordACLLevel) RecordACLEntry
NewRecordACLEntryPublic return an ACE on public access
func NewRecordACLEntryRelation ¶
func NewRecordACLEntryRelation(relation string, level RecordACLLevel) RecordACLEntry
NewRecordACLEntryRelation returns an ACE on relation
func NewRecordACLEntryRole ¶
func NewRecordACLEntryRole(role string, level RecordACLLevel) RecordACLEntry
NewRecordACLEntryRole return an ACE on role
func (*RecordACLEntry) Accessible ¶
func (ace *RecordACLEntry) Accessible(authinfo *AuthInfo, level RecordACLLevel) bool
func (*RecordACLEntry) AccessibleLevel ¶
func (ace *RecordACLEntry) AccessibleLevel(level RecordACLLevel) bool
type RecordACLLevel ¶ added in v1.1.0
type RecordACLLevel string
RecordACLLevel represent the operation a user granted on a resource
const ( ReadLevel RecordACLLevel = "read" WriteLevel RecordACLLevel = "write" CreateLevel RecordACLLevel = "create" )
ReadLevel and WriteLevel is self-explanatory
type RecordEvent ¶
type RecordEvent struct { Record *Record Event RecordHookEvent }
RecordEvent describes a change event on Record which is either Created, Updated or Deleted.
For RecordCreated or RecordUpdated event, Record is the newly created / updated Record. For RecordDeleted, Record is the Record being deleted.
type RecordHookEvent ¶
type RecordHookEvent int
RecordHookEvent indicates the type of record event that triggered the hook
const ( RecordCreated RecordHookEvent = iota + 1 RecordUpdated RecordDeleted )
See the definition of RecordHookEvent
type RecordID ¶
RecordID identifies an unique record in a Database
func NewEmptyRecordID ¶
func NewEmptyRecordID() RecordID
func NewRecordID ¶
NewRecordID returns a new RecordID
func (RecordID) MarshalText ¶
MarshalText implements the encoding.TextUnmarshaler interface.
func (*RecordID) UnmarshalText ¶
UnmarshalText implements the encoding.TextMarshaler interface.
type RecordSchema ¶
RecordSchema is a mapping of record key to its value's data type or reference
func (RecordSchema) DefinitionCompatibleTo ¶ added in v0.23.0
func (schema RecordSchema) DefinitionCompatibleTo(other RecordSchema) bool
DefinitionCompatibleTo returns if a record having the specified RecordSchema
can be saved to a database table of this RecordSchema.
This function is not associative. In other words, `a.fn(b) != b.fn(a)`.
func (RecordSchema) HasField ¶ added in v1.1.0
func (schema RecordSchema) HasField(field string) bool
func (RecordSchema) HasFields ¶ added in v1.1.0
func (schema RecordSchema) HasFields(fields []string) bool
type Reference ¶
type Reference struct {
ID RecordID
}
func NewEmptyReference ¶
func NewEmptyReference() Reference
NewEmptyReference returns a reference that is empty
func NewReference ¶
type Rows ¶
type Rows struct {
// contains filtered or unexported fields
}
Rows implements a scanner-like interface for easy iteration on a result set returned from a query
func NewRows ¶
NewRows creates a new Rows.
Driver implementators are expected to call this method with their implementation of RowsIter to return a Rows from Database.Query.
func (*Rows) Err ¶
Err returns the last error encountered during Scan.
NOTE: It is not an error if the underlying result set is exhausted.
func (*Rows) OverallRecordCount ¶
OverallRecordCount returns the number of matching records in the database if this resultset contains any rows.
type RowsIter ¶
type RowsIter interface { // Close closes the rows iterator Close() error // Next populates the next Record in the current rows iterator into // the provided record. // // Next should return io.EOF when there are no more rows Next(record *Record) error OverallRecordCount() *uint64 }
RowsIter is an iterator on results returned by execution of a query.
type Sequence ¶
type Sequence struct{}
Sequence is a bogus data type for creating a sequence field via JIT schema migration
type Sort ¶
type Sort struct { Expression Expression Order SortOrder }
Sort specifies the order of a collection of Records returned from a Query.
Record order can be sorted w.r.t. a record field or a value returned from a predefined function.
type SortOrder ¶
type SortOrder int
SortOrder denotes an the order of Records returned from a Query.
type SortVisitor ¶ added in v1.1.0
SortVisitor is an interface that implements the Visitor pattern for the Sort struct.
type Subscription ¶
type Subscription struct { ID string `json:"id"` Type string `json:"type"` DeviceID string `json:"device_id"` NotificationInfo *NotificationInfo `json:"notification_info,omitempty"` Query Query `json:"query"` }
Subscription represents a device's subscription of notification triggered by changes of results from a query.
type TokenResponse ¶ added in v1.2.0
type TokenResponse map[string]interface{}
type Transactional ¶ added in v1.1.0
type Transactional interface { // Begin opens a transaction for the current storage. // // Calling Begin on an already Begin'ed storage returns ErrDatabaseTxDidBegin. Begin() error // Commit saves all the changes made to storage after Begin atomically. Commit() error // Rollbacks discards all the changes made to storage after Begin. Rollback() error }
Transactional defines the methods for a persistence storage that supports transaction.
A Begin'ed transaction must end with a call to Commit or Rollback. After that, all opertions on the storage will return ErrDatabaseTxDone.
type TxDatabase ¶
type TxDatabase interface { Transactional Database }
TxDatabase defines a Transactional Database
type Unknown ¶ added in v0.20.0
type Unknown struct {
UnderlyingType string
}
Unknown is a bogus data type denoting the type of a field is unknown.
type UserRelationFunc ¶
type UserRelationFunc struct { KeyPath string RelationName string RelationDirection string User string }
UserRelationFunc represents a function that is used to evaulate whether a record satisfy certain user-based relation
func (UserRelationFunc) Args ¶
func (f UserRelationFunc) Args() []interface{}
Args implements the Func interface
func (UserRelationFunc) DataType ¶ added in v0.23.0
func (f UserRelationFunc) DataType() DataType
func (UserRelationFunc) ReferencedKeyPaths ¶ added in v1.1.0
func (f UserRelationFunc) ReferencedKeyPaths() []string
ReferencedKeyPaths implements the KeyPathFunc interface.