github.com/ecodeclub/eorm@v0.0.2-0.20231001112437-dae71da914d0/internal/errs/error.go (about) 1 // Copyright 2021 ecodeclub 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package errs 16 17 import ( 18 "errors" 19 "fmt" 20 ) 21 22 var ( 23 ErrPointerOnly = errors.New("eorm: 只支持指向结构体的一级指针") 24 errValueNotSet = errors.New("eorm: 值未设置") 25 ErrNoRows = errors.New("eorm: 未找到数据") 26 // ErrTooManyColumns 过多列 27 // 一般是查询的列多于结构体的列 28 ErrTooManyColumns = errors.New("eorm: 过多列") 29 30 // ErrCombinationIsNotStruct 不支持的组合类型,eorm 只支持结构体组合 31 ErrCombinationIsNotStruct = errors.New("eorm: 不支持的组合类型,eorm 只支持结构体组合") 32 ErrMissingShardingKey = errors.New("eorm: sharding key 未设置") 33 ErrOnlyResultOneQuery = errors.New("eorm: 只能生成一个 SQL") 34 ErrUnsupportedTooComplexQuery = errors.New("eorm: 暂未支持太复杂的查询") 35 ErrSlaveNotFound = errors.New("eorm: slave不存在") 36 ErrNotGenShardingQuery = errors.New("eorm: 未生成 sharding query") 37 ErrNotCompleteTxBeginner = errors.New("eorm: 未实现 TxBeginner 接口") 38 ErrInsertShardingKeyNotFound = errors.New("eorm: insert语句中未包含sharding key") 39 ErrInsertFindingDst = errors.New("eorm: 一行数据只能插入一个表") 40 ErrUnsupportedAssignment = errors.New("eorm: 不支持的 assignment") 41 ErrUnsupportedDistributedTransaction = errors.New("eorm: 不支持的分布式事务类型") 42 ) 43 44 func NewErrDBNotEqual(oldDB, tgtDB string) error { 45 return fmt.Errorf("eorm:禁止跨库操作: %s 不等于 %s ", oldDB, tgtDB) 46 } 47 48 func NewErrNotCompleteFinder(name string) error { 49 return fmt.Errorf("eorm: %s 未实现 Finder 接口", name) 50 } 51 52 func NewErrNotFoundTargetDataSource(name string) error { 53 return fmt.Errorf("eorm: 未发现目标 data dource %s", name) 54 } 55 56 func NewErrNotFoundTargetDB(name string) error { 57 return fmt.Errorf("eorm: 未发现目标 DB %s", name) 58 } 59 60 func NewErrUpdateShardingKeyUnsupported(field string) error { 61 return fmt.Errorf("eorm: ShardingKey `%s` 不支持更新", field) 62 } 63 64 func NewFieldConflictError(field string) error { 65 return fmt.Errorf("eorm: `%s`列冲突", field) 66 } 67 68 // NewInvalidFieldError 返回代表未知字段的错误。 69 // 通常来说,是字段名没写对 70 // 注意区分 NewInvalidColumnError 71 func NewInvalidFieldError(field string) error { 72 return fmt.Errorf("eorm: 未知字段 %s", field) 73 } 74 75 // NewInvalidColumnError 返回代表未知列名的错误 76 // 通常来说,是列名不对 77 // 注意区分 NewInvalidFieldError 78 func NewInvalidColumnError(column string) error { 79 return fmt.Errorf("eorm: 未知列 %s", column) 80 } 81 82 func NewValueNotSetError() error { 83 return errValueNotSet 84 } 85 86 // NewUnsupportedDriverError 不支持驱动类型 87 func NewUnsupportedDriverError(driver string) error { 88 return fmt.Errorf("eorm: 不支持driver类型 %s", driver) 89 } 90 91 // NewUnsupportedTableReferenceError 不支持的TableReference类型 92 func NewUnsupportedTableReferenceError(table any) error { 93 return fmt.Errorf("eorm: 不支持的TableReference类型 %v", table) 94 } 95 96 func NewErrUnsupportedExpressionType() error { 97 return fmt.Errorf("eorm: 不支持 Expression") 98 } 99 100 func NewMustSpecifyColumnsError() error { 101 return fmt.Errorf("eorm: 复合查询如 JOIN 查询、子查询必须指定要查找的列,即指定 SELECT xxx 部分") 102 } 103 104 func NewUnsupportedOperatorError(op string) error { 105 return fmt.Errorf("eorm: 不支持的 operator %v", op) 106 } 107 108 func NewInvalidDSNError(dsn string) error { 109 return fmt.Errorf("eorm: 不正确的 DSN %s", dsn) 110 } 111 112 func NewFailedToGetSlavesFromDNS(err error) error { 113 return fmt.Errorf("eorm: 从DNS中解析从库失败 %w", err) 114 } 115 116 func NewErrScanWrongDestinationArguments(expect int, actual int) error { 117 return fmt.Errorf("eorm: Scan 方法收到过多或者过少的参数,预期 %d,实际 %d", expect, actual) 118 }