311 lines
7.5 KiB
C#
311 lines
7.5 KiB
C#
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<string> TSqlKeywords = new HashSet<string>(_TSqlKeywords);
|
|
|
|
public static readonly HashSet<string> TSqlDataTypes = new HashSet<string>(_TSqlDataTypes);
|
|
|
|
public static int TabWidth => 4;
|
|
|
|
public static int DefaultCompatabilityLevel => 120;
|
|
|
|
public static int MaxLineWidthForRegexEval => 300;
|
|
|
|
public static HashSet<string> 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"
|
|
};
|
|
|
|
|
|
}
|