package persistence

// SQL Type Prefixes and Keywords used for Schema introspection
const (
	SQLTypeVarchar   = "VARCHAR"
	SQLTypeText      = "TEXT"
	SQLTypeChar      = "CHAR"
	SQLTypeBool      = "BOOL"
	SQLTypeBoolean   = "BOOLEAN"
	SQLTypeTinyInt   = "TINYINT"
	SQLTypeTinyInt1  = "TINYINT(1)"
	SQLTypeInt       = "INT"
	SQLTypeInteger   = "INTEGER"
	SQLTypeBigInt    = "BIGINT"
	SQLTypeSmallInt  = "SMALLINT"
	SQLTypeDecimal   = "DECIMAL"
	SQLTypeFloat     = "FLOAT"
	SQLTypeDouble    = "DOUBLE"
	SQLTypeDateTime  = "DATETIME"
	SQLTypeTimestamp = "TIMESTAMP"
	SQLTypeDate      = "DATE"
	SQLTypeJSON      = "JSON"

	// Standard SQL Type Definitions with Precision
	SQLTypeVarchar255 = "VARCHAR(255)"
	SQLTypeVarchar50  = "VARCHAR(50)"
	SQLTypeLongText   = "LONGTEXT"
	SQLTypeMediumBlob = "MEDIUMBLOB"

	// SQL Keyword Constants
	KeywordInsertInto  = "INSERT INTO"
	KeywordValues      = "VALUES"
	KeywordOnDuplicate = "ON DUPLICATE KEY UPDATE"
	// SQL Functions
	FuncNow              = "NOW()"
	FuncCurrentTimestamp = "CURRENT_TIMESTAMP"
	FuncCount            = "COUNT(*)"
)

// Query Operation Codes
const (
	OpCount   = "count"
	OpGroupBy = "group_by"
	// Rollup Types (Uppercase)
	RollupTypeCount = "COUNT"
	RollupTypeSum   = "SUM"
	RollupTypeMin   = "MIN"
	RollupTypeMax   = "MAX"
	RollupTypeAvg   = "AVG"
)

// System Health Status
const (
	StatusHealthy      = "healthy"
	StatusUnhealthy    = "unhealthy"
	StatusOperational  = "operational"
	CreatedByBootstrap = "bootstrap"
)

// Transaction Constraints
const (
	ErrCodeDeadlock = "1213"
	ErrCodeLockWait = "1205"
)
