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  }