namespace SQLLinter.Core; public static class Constants { public static readonly string[] _TSqlKeywords = { "ADD", "ALL", "ALTER", "AND", "ANY", "AS", "ASC", "AUTHORIZATION", "BACKUP", "BEGIN", "BETWEEN", "BREAK", "BROWSE", "BULK", "BY", "CASCADE", "CASE", "CHECK", "CHECKPOINT", "CLOSE", "CLUSTERED", "COALESCE", "COLLATE", "COLUMN", "COMMIT", "COMPUTE", "CONSTRAINT", "CONTAINS", "CONTAINSTABLE", "CONTINUE", "CONVERT", "CREATE", "CROSS", "CURRENT", "CURRENT_DATE", "CURRENT_TIME", "CURRENT_TIMESTAMP", "CURRENT_USER", "CURSOR", "DATABASE", "DBCC", "DEALLOCATE", "DECLARE", "DEFAULT", "DELETE", "DENY", "DESC", "DISK", "DISTINCT", "DISTRIBUTED", "DOUBLE", "DROP", "DUMP", "ELSE", "END", "ERRLVL", "ESCAPE", "EXCEPT", "EXEC", "EXECUTE", "EXISTS", "EXIT", "EXTERNAL", "FETCH", "FILE", "FILLFACTOR", "FOR", "FOREIGN", "FREETEXT", "FREETEXTTABLE", "FROM", "FULL", "FUNCTION", "GOTO", "GRANT", "GROUP", "HAVING", "HOLDLOCK", "IDENTITY", "IDENTITYCOL", "IDENTITY_INSERT", "IF", "IN", "INDEX", "INNER", "INSERT", "INTERSECT", "INTO", "IS", "JOIN", "KEY", "KILL", "LEFT", "LIKE", "LINENO", "LOAD", "MERGE", "NATIONAL", "NOCHECK", "NONCLUSTERED", "NOT", "NULL", "NULLIF", "OF", "OFF", "OFFSETS", "ON", "OPEN", "OPENDATASOURCE", "OPENQUERY", "OPENROWSET", "OPENXML", "OPTION", "OR", "ORDER", "OUTER", "OVER", "PERCENT", "PIVOT", "PLAN", "PRECISION", "PRIMARY", "PRINT", "PROC", "PROCEDURE", "PUBLIC", "RAISERROR", "READ", "READTEXT", "RECONFIGURE", "REFERENCES", "REPLICATION", "RESTORE", "RESTRICT", "RETURN", "REVERT", "REVOKE", "RIGHT", "ROLLBACK", "ROWCOUNT", "ROWGUIDCOL", "RULE", "SAVE", "SCHEMA", "SECURITYAUDIT", "SELECT", "SEMANTICKEYPHRASETABLE", "SEMANTICSIMILARITYDETAILSTABLE", "SEMANTICSIMILARITYTABLE", "SESSION_USER", "SET", "SETUSER", "SHUTDOWN", "SOME", "STATISTICS", "SYSTEM_USER", "TABLE", "TABLESAMPLE", "TEXTSIZE", "THEN", "TO", "TOP", "TRAN", "TRANSACTION", "TRIGGER", "TRUNCATE", "TRY_CONVERT", "TSEQUAL", "UNION", "UNIQUE", "UNPIVOT", "UPDATE", "UPDATETEXT", "USE", "USER", "VALUES", "VARYING", "VIEW", "WAITFOR", "WHEN", "WHERE", "WHILE", "WITH", "WITHIN GROUP", "WRITETEXT" }; public static readonly string[] _TSqlDataTypes = { "BIGINT", "BIT", "DECIMAL", "INT", "MONEY", "NUMERIC", "SMALLINT", "SMALLMONEY", "TINYINT", "FLOAT", "REAL", "DATE", "DATETIME2", "DATETIME", "DATETIMEOFFSET", "SMALLDATETIME", "TIME", "CHAR", "TEXT", "VARCHAR", "NCHAR", "NTEXT", "NVARCHAR", "BINARY", "IMAGE", "VARBINARY", "CURSOR", "ROWVERSION", "UNIQUEIDENTIFIER", "XML" }; public static readonly HashSet TSqlKeywords = new HashSet(_TSqlKeywords); public static readonly HashSet TSqlDataTypes = new HashSet(_TSqlDataTypes); public static int TabWidth => 4; public static int DefaultCompatabilityLevel => 120; public static int MaxLineWidthForRegexEval => 300; public static HashSet SystemFunctions = new(StringComparer.OrdinalIgnoreCase) { // Метаданные "APP_NAME", "HOST_NAME", "HOST_ID", "CONNECTIONPROPERTY", "SESSION_CONTEXT", "CURRENT_USER", "SYSTEM_USER", "SUSER_NAME", "SUSER_SID", "USER_NAME", "USER_ID", // Ошибки "@@ERROR", "ERROR_MESSAGE", "ERROR_LINE", "ERROR_NUMBER", "ERROR_SEVERITY", "ERROR_STATE", "FORMATMESSAGE", // Идентификаторы "@@IDENTITY", "SCOPE_IDENTITY", "IDENT_CURRENT", "@@ROWCOUNT", "ROWCOUNT_BIG", "@@TRANCOUNT", "XACT_STATE", "CURRENT_TRANSACTION_ID", // Дата/время "GETDATE", "SYSDATETIME", "SYSUTCDATETIME", "SYSDATETIMEOFFSET", "CURRENT_TIMESTAMP", "GETUTCDATE", "DATEADD", "DATEDIFF", "DATENAME", "DATEPART", "EOMONTH", // Строковые/бинарные "ISNULL", "NULLIF", "COALESCE", "DATALENGTH", "COMPRESS", "DECOMPRESS", "BINARY_CHECKSUM", "CHECKSUM", "PARSENAME", // Уникальные идентификаторы "NEWID", "NEWSEQUENTIALID", // Системные переменные "@@VERSION", "@@SERVERNAME", "@@SPID", "@@LANGUAGE", "@@MAX_CONNECTIONS", // Database Functions "DB_ID", "DB_NAME", "OBJECT_ID", "OBJECT_NAME", "OBJECT_SCHEMA_NAME", "COL_LENGTH", "COL_NAME", "FILE_ID", "FILE_NAME", "SCHEMA_ID", "SCHEMA_NAME", "TYPE_ID", "TYPE_NAME", // Математические "ABS", "ACOS", "ASIN", "ATAN", "ATN2", "CEILING", "COS", "COT", "DEGREES", "EXP", "FLOOR", "LOG", "LOG10", "PI", "POWER", "RADIANS", "RAND", "ROUND", "SIGN", "SIN", "SQRT", "SQUARE", "TAN", // Агрегатные "AVG", "COUNT", "COUNT_BIG", "MIN", "MAX", "SUM", // Курсоры "CURSOR_STATUS", // Конфигурационные и серверные "@@OPTIONS", "SESSIONPROPERTY", "INDEXPROPERTY", "INDEX_COL", "COLLATIONPROPERTY", "SERVERPROPERTY", "DATABASEPROPERTYEX", "OBJECTPROPERTY", "OBJECTPROPERTYEX", // Безопасность "HAS_DBACCESS", "IS_MEMBER", "IS_ROLEMEMBER", "IS_SRVROLEMEMBER", "PERMISSIONS", "PWDCOMPARE", "PWDENCRYPT", // JSON "JSON_VALUE", "JSON_QUERY", "JSON_MODIFY", // Аналитические (оконные) "CUME_DIST", "RANK", "DENSE_RANK", "NTILE", "ROW_NUMBER", "LEAD", "LAG", "FIRST_VALUE", "LAST_VALUE", "PERCENT_RANK", "PERCENTILE_CONT", "PERCENTILE_DISC", // XML "nodes", "value", "query", "exist", "modify", // CLR "FORMAT", "TRY_CONVERT", "TRY_CAST", "TRY_PARSE", "PARSE", // Spatial (geometry/geography) "STArea", "STLength", "STDistance", "STIntersects", "STBuffer", "STUnion", "STDifference", "STIntersection", "STGeomFromText", "STGeomFromWKB", "STPointFromText", "STPointFromWKB", "STAsText", "STAsBinary", "STEnvelope", "STCentroid", "STIsEmpty", "STIsValid", // Statistical "STDEV", "STDEVP", "VAR", "VARP", "CHECKSUM_AGG", "COLUMNS_UPDATED" }; }