commit ec394d06e63ef52229a03f97ce2e8556f9e3c5d2 Author: 小小小小嘉琪 <2214521312@qq.com> Date: Mon Dec 16 16:51:42 2024 +0800 cyr is 666 diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..35410cac --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# 默认忽略的文件 +/shelf/ +/workspace.xml +# 基于编辑器的 HTTP 客户端请求 +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/RoundtableLogistics.iml b/.idea/RoundtableLogistics.iml new file mode 100644 index 00000000..d6ebd480 --- /dev/null +++ b/.idea/RoundtableLogistics.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 00000000..94fac38c --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 00000000..935d4c8a --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,17 @@ + + + + + mysql.8 + true + com.mysql.cj.jdbc.Driver + jdbc:mysql://localhost:3306 + + + + + + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 00000000..268312e3 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 00000000..c4ded142 --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..ba91fefc --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..e0183006 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 00000000..b00b3d9d --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/IDEA/.gitignore b/IDEA/.gitignore new file mode 100644 index 00000000..1c2f9f65 --- /dev/null +++ b/IDEA/.gitignore @@ -0,0 +1,35 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +.DS_Store +*.DS_Store +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/IDEA/information_schema/ADMINISTRABLE_ROLE_AUTHORIZATIONS.sql b/IDEA/information_schema/ADMINISTRABLE_ROLE_AUTHORIZATIONS.sql new file mode 100644 index 00000000..daa60581 --- /dev/null +++ b/IDEA/information_schema/ADMINISTRABLE_ROLE_AUTHORIZATIONS.sql @@ -0,0 +1,13 @@ +create view information_schema.ADMINISTRABLE_ROLE_AUTHORIZATIONS as +select `information_schema`.`applicable_roles`.`USER` AS `USER`, + `information_schema`.`applicable_roles`.`HOST` AS `HOST`, + `information_schema`.`applicable_roles`.`GRANTEE` AS `GRANTEE`, + `information_schema`.`applicable_roles`.`GRANTEE_HOST` AS `GRANTEE_HOST`, + `information_schema`.`applicable_roles`.`ROLE_NAME` AS `ROLE_NAME`, + `information_schema`.`applicable_roles`.`ROLE_HOST` AS `ROLE_HOST`, + `information_schema`.`applicable_roles`.`IS_GRANTABLE` AS `IS_GRANTABLE`, + `information_schema`.`applicable_roles`.`IS_DEFAULT` AS `IS_DEFAULT`, + `information_schema`.`applicable_roles`.`IS_MANDATORY` AS `IS_MANDATORY` +from `information_schema`.`APPLICABLE_ROLES` +where (`information_schema`.`applicable_roles`.`IS_GRANTABLE` = 'YES'); + diff --git a/IDEA/information_schema/APPLICABLE_ROLES.sql b/IDEA/information_schema/APPLICABLE_ROLES.sql new file mode 100644 index 00000000..795e12d7 --- /dev/null +++ b/IDEA/information_schema/APPLICABLE_ROLES.sql @@ -0,0 +1,80 @@ +create view information_schema.APPLICABLE_ROLES as +with recursive `role_graph` (`c_parent_user`, `c_parent_host`, `c_from_user`, `c_from_host`, `c_to_user`, `c_to_host`, + `role_path`, `c_with_admin`, `c_enabled`) + as (select internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + cast('' as char(64) charset utf8mb4) AS `CAST('' as CHAR(64) CHARSET utf8mb4)`, + cast('' as char(255) charset utf8mb4) AS `CAST('' as CHAR(255) CHARSET utf8mb4)`, + cast(sha2(concat(quote(internal_get_username()), '@', quote(internal_get_hostname())), + 256) as char(17000) charset utf8mb4) AS `CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4)`, + cast('N' as char(1) charset utf8mb4) AS `CAST('N' as CHAR(1) CHARSET utf8mb4)`, + false AS `FALSE` + union + select internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + `mandatory_roles`.`ROLE_NAME` AS `ROLE_NAME`, + `mandatory_roles`.`ROLE_HOST` AS `ROLE_HOST`, + internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + cast(sha2(concat(quote(`mandatory_roles`.`ROLE_NAME`), '@', + convert(quote(`mandatory_roles`.`ROLE_HOST`) using utf8mb4)), + 256) as char(17000) charset utf8mb4) AS `CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4)`, + cast('N' as char(1) charset utf8mb4) AS `CAST('N' as CHAR(1) CHARSET utf8mb4)`, + false AS `FALSE` + from json_table(internal_get_mandatory_roles_json(), '$[*]' + columns (`ROLE_NAME` varchar(255) character set utf8mb4 path '$.ROLE_NAME', `ROLE_HOST` varchar(255) character set utf8mb4 path '$.ROLE_HOST')) `mandatory_roles` + where concat(quote(`mandatory_roles`.`ROLE_NAME`), '@', + convert(quote(`mandatory_roles`.`ROLE_HOST`) using utf8mb4)) in + (select concat(convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)) + from `mysql`.`role_edges` + where ((`mysql`.`role_edges`.`TO_USER` = internal_get_username()) and + (convert(`mysql`.`role_edges`.`TO_HOST` using utf8mb4) = + convert(internal_get_hostname() using utf8mb4)))) is false + union + select `role_graph`.`c_parent_user` AS `c_parent_user`, + `role_graph`.`c_parent_host` AS `c_parent_host`, + `mysql`.`role_edges`.`FROM_USER` AS `FROM_USER`, + `mysql`.`role_edges`.`FROM_HOST` AS `FROM_HOST`, + `mysql`.`role_edges`.`TO_USER` AS `TO_USER`, + `mysql`.`role_edges`.`TO_HOST` AS `TO_HOST`, + if((locate(sha2(concat(convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), + '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)), + 256), `role_graph`.`role_path`) = 0), + concat(`role_graph`.`role_path`, '->', convert(sha2(concat( + convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), + '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)), + 256) using utf8mb4)), + NULL) AS `IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8`, + `mysql`.`role_edges`.`WITH_ADMIN_OPTION` AS `WITH_ADMIN_OPTION`, + if(((0 <> `role_graph`.`c_enabled`) or (0 <> internal_is_enabled_role( + `mysql`.`role_edges`.`FROM_USER`, `mysql`.`role_edges`.`FROM_HOST`))), true, + false) AS `IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE)` + from (`mysql`.`role_edges` join `role_graph`) + where ((`mysql`.`role_edges`.`TO_USER` = `role_graph`.`c_from_user`) and + (convert(`mysql`.`role_edges`.`TO_HOST` using utf8mb4) = `role_graph`.`c_from_host`) and + (`role_graph`.`role_path` is not null))) +select distinct `role_graph`.`c_parent_user` AS `USER`, + `role_graph`.`c_parent_host` AS `HOST`, + `role_graph`.`c_to_user` AS `GRANTEE`, + `role_graph`.`c_to_host` AS `GRANTEE_HOST`, + `role_graph`.`c_from_user` AS `ROLE_NAME`, + `role_graph`.`c_from_host` AS `ROLE_HOST`, + if((`role_graph`.`c_with_admin` = 'N'), 'NO', 'YES') AS `IS_GRANTABLE`, + (select if(count(0), 'YES', 'NO') + from `mysql`.`default_roles` + where ((`mysql`.`default_roles`.`DEFAULT_ROLE_USER` = `role_graph`.`c_from_user`) and + (convert(`mysql`.`default_roles`.`DEFAULT_ROLE_HOST` using utf8mb4) = + `role_graph`.`c_from_host`) and + (`mysql`.`default_roles`.`USER` = `role_graph`.`c_parent_user`) and + (convert(`mysql`.`default_roles`.`HOST` using utf8mb4) = + `role_graph`.`c_parent_host`))) AS `IS_DEFAULT`, + if(internal_is_mandatory_role(`role_graph`.`c_from_user`, `role_graph`.`c_from_host`), 'YES', + 'NO') AS `IS_MANDATORY` +from `role_graph` +where (`role_graph`.`c_to_user` <> ''); + diff --git a/IDEA/information_schema/CHARACTER_SETS.sql b/IDEA/information_schema/CHARACTER_SETS.sql new file mode 100644 index 00000000..3c55f8e5 --- /dev/null +++ b/IDEA/information_schema/CHARACTER_SETS.sql @@ -0,0 +1,7 @@ +create view information_schema.CHARACTER_SETS as +select `cs`.`name` AS `CHARACTER_SET_NAME`, + `col`.`name` AS `DEFAULT_COLLATE_NAME`, + `cs`.`comment` AS `DESCRIPTION`, + `cs`.`mb_max_length` AS `MAXLEN` +from (`mysql`.`character_sets` `cs` join `mysql`.`collations` `col` on ((`cs`.`default_collation_id` = `col`.`id`))); + diff --git a/IDEA/information_schema/CHECK_CONSTRAINTS.sql b/IDEA/information_schema/CHECK_CONSTRAINTS.sql new file mode 100644 index 00000000..ef49e8c1 --- /dev/null +++ b/IDEA/information_schema/CHECK_CONSTRAINTS.sql @@ -0,0 +1,10 @@ +create view information_schema.CHECK_CONSTRAINTS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `CONSTRAINT_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `CONSTRAINT_SCHEMA`, + `cc`.`name` AS `CONSTRAINT_NAME`, + `cc`.`check_clause_utf8` AS `CHECK_CLAUSE` +from (((`mysql`.`check_constraints` `cc` join `mysql`.`tables` `tbl` + on ((`cc`.`table_id` = `tbl`.`id`))) join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` on ((`cat`.`id` = `sch`.`catalog_id`))) +where ((0 <> can_access_table(`sch`.`name`, `tbl`.`name`)) and (0 <> is_visible_dd_object(`tbl`.`hidden`))); + diff --git a/IDEA/information_schema/COLLATIONS.sql b/IDEA/information_schema/COLLATIONS.sql new file mode 100644 index 00000000..5ae2bc48 --- /dev/null +++ b/IDEA/information_schema/COLLATIONS.sql @@ -0,0 +1,12 @@ +create view information_schema.COLLATIONS as +select `col`.`name` AS `COLLATION_NAME`, + `cs`.`name` AS `CHARACTER_SET_NAME`, + `col`.`id` AS `ID`, + if(exists(select 1 + from `mysql`.`character_sets` + where (`mysql`.`character_sets`.`default_collation_id` = `col`.`id`)), 'Yes', '') AS `IS_DEFAULT`, + if(`col`.`is_compiled`, 'Yes', '') AS `IS_COMPILED`, + `col`.`sort_length` AS `SORTLEN`, + `col`.`pad_attribute` AS `PAD_ATTRIBUTE` +from (`mysql`.`collations` `col` join `mysql`.`character_sets` `cs` on ((`col`.`character_set_id` = `cs`.`id`))); + diff --git a/IDEA/information_schema/COLLATION_CHARACTER_SET_APPLICABILITY.sql b/IDEA/information_schema/COLLATION_CHARACTER_SET_APPLICABILITY.sql new file mode 100644 index 00000000..c555311e --- /dev/null +++ b/IDEA/information_schema/COLLATION_CHARACTER_SET_APPLICABILITY.sql @@ -0,0 +1,4 @@ +create view information_schema.COLLATION_CHARACTER_SET_APPLICABILITY as +select `col`.`name` AS `COLLATION_NAME`, `cs`.`name` AS `CHARACTER_SET_NAME` +from (`mysql`.`character_sets` `cs` join `mysql`.`collations` `col` on ((`cs`.`id` = `col`.`character_set_id`))); + diff --git a/IDEA/information_schema/COLUMNS.sql b/IDEA/information_schema/COLUMNS.sql new file mode 100644 index 00000000..2fa4d50f --- /dev/null +++ b/IDEA/information_schema/COLUMNS.sql @@ -0,0 +1,60 @@ +create view information_schema.COLUMNS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `TABLE_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `TABLE_SCHEMA`, + (`tbl`.`name` collate utf8mb3_tolower_ci) AS `TABLE_NAME`, + (`col`.`name` collate utf8mb3_tolower_ci) AS `COLUMN_NAME`, + `col`.`ordinal_position` AS `ORDINAL_POSITION`, + `col`.`default_value_utf8` AS `COLUMN_DEFAULT`, + if((`col`.`is_nullable` = 1), 'YES', 'NO') AS `IS_NULLABLE`, + substring_index(substring_index(`col`.`column_type_utf8`, '(', 1), ' ', + 1) AS `DATA_TYPE`, + internal_dd_char_length(`col`.`type`, `col`.`char_length`, `coll`.`name`, + 0) AS `CHARACTER_MAXIMUM_LENGTH`, + internal_dd_char_length(`col`.`type`, `col`.`char_length`, `coll`.`name`, + 1) AS `CHARACTER_OCTET_LENGTH`, + if((`col`.`numeric_precision` = 0), NULL, `col`.`numeric_precision`) AS `NUMERIC_PRECISION`, + if(((`col`.`numeric_scale` = 0) and (`col`.`numeric_precision` = 0)), NULL, + `col`.`numeric_scale`) AS `NUMERIC_SCALE`, + `col`.`datetime_precision` AS `DATETIME_PRECISION`, + (case `col`.`type` + when 'MYSQL_TYPE_STRING' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_VAR_STRING' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_VARCHAR' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_TINY_BLOB' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_MEDIUM_BLOB' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_BLOB' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_LONG_BLOB' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_ENUM' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_SET' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + else NULL end) AS `CHARACTER_SET_NAME`, + (case `col`.`type` + when 'MYSQL_TYPE_STRING' then if((`cs`.`name` = 'binary'), NULL, `coll`.`name`) + when 'MYSQL_TYPE_VAR_STRING' then if((`cs`.`name` = 'binary'), NULL, `coll`.`name`) + when 'MYSQL_TYPE_VARCHAR' then if((`cs`.`name` = 'binary'), NULL, `coll`.`name`) + when 'MYSQL_TYPE_TINY_BLOB' then if((`cs`.`name` = 'binary'), NULL, `coll`.`name`) + when 'MYSQL_TYPE_MEDIUM_BLOB' then if((`cs`.`name` = 'binary'), NULL, `coll`.`name`) + when 'MYSQL_TYPE_BLOB' then if((`cs`.`name` = 'binary'), NULL, `coll`.`name`) + when 'MYSQL_TYPE_LONG_BLOB' then if((`cs`.`name` = 'binary'), NULL, `coll`.`name`) + when 'MYSQL_TYPE_ENUM' then if((`cs`.`name` = 'binary'), NULL, `coll`.`name`) + when 'MYSQL_TYPE_SET' then if((`cs`.`name` = 'binary'), NULL, `coll`.`name`) + else NULL end) AS `COLLATION_NAME`, + `col`.`column_type_utf8` AS `COLUMN_TYPE`, + `col`.`column_key` AS `COLUMN_KEY`, + internal_get_dd_column_extra((`col`.`generation_expression_utf8` is null), `col`.`is_virtual`, + `col`.`is_auto_increment`, `col`.`update_option`, + if(length(`col`.`default_option`), true, false), `col`.`options`, `col`.`hidden`, + `tbl`.`type`) AS `EXTRA`, + get_dd_column_privileges(`sch`.`name`, `tbl`.`name`, `col`.`name`) AS `PRIVILEGES`, + ifnull(`col`.`comment`, '') AS `COLUMN_COMMENT`, + ifnull(`col`.`generation_expression_utf8`, '') AS `GENERATION_EXPRESSION`, + `col`.`srs_id` AS `SRS_ID` +from (((((`mysql`.`columns` `col` join `mysql`.`tables` `tbl` + on ((`col`.`table_id` = `tbl`.`id`))) join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`collations` `coll` + on ((`col`.`collation_id` = `coll`.`id`))) join `mysql`.`character_sets` `cs` + on ((`coll`.`character_set_id` = `cs`.`id`))) +where ((0 <> internal_get_view_warning_or_error(`sch`.`name`, `tbl`.`name`, `tbl`.`type`, `tbl`.`options`)) and + (0 <> can_access_column(`sch`.`name`, `tbl`.`name`, `col`.`name`)) and + (0 <> is_visible_dd_object(`tbl`.`hidden`, (`col`.`hidden` not in ('Visible', 'User')), `col`.`options`))); + diff --git a/IDEA/information_schema/COLUMNS_EXTENSIONS.sql b/IDEA/information_schema/COLUMNS_EXTENSIONS.sql new file mode 100644 index 00000000..4256c42b --- /dev/null +++ b/IDEA/information_schema/COLUMNS_EXTENSIONS.sql @@ -0,0 +1,14 @@ +create view information_schema.COLUMNS_EXTENSIONS as +select `cat`.`name` AS `TABLE_CATALOG`, + `sch`.`name` AS `TABLE_SCHEMA`, + `tbl`.`name` AS `TABLE_NAME`, + (`col`.`name` collate utf8mb3_tolower_ci) AS `COLUMN_NAME`, + `col`.`engine_attribute` AS `ENGINE_ATTRIBUTE`, + `col`.`secondary_engine_attribute` AS `SECONDARY_ENGINE_ATTRIBUTE` +from (((`mysql`.`columns` `col` join `mysql`.`tables` `tbl` + on ((`col`.`table_id` = `tbl`.`id`))) join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` on ((`cat`.`id` = `sch`.`catalog_id`))) +where ((0 <> internal_get_view_warning_or_error(`sch`.`name`, `tbl`.`name`, `tbl`.`type`, `tbl`.`options`)) and + (0 <> can_access_column(`sch`.`name`, `tbl`.`name`, `col`.`name`)) and + (0 <> is_visible_dd_object(`tbl`.`hidden`, (`col`.`hidden` not in ('Visible', 'User')), `col`.`options`))); + diff --git a/IDEA/information_schema/COLUMN_STATISTICS.sql b/IDEA/information_schema/COLUMN_STATISTICS.sql new file mode 100644 index 00000000..e00b94e0 --- /dev/null +++ b/IDEA/information_schema/COLUMN_STATISTICS.sql @@ -0,0 +1,8 @@ +create view information_schema.COLUMN_STATISTICS as +select `mysql`.`column_statistics`.`schema_name` AS `SCHEMA_NAME`, + `mysql`.`column_statistics`.`table_name` AS `TABLE_NAME`, + `mysql`.`column_statistics`.`column_name` AS `COLUMN_NAME`, + `mysql`.`column_statistics`.`histogram` AS `HISTOGRAM` +from `mysql`.`column_statistics` +where (0 <> can_access_table(`mysql`.`column_statistics`.`schema_name`, `mysql`.`column_statistics`.`table_name`)); + diff --git a/IDEA/information_schema/ENABLED_ROLES.sql b/IDEA/information_schema/ENABLED_ROLES.sql new file mode 100644 index 00000000..3e08dcdd --- /dev/null +++ b/IDEA/information_schema/ENABLED_ROLES.sql @@ -0,0 +1,16 @@ +create view information_schema.ENABLED_ROLES as +select `current_user_enabled_roles`.`ROLE_NAME` AS `ROLE_NAME`, + `current_user_enabled_roles`.`ROLE_HOST` AS `ROLE_HOST`, + (select if(count(0), 'YES', 'NO') + from `mysql`.`default_roles` + where ((`mysql`.`default_roles`.`DEFAULT_ROLE_USER` = `current_user_enabled_roles`.`ROLE_NAME`) and + (convert(`mysql`.`default_roles`.`DEFAULT_ROLE_HOST` using utf8mb4) = + `current_user_enabled_roles`.`ROLE_HOST`) and + (`mysql`.`default_roles`.`USER` = internal_get_username()) and + (convert(`mysql`.`default_roles`.`HOST` using utf8mb4) = + convert(internal_get_hostname() using utf8mb4)))) AS `IS_DEFAULT`, + if(internal_is_mandatory_role(`current_user_enabled_roles`.`ROLE_NAME`, + `current_user_enabled_roles`.`ROLE_HOST`), 'YES', 'NO') AS `IS_MANDATORY` +from json_table(internal_get_enabled_role_json(), '$[*]' + columns (`ROLE_NAME` varchar(255) character set utf8mb4 path '$.ROLE_NAME', `ROLE_HOST` varchar(255) character set utf8mb4 path '$.ROLE_HOST')) `current_user_enabled_roles`; + diff --git a/IDEA/information_schema/EVENTS.sql b/IDEA/information_schema/EVENTS.sql new file mode 100644 index 00000000..3551a33c --- /dev/null +++ b/IDEA/information_schema/EVENTS.sql @@ -0,0 +1,34 @@ +create view information_schema.EVENTS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `EVENT_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `EVENT_SCHEMA`, + `evt`.`name` AS `EVENT_NAME`, + `evt`.`definer` AS `DEFINER`, + `evt`.`time_zone` AS `TIME_ZONE`, + 'SQL' AS `EVENT_BODY`, + `evt`.`definition_utf8` AS `EVENT_DEFINITION`, + if((`evt`.`interval_value` is null), 'ONE TIME', 'RECURRING') AS `EVENT_TYPE`, + convert_tz(`evt`.`execute_at`, '+00:00', `evt`.`time_zone`) AS `EXECUTE_AT`, + convert_interval_to_user_interval(`evt`.`interval_value`, `evt`.`interval_field`) AS `INTERVAL_VALUE`, + `evt`.`interval_field` AS `INTERVAL_FIELD`, + `evt`.`sql_mode` AS `SQL_MODE`, + convert_tz(`evt`.`starts`, '+00:00', `evt`.`time_zone`) AS `STARTS`, + convert_tz(`evt`.`ends`, '+00:00', `evt`.`time_zone`) AS `ENDS`, + `evt`.`status` AS `STATUS`, + if((`evt`.`on_completion` = 'DROP'), 'NOT PRESERVE', 'PRESERVE') AS `ON_COMPLETION`, + `evt`.`created` AS `CREATED`, + `evt`.`last_altered` AS `LAST_ALTERED`, + convert_tz(`evt`.`last_executed`, '+00:00', `evt`.`time_zone`) AS `LAST_EXECUTED`, + `evt`.`comment` AS `EVENT_COMMENT`, + `evt`.`originator` AS `ORIGINATOR`, + `cs_client`.`name` AS `CHARACTER_SET_CLIENT`, + `coll_conn`.`name` AS `COLLATION_CONNECTION`, + `coll_db`.`name` AS `DATABASE_COLLATION` +from ((((((`mysql`.`events` `evt` join `mysql`.`schemata` `sch` + on ((`evt`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`collations` `coll_client` + on ((`coll_client`.`id` = `evt`.`client_collation_id`))) join `mysql`.`character_sets` `cs_client` + on ((`cs_client`.`id` = `coll_client`.`character_set_id`))) join `mysql`.`collations` `coll_conn` + on ((`coll_conn`.`id` = `evt`.`connection_collation_id`))) join `mysql`.`collations` `coll_db` + on ((`coll_db`.`id` = `evt`.`schema_collation_id`))) +where (0 <> can_access_event(`sch`.`name`)); + diff --git a/IDEA/information_schema/FILES.sql b/IDEA/information_schema/FILES.sql new file mode 100644 index 00000000..b8b7fa08 --- /dev/null +++ b/IDEA/information_schema/FILES.sql @@ -0,0 +1,57 @@ +create view information_schema.FILES as +select internal_tablespace_id(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, `ts`.`se_private_data`) AS `FILE_ID`, + replace(if(((locate(left(`tsf`.`file_name`, 1), './') = 0) and (substr(`tsf`.`file_name`, 2, 1) <> ':')), + concat('./', `tsf`.`file_name`), `tsf`.`file_name`), '\\', + '/') AS `FILE_NAME`, + internal_tablespace_type(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `FILE_TYPE`, + `ts`.`name` AS `TABLESPACE_NAME`, + '' AS `TABLE_CATALOG`, + NULL AS `TABLE_SCHEMA`, + NULL AS `TABLE_NAME`, + internal_tablespace_logfile_group_name(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `LOGFILE_GROUP_NAME`, + internal_tablespace_logfile_group_number(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `LOGFILE_GROUP_NUMBER`, + `ts`.`engine` AS `ENGINE`, + NULL AS `FULLTEXT_KEYS`, + NULL AS `DELETED_ROWS`, + NULL AS `UPDATE_COUNT`, + internal_tablespace_free_extents(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `FREE_EXTENTS`, + internal_tablespace_total_extents(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `TOTAL_EXTENTS`, + internal_tablespace_extent_size(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `EXTENT_SIZE`, + internal_tablespace_initial_size(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `INITIAL_SIZE`, + internal_tablespace_maximum_size(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `MAXIMUM_SIZE`, + internal_tablespace_autoextend_size(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `AUTOEXTEND_SIZE`, + NULL AS `CREATION_TIME`, + NULL AS `LAST_UPDATE_TIME`, + NULL AS `LAST_ACCESS_TIME`, + NULL AS `RECOVER_TIME`, + NULL AS `TRANSACTION_COUNTER`, + internal_tablespace_version(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `VERSION`, + internal_tablespace_row_format(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `ROW_FORMAT`, + NULL AS `TABLE_ROWS`, + NULL AS `AVG_ROW_LENGTH`, + NULL AS `DATA_LENGTH`, + NULL AS `MAX_DATA_LENGTH`, + NULL AS `INDEX_LENGTH`, + internal_tablespace_data_free(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `DATA_FREE`, + NULL AS `CREATE_TIME`, + NULL AS `UPDATE_TIME`, + NULL AS `CHECK_TIME`, + NULL AS `CHECKSUM`, + internal_tablespace_status(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `STATUS`, + internal_tablespace_extra(`ts`.`name`, `tsf`.`file_name`, `ts`.`engine`, + `ts`.`se_private_data`) AS `EXTRA` +from (`mysql`.`tablespaces` `ts` join `mysql`.`tablespace_files` `tsf` on ((`ts`.`id` = `tsf`.`tablespace_id`))); + diff --git a/IDEA/information_schema/INNODB_DATAFILES.sql b/IDEA/information_schema/INNODB_DATAFILES.sql new file mode 100644 index 00000000..f9195ab4 --- /dev/null +++ b/IDEA/information_schema/INNODB_DATAFILES.sql @@ -0,0 +1,7 @@ +create view information_schema.INNODB_DATAFILES as +select get_dd_tablespace_private_data(`ts`.`se_private_data`, 'id') AS `SPACE`, `ts_files`.`file_name` AS `PATH` +from (`mysql`.`tablespace_files` `ts_files` join `mysql`.`tablespaces` `ts` + on ((`ts`.`id` = `ts_files`.`tablespace_id`))) +where ((`ts`.`se_private_data` is not null) and (`ts`.`engine` = 'InnoDB') and (`ts`.`name` <> 'mysql') and + (`ts`.`name` <> 'innodb_temporary')); + diff --git a/IDEA/information_schema/INNODB_FIELDS.sql b/IDEA/information_schema/INNODB_FIELDS.sql new file mode 100644 index 00000000..980143e3 --- /dev/null +++ b/IDEA/information_schema/INNODB_FIELDS.sql @@ -0,0 +1,10 @@ +create view information_schema.INNODB_FIELDS as +select get_dd_index_private_data(`idx`.`se_private_data`, 'id') AS `INDEX_ID`, + `col`.`name` AS `NAME`, + (`fld`.`ordinal_position` - 1) AS `POS` +from (((`mysql`.`index_column_usage` `fld` join `mysql`.`columns` `col` + on ((`fld`.`column_id` = `col`.`id`))) join `mysql`.`indexes` `idx` + on ((`fld`.`index_id` = `idx`.`id`))) join `mysql`.`tables` `tbl` on ((`tbl`.`id` = `idx`.`table_id`))) +where ((`tbl`.`type` <> 'VIEW') and (`tbl`.`hidden` = 'Visible') and (0 = `fld`.`hidden`) and + (`tbl`.`se_private_id` is not null) and (`tbl`.`engine` = 'INNODB')); + diff --git a/IDEA/information_schema/INNODB_FOREIGN.sql b/IDEA/information_schema/INNODB_FOREIGN.sql new file mode 100644 index 00000000..d90b7c1d --- /dev/null +++ b/IDEA/information_schema/INNODB_FOREIGN.sql @@ -0,0 +1,16 @@ +create view information_schema.INNODB_FOREIGN as +select (concat(`sch`.`name`, '/', `fk`.`name`) collate utf8mb3_tolower_ci) AS `ID`, + concat(`sch`.`name`, '/', `tbl`.`name`) AS `FOR_NAME`, + concat(`fk`.`referenced_table_schema`, '/', `fk`.`referenced_table_name`) AS `REF_NAME`, + count(0) AS `N_COLS`, + (((((if((`fk`.`delete_rule` = 'CASCADE'), 1, 0) | if((`fk`.`delete_rule` = 'SET NULL'), 2, 0)) | + if((`fk`.`update_rule` = 'CASCADE'), 4, 0)) | if((`fk`.`update_rule` = 'SET NULL'), 8, 0)) | + if((`fk`.`delete_rule` = 'NO ACTION'), 16, 0)) | if((`fk`.`update_rule` = 'NO ACTION'), 32, 0)) AS `TYPE` +from (((`mysql`.`foreign_keys` `fk` join `mysql`.`tables` `tbl` + on ((`fk`.`table_id` = `tbl`.`id`))) join `mysql`.`schemata` `sch` + on ((`fk`.`schema_id` = `sch`.`id`))) join `mysql`.`foreign_key_column_usage` `col` + on ((`fk`.`id` = `col`.`foreign_key_id`))) +where ((`tbl`.`type` <> 'VIEW') and (`tbl`.`hidden` = 'Visible') and (`tbl`.`se_private_id` is not null) and + (`tbl`.`engine` = 'INNODB')) +group by `fk`.`id`; + diff --git a/IDEA/information_schema/INNODB_FOREIGN_COLS.sql b/IDEA/information_schema/INNODB_FOREIGN_COLS.sql new file mode 100644 index 00000000..42484175 --- /dev/null +++ b/IDEA/information_schema/INNODB_FOREIGN_COLS.sql @@ -0,0 +1,13 @@ +create view information_schema.INNODB_FOREIGN_COLS as +select (concat(`sch`.`name`, '/', `fk`.`name`) collate utf8mb3_tolower_ci) AS `ID`, + `col`.`name` AS `FOR_COL_NAME`, + `fk_col`.`referenced_column_name` AS `REF_COL_NAME`, + `fk_col`.`ordinal_position` AS `POS` +from ((((`mysql`.`foreign_key_column_usage` `fk_col` join `mysql`.`foreign_keys` `fk` + on ((`fk`.`id` = `fk_col`.`foreign_key_id`))) join `mysql`.`tables` `tbl` + on ((`fk`.`table_id` = `tbl`.`id`))) join `mysql`.`schemata` `sch` + on ((`fk`.`schema_id` = `sch`.`id`))) join `mysql`.`columns` `col` + on (((`tbl`.`id` = `col`.`table_id`) and (`fk_col`.`column_id` = `col`.`id`)))) +where ((`tbl`.`type` <> 'VIEW') and (`tbl`.`hidden` = 'Visible') and (`tbl`.`se_private_id` is not null) and + (`tbl`.`engine` = 'INNODB')); + diff --git a/IDEA/information_schema/INNODB_TABLESPACES_BRIEF.sql b/IDEA/information_schema/INNODB_TABLESPACES_BRIEF.sql new file mode 100644 index 00000000..d4a00895 --- /dev/null +++ b/IDEA/information_schema/INNODB_TABLESPACES_BRIEF.sql @@ -0,0 +1,13 @@ +create view information_schema.INNODB_TABLESPACES_BRIEF as +select get_dd_tablespace_private_data(`ts`.`se_private_data`, 'id') AS `SPACE`, + `ts`.`name` AS `NAME`, + `ts_files`.`file_name` AS `PATH`, + get_dd_tablespace_private_data(`ts`.`se_private_data`, 'flags') AS `FLAG`, + if((get_dd_tablespace_private_data(`ts`.`se_private_data`, 'id') = 0), 'System', + if((((get_dd_tablespace_private_data(`ts`.`se_private_data`, 'flags') & 2048) >> 11) <> 0), 'General', + 'Single')) AS `SPACE_TYPE` +from (`mysql`.`tablespace_files` `ts_files` join `mysql`.`tablespaces` `ts` + on ((`ts`.`id` = `ts_files`.`tablespace_id`))) +where ((`ts`.`se_private_data` is not null) and (`ts`.`engine` = 'InnoDB') and (`ts`.`name` <> 'mysql') and + (`ts`.`name` <> 'innodb_temporary')); + diff --git a/IDEA/information_schema/KEYWORDS.sql b/IDEA/information_schema/KEYWORDS.sql new file mode 100644 index 00000000..e10f6eec --- /dev/null +++ b/IDEA/information_schema/KEYWORDS.sql @@ -0,0 +1,6 @@ +create view information_schema.KEYWORDS as +select `j`.`word` AS `WORD`, `j`.`reserved` AS `RESERVED` +from json_table( + '[["ACCESSIBLE",1],["ACCOUNT",0],["ACTION",0],["ACTIVE",0],["ADD",1],["ADMIN",0],["AFTER",0],["AGAINST",0],["AGGREGATE",0],["ALGORITHM",0],["ALL",1],["ALTER",1],["ALWAYS",0],["ANALYZE",1],["AND",1],["ANY",0],["ARRAY",0],["AS",1],["ASC",1],["ASCII",0],["ASENSITIVE",1],["ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS",0],["AT",0],["ATTRIBUTE",0],["AUTHENTICATION",0],["AUTOEXTEND_SIZE",0],["AUTO_INCREMENT",0],["AVG",0],["AVG_ROW_LENGTH",0],["BACKUP",0],["BEFORE",1],["BEGIN",0],["BETWEEN",1],["BIGINT",1],["BINARY",1],["BINLOG",0],["BIT",0],["BLOB",1],["BLOCK",0],["BOOL",0],["BOOLEAN",0],["BOTH",1],["BTREE",0],["BUCKETS",0],["BULK",0],["BY",1],["BYTE",0],["CACHE",0],["CALL",1],["CASCADE",1],["CASCADED",0],["CASE",1],["CATALOG_NAME",0],["CHAIN",0],["CHALLENGE_RESPONSE",0],["CHANGE",1],["CHANGED",0],["CHANNEL",0],["CHAR",1],["CHARACTER",1],["CHARSET",0],["CHECK",1],["CHECKSUM",0],["CIPHER",0],["CLASS_ORIGIN",0],["CLIENT",0],["CLONE",0],["CLOSE",0],["COALESCE",0],["CODE",0],["COLLATE",1],["COLLATION",0],["COLUMN",1],["COLUMNS",0],["COLUMN_FORMAT",0],["COLUMN_NAME",0],["COMMENT",0],["COMMIT",0],["COMMITTED",0],["COMPACT",0],["COMPLETION",0],["COMPONENT",0],["COMPRESSED",0],["COMPRESSION",0],["CONCURRENT",0],["CONDITION",1],["CONNECTION",0],["CONSISTENT",0],["CONSTRAINT",1],["CONSTRAINT_CATALOG",0],["CONSTRAINT_NAME",0],["CONSTRAINT_SCHEMA",0],["CONTAINS",0],["CONTEXT",0],["CONTINUE",1],["CONVERT",1],["CPU",0],["CREATE",1],["CROSS",1],["CUBE",1],["CUME_DIST",1],["CURRENT",0],["CURRENT_DATE",1],["CURRENT_TIME",1],["CURRENT_TIMESTAMP",1],["CURRENT_USER",1],["CURSOR",1],["CURSOR_NAME",0],["DATA",0],["DATABASE",1],["DATABASES",1],["DATAFILE",0],["DATE",0],["DATETIME",0],["DAY",0],["DAY_HOUR",1],["DAY_MICROSECOND",1],["DAY_MINUTE",1],["DAY_SECOND",1],["DEALLOCATE",0],["DEC",1],["DECIMAL",1],["DECLARE",1],["DEFAULT",1],["DEFAULT_AUTH",0],["DEFINER",0],["DEFINITION",0],["DELAYED",1],["DELAY_KEY_WRITE",0],["DELETE",1],["DENSE_RANK",1],["DESC",1],["DESCRIBE",1],["DESCRIPTION",0],["DETERMINISTIC",1],["DIAGNOSTICS",0],["DIRECTORY",0],["DISABLE",0],["DISCARD",0],["DISK",0],["DISTINCT",1],["DISTINCTROW",1],["DIV",1],["DO",0],["DOUBLE",1],["DROP",1],["DUAL",1],["DUMPFILE",0],["DUPLICATE",0],["DYNAMIC",0],["EACH",1],["ELSE",1],["ELSEIF",1],["EMPTY",1],["ENABLE",0],["ENCLOSED",1],["ENCRYPTION",0],["END",0],["ENDS",0],["ENFORCED",0],["ENGINE",0],["ENGINES",0],["ENGINE_ATTRIBUTE",0],["ENUM",0],["ERROR",0],["ERRORS",0],["ESCAPE",0],["ESCAPED",1],["EVENT",0],["EVENTS",0],["EVERY",0],["EXCEPT",1],["EXCHANGE",0],["EXCLUDE",0],["EXECUTE",0],["EXISTS",1],["EXIT",1],["EXPANSION",0],["EXPIRE",0],["EXPLAIN",1],["EXPORT",0],["EXTENDED",0],["EXTENT_SIZE",0],["FACTOR",0],["FAILED_LOGIN_ATTEMPTS",0],["FALSE",1],["FAST",0],["FAULTS",0],["FETCH",1],["FIELDS",0],["FILE",0],["FILE_BLOCK_SIZE",0],["FILTER",0],["FINISH",0],["FIRST",0],["FIRST_VALUE",1],["FIXED",0],["FLOAT",1],["FLOAT4",1],["FLOAT8",1],["FLUSH",0],["FOLLOWING",0],["FOLLOWS",0],["FOR",1],["FORCE",1],["FOREIGN",1],["FORMAT",0],["FOUND",0],["FROM",1],["FULL",0],["FULLTEXT",1],["FUNCTION",1],["GENERAL",0],["GENERATE",0],["GENERATED",1],["GEOMCOLLECTION",0],["GEOMETRY",0],["GEOMETRYCOLLECTION",0],["GET",1],["GET_FORMAT",0],["GET_MASTER_PUBLIC_KEY",0],["GET_SOURCE_PUBLIC_KEY",0],["GLOBAL",0],["GRANT",1],["GRANTS",0],["GROUP",1],["GROUPING",1],["GROUPS",1],["GROUP_REPLICATION",0],["GTID_ONLY",0],["HANDLER",0],["HASH",0],["HAVING",1],["HELP",0],["HIGH_PRIORITY",1],["HISTOGRAM",0],["HISTORY",0],["HOST",0],["HOSTS",0],["HOUR",0],["HOUR_MICROSECOND",1],["HOUR_MINUTE",1],["HOUR_SECOND",1],["IDENTIFIED",0],["IF",1],["IGNORE",1],["IGNORE_SERVER_IDS",0],["IMPORT",0],["IN",1],["INACTIVE",0],["INDEX",1],["INDEXES",0],["INFILE",1],["INITIAL",0],["INITIAL_SIZE",0],["INITIATE",0],["INNER",1],["INOUT",1],["INSENSITIVE",1],["INSERT",1],["INSERT_METHOD",0],["INSTALL",0],["INSTANCE",0],["INT",1],["INT1",1],["INT2",1],["INT3",1],["INT4",1],["INT8",1],["INTEGER",1],["INTERSECT",1],["INTERVAL",1],["INTO",1],["INVISIBLE",0],["INVOKER",0],["IO",0],["IO_AFTER_GTIDS",1],["IO_BEFORE_GTIDS",1],["IO_THREAD",0],["IPC",0],["IS",1],["ISOLATION",0],["ISSUER",0],["ITERATE",1],["JOIN",1],["JSON",0],["JSON_TABLE",1],["JSON_VALUE",0],["KEY",1],["KEYRING",0],["KEYS",1],["KEY_BLOCK_SIZE",0],["KILL",1],["LAG",1],["LANGUAGE",0],["LAST",0],["LAST_VALUE",1],["LATERAL",1],["LEAD",1],["LEADING",1],["LEAVE",1],["LEAVES",0],["LEFT",1],["LESS",0],["LEVEL",0],["LIKE",1],["LIMIT",1],["LINEAR",1],["LINES",1],["LINESTRING",0],["LIST",0],["LOAD",1],["LOCAL",0],["LOCALTIME",1],["LOCALTIMESTAMP",1],["LOCK",1],["LOCKED",0],["LOCKS",0],["LOGFILE",0],["LOGS",0],["LONG",1],["LONGBLOB",1],["LONGTEXT",1],["LOOP",1],["LOW_PRIORITY",1],["MASTER",0],["MASTER_AUTO_POSITION",0],["MASTER_BIND",1],["MASTER_COMPRESSION_ALGORITHMS",0],["MASTER_CONNECT_RETRY",0],["MASTER_DELAY",0],["MASTER_HEARTBEAT_PERIOD",0],["MASTER_HOST",0],["MASTER_LOG_FILE",0],["MASTER_LOG_POS",0],["MASTER_PASSWORD",0],["MASTER_PORT",0],["MASTER_PUBLIC_KEY_PATH",0],["MASTER_RETRY_COUNT",0],["MASTER_SSL",0],["MASTER_SSL_CA",0],["MASTER_SSL_CAPATH",0],["MASTER_SSL_CERT",0],["MASTER_SSL_CIPHER",0],["MASTER_SSL_CRL",0],["MASTER_SSL_CRLPATH",0],["MASTER_SSL_KEY",0],["MASTER_SSL_VERIFY_SERVER_CERT",1],["MASTER_TLS_CIPHERSUITES",0],["MASTER_TLS_VERSION",0],["MASTER_USER",0],["MASTER_ZSTD_COMPRESSION_LEVEL",0],["MATCH",1],["MAXVALUE",1],["MAX_CONNECTIONS_PER_HOUR",0],["MAX_QUERIES_PER_HOUR",0],["MAX_ROWS",0],["MAX_SIZE",0],["MAX_UPDATES_PER_HOUR",0],["MAX_USER_CONNECTIONS",0],["MEDIUM",0],["MEDIUMBLOB",1],["MEDIUMINT",1],["MEDIUMTEXT",1],["MEMBER",0],["MEMORY",0],["MERGE",0],["MESSAGE_TEXT",0],["MICROSECOND",0],["MIDDLEINT",1],["MIGRATE",0],["MINUTE",0],["MINUTE_MICROSECOND",1],["MINUTE_SECOND",1],["MIN_ROWS",0],["MOD",1],["MODE",0],["MODIFIES",1],["MODIFY",0],["MONTH",0],["MULTILINESTRING",0],["MULTIPOINT",0],["MULTIPOLYGON",0],["MUTEX",0],["MYSQL_ERRNO",0],["NAME",0],["NAMES",0],["NATIONAL",0],["NATURAL",1],["NCHAR",0],["NDB",0],["NDBCLUSTER",0],["NESTED",0],["NETWORK_NAMESPACE",0],["NEVER",0],["NEW",0],["NEXT",0],["NO",0],["NODEGROUP",0],["NONE",0],["NOT",1],["NOWAIT",0],["NO_WAIT",0],["NO_WRITE_TO_BINLOG",1],["NTH_VALUE",1],["NTILE",1],["NULL",1],["NULLS",0],["NUMBER",0],["NUMERIC",1],["NVARCHAR",0],["OF",1],["OFF",0],["OFFSET",0],["OJ",0],["OLD",0],["ON",1],["ONE",0],["ONLY",0],["OPEN",0],["OPTIMIZE",1],["OPTIMIZER_COSTS",1],["OPTION",1],["OPTIONAL",0],["OPTIONALLY",1],["OPTIONS",0],["OR",1],["ORDER",1],["ORDINALITY",0],["ORGANIZATION",0],["OTHERS",0],["OUT",1],["OUTER",1],["OUTFILE",1],["OVER",1],["OWNER",0],["PACK_KEYS",0],["PAGE",0],["PARSER",0],["PARTIAL",0],["PARTITION",1],["PARTITIONING",0],["PARTITIONS",0],["PASSWORD",0],["PASSWORD_LOCK_TIME",0],["PATH",0],["PERCENT_RANK",1],["PERSIST",0],["PERSIST_ONLY",0],["PHASE",0],["PLUGIN",0],["PLUGINS",0],["PLUGIN_DIR",0],["POINT",0],["POLYGON",0],["PORT",0],["PRECEDES",0],["PRECEDING",0],["PRECISION",1],["PREPARE",0],["PRESERVE",0],["PREV",0],["PRIMARY",1],["PRIVILEGES",0],["PRIVILEGE_CHECKS_USER",0],["PROCEDURE",1],["PROCESS",0],["PROCESSLIST",0],["PROFILE",0],["PROFILES",0],["PROXY",0],["PURGE",1],["QUARTER",0],["QUERY",0],["QUICK",0],["RANDOM",0],["RANGE",1],["RANK",1],["READ",1],["READS",1],["READ_ONLY",0],["READ_WRITE",1],["REAL",1],["REBUILD",0],["RECOVER",0],["RECURSIVE",1],["REDO_BUFFER_SIZE",0],["REDUNDANT",0],["REFERENCE",0],["REFERENCES",1],["REGEXP",1],["REGISTRATION",0],["RELAY",0],["RELAYLOG",0],["RELAY_LOG_FILE",0],["RELAY_LOG_POS",0],["RELAY_THREAD",0],["RELEASE",1],["RELOAD",0],["REMOVE",0],["RENAME",1],["REORGANIZE",0],["REPAIR",0],["REPEAT",1],["REPEATABLE",0],["REPLACE",1],["REPLICA",0],["REPLICAS",0],["REPLICATE_DO_DB",0],["REPLICATE_DO_TABLE",0],["REPLICATE_IGNORE_DB",0],["REPLICATE_IGNORE_TABLE",0],["REPLICATE_REWRITE_DB",0],["REPLICATE_WILD_DO_TABLE",0],["REPLICATE_WILD_IGNORE_TABLE",0],["REPLICATION",0],["REQUIRE",1],["REQUIRE_ROW_FORMAT",0],["REQUIRE_TABLE_PRIMARY_KEY_CHECK",0],["RESET",0],["RESIGNAL",1],["RESOURCE",0],["RESPECT",0],["RESTART",0],["RESTORE",0],["RESTRICT",1],["RESUME",0],["RETAIN",0],["RETURN",1],["RETURNED_SQLSTATE",0],["RETURNING",0],["RETURNS",0],["REUSE",0],["REVERSE",0],["REVOKE",1],["RIGHT",1],["RLIKE",1],["ROLE",0],["ROLLBACK",0],["ROLLUP",0],["ROTATE",0],["ROUTINE",0],["ROW",1],["ROWS",1],["ROW_COUNT",0],["ROW_FORMAT",0],["ROW_NUMBER",1],["RTREE",0],["SAVEPOINT",0],["SCHEDULE",0],["SCHEMA",1],["SCHEMAS",1],["SCHEMA_NAME",0],["SECOND",0],["SECONDARY",0],["SECONDARY_ENGINE",0],["SECONDARY_ENGINE_ATTRIBUTE",0],["SECONDARY_LOAD",0],["SECONDARY_UNLOAD",0],["SECOND_MICROSECOND",1],["SECURITY",0],["SELECT",1],["SENSITIVE",1],["SEPARATOR",1],["SERIAL",0],["SERIALIZABLE",0],["SERVER",0],["SESSION",0],["SET",1],["SHARE",0],["SHOW",1],["SHUTDOWN",0],["SIGNAL",1],["SIGNED",0],["SIMPLE",0],["SKIP",0],["SLAVE",0],["SLOW",0],["SMALLINT",1],["SNAPSHOT",0],["SOCKET",0],["SOME",0],["SONAME",0],["SOUNDS",0],["SOURCE",0],["SOURCE_AUTO_POSITION",0],["SOURCE_BIND",0],["SOURCE_COMPRESSION_ALGORITHMS",0],["SOURCE_CONNECTION_AUTO_FAILOVER",0],["SOURCE_CONNECT_RETRY",0],["SOURCE_DELAY",0],["SOURCE_HEARTBEAT_PERIOD",0],["SOURCE_HOST",0],["SOURCE_LOG_FILE",0],["SOURCE_LOG_POS",0],["SOURCE_PASSWORD",0],["SOURCE_PORT",0],["SOURCE_PUBLIC_KEY_PATH",0],["SOURCE_RETRY_COUNT",0],["SOURCE_SSL",0],["SOURCE_SSL_CA",0],["SOURCE_SSL_CAPATH",0],["SOURCE_SSL_CERT",0],["SOURCE_SSL_CIPHER",0],["SOURCE_SSL_CRL",0],["SOURCE_SSL_CRLPATH",0],["SOURCE_SSL_KEY",0],["SOURCE_SSL_VERIFY_SERVER_CERT",0],["SOURCE_TLS_CIPHERSUITES",0],["SOURCE_TLS_VERSION",0],["SOURCE_USER",0],["SOURCE_ZSTD_COMPRESSION_LEVEL",0],["SPATIAL",1],["SPECIFIC",1],["SQL",1],["SQLEXCEPTION",1],["SQLSTATE",1],["SQLWARNING",1],["SQL_AFTER_GTIDS",0],["SQL_AFTER_MTS_GAPS",0],["SQL_BEFORE_GTIDS",0],["SQL_BIG_RESULT",1],["SQL_BUFFER_RESULT",0],["SQL_CALC_FOUND_ROWS",1],["SQL_NO_CACHE",0],["SQL_SMALL_RESULT",1],["SQL_THREAD",0],["SQL_TSI_DAY",0],["SQL_TSI_HOUR",0],["SQL_TSI_MINUTE",0],["SQL_TSI_MONTH",0],["SQL_TSI_QUARTER",0],["SQL_TSI_SECOND",0],["SQL_TSI_WEEK",0],["SQL_TSI_YEAR",0],["SRID",0],["SSL",1],["STACKED",0],["START",0],["STARTING",1],["STARTS",0],["STATS_AUTO_RECALC",0],["STATS_PERSISTENT",0],["STATS_SAMPLE_PAGES",0],["STATUS",0],["STOP",0],["STORAGE",0],["STORED",1],["STRAIGHT_JOIN",1],["STREAM",0],["STRING",0],["SUBCLASS_ORIGIN",0],["SUBJECT",0],["SUBPARTITION",0],["SUBPARTITIONS",0],["SUPER",0],["SUSPEND",0],["SWAPS",0],["SWITCHES",0],["SYSTEM",1],["TABLE",1],["TABLES",0],["TABLESPACE",0],["TABLE_CHECKSUM",0],["TABLE_NAME",0],["TEMPORARY",0],["TEMPTABLE",0],["TERMINATED",1],["TEXT",0],["THAN",0],["THEN",1],["THREAD_PRIORITY",0],["TIES",0],["TIME",0],["TIMESTAMP",0],["TIMESTAMPADD",0],["TIMESTAMPDIFF",0],["TINYBLOB",1],["TINYINT",1],["TINYTEXT",1],["TLS",0],["TO",1],["TRAILING",1],["TRANSACTION",0],["TRIGGER",1],["TRIGGERS",0],["TRUE",1],["TRUNCATE",0],["TYPE",0],["TYPES",0],["UNBOUNDED",0],["UNCOMMITTED",0],["UNDEFINED",0],["UNDO",1],["UNDOFILE",0],["UNDO_BUFFER_SIZE",0],["UNICODE",0],["UNINSTALL",0],["UNION",1],["UNIQUE",1],["UNKNOWN",0],["UNLOCK",1],["UNREGISTER",0],["UNSIGNED",1],["UNTIL",0],["UPDATE",1],["UPGRADE",0],["URL",0],["USAGE",1],["USE",1],["USER",0],["USER_RESOURCES",0],["USE_FRM",0],["USING",1],["UTC_DATE",1],["UTC_TIME",1],["UTC_TIMESTAMP",1],["VALIDATION",0],["VALUE",0],["VALUES",1],["VARBINARY",1],["VARCHAR",1],["VARCHARACTER",1],["VARIABLES",0],["VARYING",1],["VCPU",0],["VIEW",0],["VIRTUAL",1],["VISIBLE",0],["WAIT",0],["WARNINGS",0],["WEEK",0],["WEIGHT_STRING",0],["WHEN",1],["WHERE",1],["WHILE",1],["WINDOW",1],["WITH",1],["WITHOUT",0],["WORK",0],["WRAPPER",0],["WRITE",1],["X509",0],["XA",0],["XID",0],["XML",0],["XOR",1],["YEAR",0],["YEAR_MONTH",1],["ZEROFILL",1],["ZONE",0]]', + '$[*]' columns (`word` varchar(128) character set utf8mb4 path '$[0]', `reserved` int path '$[1]')) `j`; + diff --git a/IDEA/information_schema/KEY_COLUMN_USAGE.sql b/IDEA/information_schema/KEY_COLUMN_USAGE.sql new file mode 100644 index 00000000..623d48a0 --- /dev/null +++ b/IDEA/information_schema/KEY_COLUMN_USAGE.sql @@ -0,0 +1,45 @@ +create view information_schema.KEY_COLUMN_USAGE as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `CONSTRAINT_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `CONSTRAINT_SCHEMA`, + `constraints`.`CONSTRAINT_NAME` AS `CONSTRAINT_NAME`, + (`cat`.`name` collate utf8mb3_tolower_ci) AS `TABLE_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `TABLE_SCHEMA`, + (`tbl`.`name` collate utf8mb3_tolower_ci) AS `TABLE_NAME`, + (`col`.`name` collate utf8mb3_tolower_ci) AS `COLUMN_NAME`, + `constraints`.`ORDINAL_POSITION` AS `ORDINAL_POSITION`, + `constraints`.`POSITION_IN_UNIQUE_CONSTRAINT` AS `POSITION_IN_UNIQUE_CONSTRAINT`, + `constraints`.`REFERENCED_TABLE_SCHEMA` AS `REFERENCED_TABLE_SCHEMA`, + `constraints`.`REFERENCED_TABLE_NAME` AS `REFERENCED_TABLE_NAME`, + `constraints`.`REFERENCED_COLUMN_NAME` AS `REFERENCED_COLUMN_NAME` +from (((`mysql`.`tables` `tbl` join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join (lateral (select `idx`.`name` AS `CONSTRAINT_NAME`, + `icu`.`ordinal_position` AS `ORDINAL_POSITION`, + NULL AS `POSITION_IN_UNIQUE_CONSTRAINT`, + NULL AS `REFERENCED_TABLE_SCHEMA`, + NULL AS `REFERENCED_TABLE_NAME`, + NULL AS `REFERENCED_COLUMN_NAME`, + `icu`.`column_id` AS `column_id`, + ((0 <> `idx`.`hidden`) or (0 <> `icu`.`hidden`)) AS `HIDDEN` + from (`mysql`.`indexes` `idx` join `mysql`.`index_column_usage` `icu` + on ((`icu`.`index_id` = `idx`.`id`))) + where ((`idx`.`table_id` = `tbl`.`id`) and + (`idx`.`type` in ('PRIMARY', 'UNIQUE'))) + union all + select (`fk`.`name` collate utf8mb3_tolower_ci) AS `CONSTRAINT_NAME`, + `fkcu`.`ordinal_position` AS `ORDINAL_POSITION`, + `fkcu`.`ordinal_position` AS `POSITION_IN_UNIQUE_CONSTRAINT`, + `fk`.`referenced_table_schema` AS `REFERENCED_TABLE_SCHEMA`, + `fk`.`referenced_table_name` AS `REFERENCED_TABLE_NAME`, + `fkcu`.`referenced_column_name` AS `REFERENCED_COLUMN_NAME`, + `fkcu`.`column_id` AS `column_id`, + false AS `HIDDEN` + from (`mysql`.`foreign_keys` `fk` join `mysql`.`foreign_key_column_usage` `fkcu` + on ((`fkcu`.`foreign_key_id` = `fk`.`id`))) + where (`fk`.`table_id` = `tbl`.`id`)) `constraints` join `mysql`.`columns` `col` + on ((`constraints`.`column_id` = `col`.`id`)))) +where ((0 <> can_access_column(`sch`.`name`, `tbl`.`name`, `col`.`name`)) and (0 <> is_visible_dd_object(`tbl`.`hidden`, + ((`col`.`hidden` not in ('Visible', 'User')) or + (0 <> `constraints`.`HIDDEN`)), + `col`.`options`))); + diff --git a/IDEA/information_schema/PARAMETERS.sql b/IDEA/information_schema/PARAMETERS.sql new file mode 100644 index 00000000..de340f2e --- /dev/null +++ b/IDEA/information_schema/PARAMETERS.sql @@ -0,0 +1,47 @@ +create view information_schema.PARAMETERS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `SPECIFIC_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `SPECIFIC_SCHEMA`, + `rtn`.`name` AS `SPECIFIC_NAME`, + if((`rtn`.`type` = 'FUNCTION'), (`prm`.`ordinal_position` - 1), `prm`.`ordinal_position`) AS `ORDINAL_POSITION`, + if(((`rtn`.`type` = 'FUNCTION') and (`prm`.`ordinal_position` = 1)), NULL, `prm`.`mode`) AS `PARAMETER_MODE`, + if(((`rtn`.`type` = 'FUNCTION') and (`prm`.`ordinal_position` = 1)), NULL, `prm`.`name`) AS `PARAMETER_NAME`, + substring_index(substring_index(`prm`.`data_type_utf8`, '(', 1), ' ', 1) AS `DATA_TYPE`, + internal_dd_char_length(`prm`.`data_type`, `prm`.`char_length`, `col`.`name`, + 0) AS `CHARACTER_MAXIMUM_LENGTH`, + internal_dd_char_length(`prm`.`data_type`, `prm`.`char_length`, `col`.`name`, + 1) AS `CHARACTER_OCTET_LENGTH`, + `prm`.`numeric_precision` AS `NUMERIC_PRECISION`, + if((`prm`.`numeric_precision` is null), NULL, ifnull(`prm`.`numeric_scale`, 0)) AS `NUMERIC_SCALE`, + `prm`.`datetime_precision` AS `DATETIME_PRECISION`, + (case `prm`.`data_type` + when 'MYSQL_TYPE_STRING' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_VAR_STRING' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_VARCHAR' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_TINY_BLOB' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_MEDIUM_BLOB' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_BLOB' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_LONG_BLOB' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_ENUM' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + when 'MYSQL_TYPE_SET' then if((`cs`.`name` = 'binary'), NULL, `cs`.`name`) + else NULL end) AS `CHARACTER_SET_NAME`, + (case `prm`.`data_type` + when 'MYSQL_TYPE_STRING' then if((`cs`.`name` = 'binary'), NULL, `col`.`name`) + when 'MYSQL_TYPE_VAR_STRING' then if((`cs`.`name` = 'binary'), NULL, `col`.`name`) + when 'MYSQL_TYPE_VARCHAR' then if((`cs`.`name` = 'binary'), NULL, `col`.`name`) + when 'MYSQL_TYPE_TINY_BLOB' then if((`cs`.`name` = 'binary'), NULL, `col`.`name`) + when 'MYSQL_TYPE_MEDIUM_BLOB' then if((`cs`.`name` = 'binary'), NULL, `col`.`name`) + when 'MYSQL_TYPE_BLOB' then if((`cs`.`name` = 'binary'), NULL, `col`.`name`) + when 'MYSQL_TYPE_LONG_BLOB' then if((`cs`.`name` = 'binary'), NULL, `col`.`name`) + when 'MYSQL_TYPE_ENUM' then if((`cs`.`name` = 'binary'), NULL, `col`.`name`) + when 'MYSQL_TYPE_SET' then if((`cs`.`name` = 'binary'), NULL, `col`.`name`) + else NULL end) AS `COLLATION_NAME`, + `prm`.`data_type_utf8` AS `DTD_IDENTIFIER`, + `rtn`.`type` AS `ROUTINE_TYPE` +from (((((`mysql`.`parameters` `prm` join `mysql`.`routines` `rtn` + on ((`prm`.`routine_id` = `rtn`.`id`))) join `mysql`.`schemata` `sch` + on ((`rtn`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`collations` `col` + on ((`prm`.`collation_id` = `col`.`id`))) join `mysql`.`character_sets` `cs` + on ((`col`.`character_set_id` = `cs`.`id`))) +where (0 <> can_access_routine(`sch`.`name`, `rtn`.`name`, `rtn`.`type`, `rtn`.`definer`, false)); + diff --git a/IDEA/information_schema/PARTITIONS.sql b/IDEA/information_schema/PARTITIONS.sql new file mode 100644 index 00000000..165ebc91 --- /dev/null +++ b/IDEA/information_schema/PARTITIONS.sql @@ -0,0 +1,126 @@ +create view information_schema.PARTITIONS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `TABLE_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `TABLE_SCHEMA`, + `tbl`.`name` AS `TABLE_NAME`, + `part`.`name` AS `PARTITION_NAME`, + `sub_part`.`name` AS `SUBPARTITION_NAME`, + (`part`.`number` + 1) AS `PARTITION_ORDINAL_POSITION`, + (`sub_part`.`number` + 1) AS `SUBPARTITION_ORDINAL_POSITION`, + (case `tbl`.`partition_type` + when 'HASH' then 'HASH' + when 'RANGE' then 'RANGE' + when 'LIST' then 'LIST' + when 'AUTO' then 'AUTO' + when 'KEY_51' then 'KEY' + when 'KEY_55' then 'KEY' + when 'LINEAR_KEY_51' then 'LINEAR KEY' + when 'LINEAR_KEY_55' then 'LINEAR KEY' + when 'LINEAR_HASH' then 'LINEAR HASH' + when 'RANGE_COLUMNS' then 'RANGE COLUMNS' + when 'LIST_COLUMNS' then 'LIST COLUMNS' + else NULL end) AS `PARTITION_METHOD`, + (case `tbl`.`subpartition_type` + when 'HASH' then 'HASH' + when 'RANGE' then 'RANGE' + when 'LIST' then 'LIST' + when 'AUTO' then 'AUTO' + when 'KEY_51' then 'KEY' + when 'KEY_55' then 'KEY' + when 'LINEAR_KEY_51' then 'LINEAR KEY' + when 'LINEAR_KEY_55' then 'LINEAR KEY' + when 'LINEAR_HASH' then 'LINEAR HASH' + when 'RANGE_COLUMNS' then 'RANGE COLUMNS' + when 'LIST_COLUMNS' then 'LIST COLUMNS' + else NULL end) AS `SUBPARTITION_METHOD`, + `tbl`.`partition_expression_utf8` AS `PARTITION_EXPRESSION`, + `tbl`.`subpartition_expression_utf8` AS `SUBPARTITION_EXPRESSION`, + `part`.`description_utf8` AS `PARTITION_DESCRIPTION`, + internal_table_rows(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), if((`sub_part`.`name` is null), + if((`part`.`name` is null), + `tbl`.`se_private_data`, + `part_ts`.`se_private_data`), + `sub_part_ts`.`se_private_data`), 0, + 0, + ifnull(`sub_part`.`name`, `part`.`name`)) AS `TABLE_ROWS`, + internal_avg_row_length(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), if((`sub_part`.`name` is null), + if((`part`.`name` is null), + `tbl`.`se_private_data`, + `part_ts`.`se_private_data`), + `sub_part_ts`.`se_private_data`), + 0, 0, + ifnull(`sub_part`.`name`, `part`.`name`)) AS `AVG_ROW_LENGTH`, + internal_data_length(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), if((`sub_part`.`name` is null), + if((`part`.`name` is null), + `tbl`.`se_private_data`, + `part_ts`.`se_private_data`), + `sub_part_ts`.`se_private_data`), + 0, 0, + ifnull(`sub_part`.`name`, `part`.`name`)) AS `DATA_LENGTH`, + internal_max_data_length(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), if((`sub_part`.`name` is null), + if((`part`.`name` is null), + `tbl`.`se_private_data`, + `part_ts`.`se_private_data`), + `sub_part_ts`.`se_private_data`), + 0, 0, + ifnull(`sub_part`.`name`, `part`.`name`)) AS `MAX_DATA_LENGTH`, + internal_index_length(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), if((`sub_part`.`name` is null), + if((`part`.`name` is null), + `tbl`.`se_private_data`, + `part_ts`.`se_private_data`), + `sub_part_ts`.`se_private_data`), + 0, 0, + ifnull(`sub_part`.`name`, `part`.`name`)) AS `INDEX_LENGTH`, + internal_data_free(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), if((`sub_part`.`name` is null), + if((`part`.`name` is null), + `tbl`.`se_private_data`, + `part_ts`.`se_private_data`), + `sub_part_ts`.`se_private_data`), 0, + 0, + ifnull(`sub_part`.`name`, `part`.`name`)) AS `DATA_FREE`, + `tbl`.`created` AS `CREATE_TIME`, + internal_update_time(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), if((`sub_part`.`name` is null), + if((`part`.`name` is null), + `tbl`.`se_private_data`, + `part_ts`.`se_private_data`), + `sub_part_ts`.`se_private_data`), + 0, 0, + ifnull(`sub_part`.`name`, `part`.`name`)) AS `UPDATE_TIME`, + internal_check_time(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), if((`sub_part`.`name` is null), + if((`part`.`name` is null), + `tbl`.`se_private_data`, + `part_ts`.`se_private_data`), + `sub_part_ts`.`se_private_data`), 0, + 0, + ifnull(`sub_part`.`name`, `part`.`name`)) AS `CHECK_TIME`, + internal_checksum(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), if((`sub_part`.`name` is null), + if((`part`.`name` is null), + `tbl`.`se_private_data`, + `part_ts`.`se_private_data`), + `sub_part_ts`.`se_private_data`), 0, + 0, + ifnull(`sub_part`.`name`, `part`.`name`)) AS `CHECKSUM`, + if((`sub_part`.`name` is null), ifnull(`part`.`comment`, ''), + ifnull(`sub_part`.`comment`, '')) AS `PARTITION_COMMENT`, + if((`part`.`name` is null), '', + internal_get_partition_nodegroup(if((`sub_part`.`name` is null), `part`.`options`, + `sub_part`.`options`))) AS `NODEGROUP`, + ifnull(`sub_part_ts`.`name`, `part_ts`.`name`) AS `TABLESPACE_NAME` +from ((((((`mysql`.`tables` `tbl` join `mysql`.`schemata` `sch` + on ((`sch`.`id` = `tbl`.`schema_id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) left join `mysql`.`table_partitions` `part` + on ((`part`.`table_id` = `tbl`.`id`))) left join `mysql`.`table_partitions` `sub_part` + on ((`sub_part`.`parent_partition_id` = `part`.`id`))) left join `mysql`.`tablespaces` `part_ts` + on ((`part_ts`.`id` = `part`.`tablespace_id`))) left join `mysql`.`tablespaces` `sub_part_ts` + on (((`sub_part`.`tablespace_id` is not null) and (`sub_part_ts`.`id` = `sub_part`.`tablespace_id`)))) +where ((0 <> can_access_table(`sch`.`name`, `tbl`.`name`)) and (0 <> is_visible_dd_object(`tbl`.`hidden`)) and + (`part`.`parent_partition_id` is null)); + diff --git a/IDEA/information_schema/REFERENTIAL_CONSTRAINTS.sql b/IDEA/information_schema/REFERENTIAL_CONSTRAINTS.sql new file mode 100644 index 00000000..9b564507 --- /dev/null +++ b/IDEA/information_schema/REFERENTIAL_CONSTRAINTS.sql @@ -0,0 +1,17 @@ +create view information_schema.REFERENTIAL_CONSTRAINTS as +select `cat`.`name` AS `CONSTRAINT_CATALOG`, + `sch`.`name` AS `CONSTRAINT_SCHEMA`, + (`fk`.`name` collate utf8mb3_tolower_ci) AS `CONSTRAINT_NAME`, + `fk`.`referenced_table_catalog` AS `UNIQUE_CONSTRAINT_CATALOG`, + `fk`.`referenced_table_schema` AS `UNIQUE_CONSTRAINT_SCHEMA`, + `fk`.`unique_constraint_name` AS `UNIQUE_CONSTRAINT_NAME`, + `fk`.`match_option` AS `MATCH_OPTION`, + `fk`.`update_rule` AS `UPDATE_RULE`, + `fk`.`delete_rule` AS `DELETE_RULE`, + `tbl`.`name` AS `TABLE_NAME`, + `fk`.`referenced_table_name` AS `REFERENCED_TABLE_NAME` +from (((`mysql`.`foreign_keys` `fk` join `mysql`.`tables` `tbl` + on ((`fk`.`table_id` = `tbl`.`id`))) join `mysql`.`schemata` `sch` + on ((`fk`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` on ((`cat`.`id` = `sch`.`catalog_id`))) +where ((0 <> can_access_table(`sch`.`name`, `tbl`.`name`)) and (0 <> is_visible_dd_object(`tbl`.`hidden`))); + diff --git a/IDEA/information_schema/RESOURCE_GROUPS.sql b/IDEA/information_schema/RESOURCE_GROUPS.sql new file mode 100644 index 00000000..4bb9a602 --- /dev/null +++ b/IDEA/information_schema/RESOURCE_GROUPS.sql @@ -0,0 +1,9 @@ +create view information_schema.RESOURCE_GROUPS as +select `res`.`resource_group_name` AS `RESOURCE_GROUP_NAME`, + `res`.`resource_group_type` AS `RESOURCE_GROUP_TYPE`, + `res`.`resource_group_enabled` AS `RESOURCE_GROUP_ENABLED`, + convert_cpu_id_mask(`res`.`cpu_id_mask`) AS `VCPU_IDS`, + `res`.`thread_priority` AS `THREAD_PRIORITY` +from `mysql`.`resource_groups` `res` +where (0 <> can_access_resource_group(`res`.`resource_group_name`)); + diff --git a/IDEA/information_schema/ROLE_COLUMN_GRANTS.sql b/IDEA/information_schema/ROLE_COLUMN_GRANTS.sql new file mode 100644 index 00000000..86f84eeb --- /dev/null +++ b/IDEA/information_schema/ROLE_COLUMN_GRANTS.sql @@ -0,0 +1,76 @@ +create view information_schema.ROLE_COLUMN_GRANTS as +with recursive `role_graph` (`c_parent_user`, `c_parent_host`, `c_from_user`, `c_from_host`, `c_to_user`, `c_to_host`, + `role_path`, `c_with_admin`, `c_enabled`) + as (select internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + cast('' as char(64) charset utf8mb4) AS `CAST('' as CHAR(64) CHARSET utf8mb4)`, + cast('' as char(255) charset utf8mb4) AS `CAST('' as CHAR(255) CHARSET utf8mb4)`, + cast(sha2(concat(quote(internal_get_username()), '@', quote(internal_get_hostname())), + 256) as char(17000) charset utf8mb4) AS `CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4)`, + cast('N' as char(1) charset utf8mb4) AS `CAST('N' as CHAR(1) CHARSET utf8mb4)`, + false AS `FALSE` + union + select internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + `mandatory_roles`.`ROLE_NAME` AS `ROLE_NAME`, + `mandatory_roles`.`ROLE_HOST` AS `ROLE_HOST`, + internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + cast(sha2(concat(quote(`mandatory_roles`.`ROLE_NAME`), '@', + convert(quote(`mandatory_roles`.`ROLE_HOST`) using utf8mb4)), + 256) as char(17000) charset utf8mb4) AS `CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4)`, + cast('N' as char(1) charset utf8mb4) AS `CAST('N' as CHAR(1) CHARSET utf8mb4)`, + false AS `FALSE` + from json_table(internal_get_mandatory_roles_json(), '$[*]' + columns (`ROLE_NAME` varchar(255) character set utf8mb4 path '$.ROLE_NAME', `ROLE_HOST` varchar(255) character set utf8mb4 path '$.ROLE_HOST')) `mandatory_roles` + where concat(quote(`mandatory_roles`.`ROLE_NAME`), '@', + convert(quote(`mandatory_roles`.`ROLE_HOST`) using utf8mb4)) in + (select concat(convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)) + from `mysql`.`role_edges` + where ((`mysql`.`role_edges`.`TO_USER` = internal_get_username()) and + (convert(`mysql`.`role_edges`.`TO_HOST` using utf8mb4) = + convert(internal_get_hostname() using utf8mb4)))) is false + union + select `role_graph`.`c_parent_user` AS `c_parent_user`, + `role_graph`.`c_parent_host` AS `c_parent_host`, + `mysql`.`role_edges`.`FROM_USER` AS `FROM_USER`, + `mysql`.`role_edges`.`FROM_HOST` AS `FROM_HOST`, + `mysql`.`role_edges`.`TO_USER` AS `TO_USER`, + `mysql`.`role_edges`.`TO_HOST` AS `TO_HOST`, + if((locate(sha2(concat(convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), + '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)), + 256), `role_graph`.`role_path`) = 0), + concat(`role_graph`.`role_path`, '->', convert(sha2(concat( + convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), + '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)), + 256) using utf8mb4)), + NULL) AS `IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8`, + `mysql`.`role_edges`.`WITH_ADMIN_OPTION` AS `WITH_ADMIN_OPTION`, + if(((0 <> `role_graph`.`c_enabled`) or (0 <> internal_is_enabled_role( + `mysql`.`role_edges`.`FROM_USER`, `mysql`.`role_edges`.`FROM_HOST`))), true, + false) AS `IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE)` + from (`mysql`.`role_edges` join `role_graph`) + where ((`mysql`.`role_edges`.`TO_USER` = `role_graph`.`c_from_user`) and + (convert(`mysql`.`role_edges`.`TO_HOST` using utf8mb4) = `role_graph`.`c_from_host`) and + (`role_graph`.`role_path` is not null))) +select distinct internal_get_username(`tp`.`Grantor`) AS `GRANTOR`, + internal_get_hostname(`tp`.`Grantor`) AS `GRANTOR_HOST`, + `cp`.`User` AS `GRANTEE`, + `cp`.`Host` AS `GRANTEE_HOST`, + 'def' AS `TABLE_CATALOG`, + `cp`.`Db` AS `TABLE_SCHEMA`, + `cp`.`Table_name` AS `TABLE_NAME`, + `cp`.`Column_name` AS `COLUMN_NAME`, + `cp`.`Column_priv` AS `PRIVILEGE_TYPE`, + if((find_in_set('Grant', `tp`.`Table_priv`) > 0), 'YES', 'NO') AS `IS_GRANTABLE` +from ((`mysql`.`tables_priv` `tp` join `role_graph` `rg` on (((`tp`.`User` = `rg`.`c_from_user`) and + (convert(`tp`.`Host` using utf8mb4) = `rg`.`c_from_host`)))) join `mysql`.`columns_priv` `cp` + on (((convert(`tp`.`Host` using utf8mb4) = `cp`.`Host`) and (`cp`.`Db` = `tp`.`Db`) and + (`cp`.`User` = `tp`.`User`) and (`cp`.`Table_name` = `tp`.`Table_name`)))) +where ((`cp`.`Column_priv` > 0) and (`rg`.`c_to_user` <> '') and (`rg`.`c_enabled` = true)); + diff --git a/IDEA/information_schema/ROLE_ROUTINE_GRANTS.sql b/IDEA/information_schema/ROLE_ROUTINE_GRANTS.sql new file mode 100644 index 00000000..d05d17e5 --- /dev/null +++ b/IDEA/information_schema/ROLE_ROUTINE_GRANTS.sql @@ -0,0 +1,76 @@ +create view information_schema.ROLE_ROUTINE_GRANTS as +with recursive `role_graph` (`c_parent_user`, `c_parent_host`, `c_from_user`, `c_from_host`, `c_to_user`, `c_to_host`, + `role_path`, `c_with_admin`, `c_enabled`) + as (select internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + cast('' as char(64) charset utf8mb4) AS `CAST('' as CHAR(64) CHARSET utf8mb4)`, + cast('' as char(255) charset utf8mb4) AS `CAST('' as CHAR(255) CHARSET utf8mb4)`, + cast(sha2(concat(quote(internal_get_username()), '@', quote(internal_get_hostname())), + 256) as char(17000) charset utf8mb4) AS `CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4)`, + cast('N' as char(1) charset utf8mb4) AS `CAST('N' as CHAR(1) CHARSET utf8mb4)`, + false AS `FALSE` + union + select internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + `mandatory_roles`.`ROLE_NAME` AS `ROLE_NAME`, + `mandatory_roles`.`ROLE_HOST` AS `ROLE_HOST`, + internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + cast(sha2(concat(quote(`mandatory_roles`.`ROLE_NAME`), '@', + convert(quote(`mandatory_roles`.`ROLE_HOST`) using utf8mb4)), + 256) as char(17000) charset utf8mb4) AS `CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4)`, + cast('N' as char(1) charset utf8mb4) AS `CAST('N' as CHAR(1) CHARSET utf8mb4)`, + false AS `FALSE` + from json_table(internal_get_mandatory_roles_json(), '$[*]' + columns (`ROLE_NAME` varchar(255) character set utf8mb4 path '$.ROLE_NAME', `ROLE_HOST` varchar(255) character set utf8mb4 path '$.ROLE_HOST')) `mandatory_roles` + where concat(quote(`mandatory_roles`.`ROLE_NAME`), '@', + convert(quote(`mandatory_roles`.`ROLE_HOST`) using utf8mb4)) in + (select concat(convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)) + from `mysql`.`role_edges` + where ((`mysql`.`role_edges`.`TO_USER` = internal_get_username()) and + (convert(`mysql`.`role_edges`.`TO_HOST` using utf8mb4) = + convert(internal_get_hostname() using utf8mb4)))) is false + union + select `role_graph`.`c_parent_user` AS `c_parent_user`, + `role_graph`.`c_parent_host` AS `c_parent_host`, + `mysql`.`role_edges`.`FROM_USER` AS `FROM_USER`, + `mysql`.`role_edges`.`FROM_HOST` AS `FROM_HOST`, + `mysql`.`role_edges`.`TO_USER` AS `TO_USER`, + `mysql`.`role_edges`.`TO_HOST` AS `TO_HOST`, + if((locate(sha2(concat(convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), + '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)), + 256), `role_graph`.`role_path`) = 0), + concat(`role_graph`.`role_path`, '->', convert(sha2(concat( + convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), + '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)), + 256) using utf8mb4)), + NULL) AS `IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8`, + `mysql`.`role_edges`.`WITH_ADMIN_OPTION` AS `WITH_ADMIN_OPTION`, + if(((0 <> `role_graph`.`c_enabled`) or (0 <> internal_is_enabled_role( + `mysql`.`role_edges`.`FROM_USER`, `mysql`.`role_edges`.`FROM_HOST`))), true, + false) AS `IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE)` + from (`mysql`.`role_edges` join `role_graph`) + where ((`mysql`.`role_edges`.`TO_USER` = `role_graph`.`c_from_user`) and + (convert(`mysql`.`role_edges`.`TO_HOST` using utf8mb4) = `role_graph`.`c_from_host`) and + (`role_graph`.`role_path` is not null))) +select distinct internal_get_username(`pp`.`Grantor`) AS `GRANTOR`, + internal_get_hostname(`pp`.`Grantor`) AS `GRANTOR_HOST`, + `pp`.`User` AS `GRANTEE`, + `pp`.`Host` AS `GRANTEE_HOST`, + 'def' AS `SPECIFIC_CATALOG`, + `pp`.`Db` AS `SPECIFIC_SCHEMA`, + `pp`.`Routine_name` AS `SPECIFIC_NAME`, + 'def' AS `ROUTINE_CATALOG`, + `pp`.`Db` AS `ROUTINE_SCHEMA`, + `pp`.`Routine_name` AS `ROUTINE_NAME`, + `pp`.`Proc_priv` AS `PRIVILEGE_TYPE`, + if((find_in_set('Grant', `pp`.`Proc_priv`) > 0), 'YES', 'NO') AS `IS_GRANTABLE` +from (`mysql`.`procs_priv` `pp` join `role_graph` `rg` + on (((`pp`.`User` = `rg`.`c_from_user`) and (convert(`pp`.`Host` using utf8mb4) = `rg`.`c_from_host`)))) +where ((`pp`.`Proc_priv` > 0) and (`rg`.`c_to_user` <> '') and (`rg`.`c_enabled` = true)); + diff --git a/IDEA/information_schema/ROLE_TABLE_GRANTS.sql b/IDEA/information_schema/ROLE_TABLE_GRANTS.sql new file mode 100644 index 00000000..0f4c9f9d --- /dev/null +++ b/IDEA/information_schema/ROLE_TABLE_GRANTS.sql @@ -0,0 +1,73 @@ +create view information_schema.ROLE_TABLE_GRANTS as +with recursive `role_graph` (`c_parent_user`, `c_parent_host`, `c_from_user`, `c_from_host`, `c_to_user`, `c_to_host`, + `role_path`, `c_with_admin`, `c_enabled`) + as (select internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + cast('' as char(64) charset utf8mb4) AS `CAST('' as CHAR(64) CHARSET utf8mb4)`, + cast('' as char(255) charset utf8mb4) AS `CAST('' as CHAR(255) CHARSET utf8mb4)`, + cast(sha2(concat(quote(internal_get_username()), '@', quote(internal_get_hostname())), + 256) as char(17000) charset utf8mb4) AS `CAST(SHA2(CONCAT(QUOTE(INTERNAL_GET_USERNAME()),'@', QUOTE(INTERNAL_GET_HOSTNAME())), 256) AS CHAR(17000) CHARSET utf8mb4)`, + cast('N' as char(1) charset utf8mb4) AS `CAST('N' as CHAR(1) CHARSET utf8mb4)`, + false AS `FALSE` + union + select internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + `mandatory_roles`.`ROLE_NAME` AS `ROLE_NAME`, + `mandatory_roles`.`ROLE_HOST` AS `ROLE_HOST`, + internal_get_username() AS `INTERNAL_GET_USERNAME()`, + internal_get_hostname() AS `INTERNAL_GET_HOSTNAME()`, + cast(sha2(concat(quote(`mandatory_roles`.`ROLE_NAME`), '@', + convert(quote(`mandatory_roles`.`ROLE_HOST`) using utf8mb4)), + 256) as char(17000) charset utf8mb4) AS `CAST(SHA2(CONCAT(QUOTE(ROLE_NAME),'@', CONVERT(QUOTE(ROLE_HOST) using utf8mb4)), 256) AS CHAR(17000) CHARSET utf8mb4)`, + cast('N' as char(1) charset utf8mb4) AS `CAST('N' as CHAR(1) CHARSET utf8mb4)`, + false AS `FALSE` + from json_table(internal_get_mandatory_roles_json(), '$[*]' + columns (`ROLE_NAME` varchar(255) character set utf8mb4 path '$.ROLE_NAME', `ROLE_HOST` varchar(255) character set utf8mb4 path '$.ROLE_HOST')) `mandatory_roles` + where concat(quote(`mandatory_roles`.`ROLE_NAME`), '@', + convert(quote(`mandatory_roles`.`ROLE_HOST`) using utf8mb4)) in + (select concat(convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)) + from `mysql`.`role_edges` + where ((`mysql`.`role_edges`.`TO_USER` = internal_get_username()) and + (convert(`mysql`.`role_edges`.`TO_HOST` using utf8mb4) = + convert(internal_get_hostname() using utf8mb4)))) is false + union + select `role_graph`.`c_parent_user` AS `c_parent_user`, + `role_graph`.`c_parent_host` AS `c_parent_host`, + `mysql`.`role_edges`.`FROM_USER` AS `FROM_USER`, + `mysql`.`role_edges`.`FROM_HOST` AS `FROM_HOST`, + `mysql`.`role_edges`.`TO_USER` AS `TO_USER`, + `mysql`.`role_edges`.`TO_HOST` AS `TO_HOST`, + if((locate(sha2(concat(convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), + '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)), + 256), `role_graph`.`role_path`) = 0), + concat(`role_graph`.`role_path`, '->', convert(sha2(concat( + convert(quote(`mysql`.`role_edges`.`FROM_USER`) using utf8mb4), + '@', + convert(quote(`mysql`.`role_edges`.`FROM_HOST`) using utf8mb4)), + 256) using utf8mb4)), + NULL) AS `IF(LOCATE(SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8mb4)), 256), role_path) = 0, CONCAT(role_path,'->', SHA2(CONCAT(QUOTE(FROM_USER),'@', CONVERT(QUOTE(FROM_HOST) using utf8`, + `mysql`.`role_edges`.`WITH_ADMIN_OPTION` AS `WITH_ADMIN_OPTION`, + if(((0 <> `role_graph`.`c_enabled`) or (0 <> internal_is_enabled_role( + `mysql`.`role_edges`.`FROM_USER`, `mysql`.`role_edges`.`FROM_HOST`))), true, + false) AS `IF(c_enabled OR INTERNAL_IS_ENABLED_ROLE(FROM_USER, FROM_HOST), TRUE, FALSE)` + from (`mysql`.`role_edges` join `role_graph`) + where ((`mysql`.`role_edges`.`TO_USER` = `role_graph`.`c_from_user`) and + (convert(`mysql`.`role_edges`.`TO_HOST` using utf8mb4) = `role_graph`.`c_from_host`) and + (`role_graph`.`role_path` is not null))) +select distinct internal_get_username(`tp`.`Grantor`) AS `GRANTOR`, + internal_get_hostname(`tp`.`Grantor`) AS `GRANTOR_HOST`, + `tp`.`User` AS `GRANTEE`, + `tp`.`Host` AS `GRANTEE_HOST`, + 'def' AS `TABLE_CATALOG`, + `tp`.`Db` AS `TABLE_SCHEMA`, + `tp`.`Table_name` AS `TABLE_NAME`, + `tp`.`Table_priv` AS `PRIVILEGE_TYPE`, + if((find_in_set('Grant', `tp`.`Table_priv`) > 0), 'YES', 'NO') AS `IS_GRANTABLE` +from (`mysql`.`tables_priv` `tp` join `role_graph` `rg` + on (((`tp`.`User` = `rg`.`c_from_user`) and (convert(`tp`.`Host` using utf8mb4) = `rg`.`c_from_host`)))) +where ((`tp`.`Table_priv` > 0) and (`rg`.`c_to_user` <> '') and (`rg`.`c_enabled` = true)); + diff --git a/IDEA/information_schema/ROUTINES.sql b/IDEA/information_schema/ROUTINES.sql new file mode 100644 index 00000000..b39fc3f3 --- /dev/null +++ b/IDEA/information_schema/ROUTINES.sql @@ -0,0 +1,68 @@ +create view information_schema.ROUTINES as +select `rtn`.`name` AS `SPECIFIC_NAME`, + (`cat`.`name` collate utf8mb3_tolower_ci) AS `ROUTINE_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `ROUTINE_SCHEMA`, + `rtn`.`name` AS `ROUTINE_NAME`, + `rtn`.`type` AS `ROUTINE_TYPE`, + if((`rtn`.`type` = 'PROCEDURE'), '', substring_index(substring_index(`rtn`.`result_data_type_utf8`, '(', 1), ' ', + 1)) AS `DATA_TYPE`, + internal_dd_char_length(`rtn`.`result_data_type`, `rtn`.`result_char_length`, `coll_result`.`name`, + 0) AS `CHARACTER_MAXIMUM_LENGTH`, + internal_dd_char_length(`rtn`.`result_data_type`, `rtn`.`result_char_length`, `coll_result`.`name`, + 1) AS `CHARACTER_OCTET_LENGTH`, + `rtn`.`result_numeric_precision` AS `NUMERIC_PRECISION`, + `rtn`.`result_numeric_scale` AS `NUMERIC_SCALE`, + `rtn`.`result_datetime_precision` AS `DATETIME_PRECISION`, + (case `rtn`.`result_data_type` + when 'MYSQL_TYPE_STRING' then if((`cs_result`.`name` = 'binary'), NULL, `cs_result`.`name`) + when 'MYSQL_TYPE_VAR_STRING' then if((`cs_result`.`name` = 'binary'), NULL, `cs_result`.`name`) + when 'MYSQL_TYPE_VARCHAR' then if((`cs_result`.`name` = 'binary'), NULL, `cs_result`.`name`) + when 'MYSQL_TYPE_TINY_BLOB' then if((`cs_result`.`name` = 'binary'), NULL, `cs_result`.`name`) + when 'MYSQL_TYPE_MEDIUM_BLOB' then if((`cs_result`.`name` = 'binary'), NULL, `cs_result`.`name`) + when 'MYSQL_TYPE_BLOB' then if((`cs_result`.`name` = 'binary'), NULL, `cs_result`.`name`) + when 'MYSQL_TYPE_LONG_BLOB' then if((`cs_result`.`name` = 'binary'), NULL, `cs_result`.`name`) + when 'MYSQL_TYPE_ENUM' then if((`cs_result`.`name` = 'binary'), NULL, `cs_result`.`name`) + when 'MYSQL_TYPE_SET' then if((`cs_result`.`name` = 'binary'), NULL, `cs_result`.`name`) + else NULL end) AS `CHARACTER_SET_NAME`, + (case `rtn`.`result_data_type` + when 'MYSQL_TYPE_STRING' then if((`cs_result`.`name` = 'binary'), NULL, `coll_result`.`name`) + when 'MYSQL_TYPE_VAR_STRING' then if((`cs_result`.`name` = 'binary'), NULL, `coll_result`.`name`) + when 'MYSQL_TYPE_VARCHAR' then if((`cs_result`.`name` = 'binary'), NULL, `coll_result`.`name`) + when 'MYSQL_TYPE_TINY_BLOB' then if((`cs_result`.`name` = 'binary'), NULL, `coll_result`.`name`) + when 'MYSQL_TYPE_MEDIUM_BLOB' then if((`cs_result`.`name` = 'binary'), NULL, `coll_result`.`name`) + when 'MYSQL_TYPE_BLOB' then if((`cs_result`.`name` = 'binary'), NULL, `coll_result`.`name`) + when 'MYSQL_TYPE_LONG_BLOB' then if((`cs_result`.`name` = 'binary'), NULL, `coll_result`.`name`) + when 'MYSQL_TYPE_ENUM' then if((`cs_result`.`name` = 'binary'), NULL, `coll_result`.`name`) + when 'MYSQL_TYPE_SET' then if((`cs_result`.`name` = 'binary'), NULL, `coll_result`.`name`) + else NULL end) AS `COLLATION_NAME`, + if((`rtn`.`type` = 'PROCEDURE'), NULL, + `rtn`.`result_data_type_utf8`) AS `DTD_IDENTIFIER`, + 'SQL' AS `ROUTINE_BODY`, + if(can_access_routine(`sch`.`name`, `rtn`.`name`, `rtn`.`type`, `rtn`.`definer`, true), `rtn`.`definition_utf8`, + NULL) AS `ROUTINE_DEFINITION`, + NULL AS `EXTERNAL_NAME`, + `rtn`.`external_language` AS `EXTERNAL_LANGUAGE`, + 'SQL' AS `PARAMETER_STYLE`, + if((`rtn`.`is_deterministic` = 0), 'NO', 'YES') AS `IS_DETERMINISTIC`, + `rtn`.`sql_data_access` AS `SQL_DATA_ACCESS`, + NULL AS `SQL_PATH`, + `rtn`.`security_type` AS `SECURITY_TYPE`, + `rtn`.`created` AS `CREATED`, + `rtn`.`last_altered` AS `LAST_ALTERED`, + `rtn`.`sql_mode` AS `SQL_MODE`, + `rtn`.`comment` AS `ROUTINE_COMMENT`, + `rtn`.`definer` AS `DEFINER`, + `cs_client`.`name` AS `CHARACTER_SET_CLIENT`, + `coll_conn`.`name` AS `COLLATION_CONNECTION`, + `coll_db`.`name` AS `DATABASE_COLLATION` +from ((((((((`mysql`.`routines` `rtn` join `mysql`.`schemata` `sch` + on ((`rtn`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`collations` `coll_client` + on ((`coll_client`.`id` = `rtn`.`client_collation_id`))) join `mysql`.`character_sets` `cs_client` + on ((`cs_client`.`id` = `coll_client`.`character_set_id`))) join `mysql`.`collations` `coll_conn` + on ((`coll_conn`.`id` = `rtn`.`connection_collation_id`))) join `mysql`.`collations` `coll_db` + on ((`coll_db`.`id` = `rtn`.`schema_collation_id`))) left join `mysql`.`collations` `coll_result` + on ((`coll_result`.`id` = `rtn`.`result_collation_id`))) left join `mysql`.`character_sets` `cs_result` + on ((`cs_result`.`id` = `coll_result`.`character_set_id`))) +where (0 <> can_access_routine(`sch`.`name`, `rtn`.`name`, `rtn`.`type`, `rtn`.`definer`, false)); + diff --git a/IDEA/information_schema/SCHEMATA.sql b/IDEA/information_schema/SCHEMATA.sql new file mode 100644 index 00000000..69295248 --- /dev/null +++ b/IDEA/information_schema/SCHEMATA.sql @@ -0,0 +1,13 @@ +create view information_schema.SCHEMATA as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `CATALOG_NAME`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `SCHEMA_NAME`, + `cs`.`name` AS `DEFAULT_CHARACTER_SET_NAME`, + `col`.`name` AS `DEFAULT_COLLATION_NAME`, + NULL AS `SQL_PATH`, + `sch`.`default_encryption` AS `DEFAULT_ENCRYPTION` +from (((`mysql`.`schemata` `sch` join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`collations` `col` + on ((`sch`.`default_collation_id` = `col`.`id`))) join `mysql`.`character_sets` `cs` + on ((`col`.`character_set_id` = `cs`.`id`))) +where (0 <> can_access_database(`sch`.`name`)); + diff --git a/IDEA/information_schema/SCHEMATA_EXTENSIONS.sql b/IDEA/information_schema/SCHEMATA_EXTENSIONS.sql new file mode 100644 index 00000000..5a2df1bf --- /dev/null +++ b/IDEA/information_schema/SCHEMATA_EXTENSIONS.sql @@ -0,0 +1,7 @@ +create view information_schema.SCHEMATA_EXTENSIONS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `CATALOG_NAME`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `SCHEMA_NAME`, + get_dd_schema_options(`sch`.`options`) AS `OPTIONS` +from (`mysql`.`schemata` `sch` join `mysql`.`catalogs` `cat` on ((`cat`.`id` = `sch`.`catalog_id`))) +where (0 <> can_access_database(`sch`.`name`)); + diff --git a/IDEA/information_schema/STATISTICS.sql b/IDEA/information_schema/STATISTICS.sql new file mode 100644 index 00000000..7e5ce0c1 --- /dev/null +++ b/IDEA/information_schema/STATISTICS.sql @@ -0,0 +1,44 @@ +create view information_schema.STATISTICS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `TABLE_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `TABLE_SCHEMA`, + (`tbl`.`name` collate utf8mb3_tolower_ci) AS `TABLE_NAME`, + if(((`idx`.`type` = 'PRIMARY') or (`idx`.`type` = 'UNIQUE')), 0, 1) AS `NON_UNIQUE`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `INDEX_SCHEMA`, + (`idx`.`name` collate utf8mb3_tolower_ci) AS `INDEX_NAME`, + `icu`.`ordinal_position` AS `SEQ_IN_INDEX`, + if((`col`.`hidden` = 'SQL'), NULL, + (`col`.`name` collate utf8mb3_tolower_ci)) AS `COLUMN_NAME`, + (case when (`icu`.`order` = 'DESC') then 'D' when (`icu`.`order` = 'ASC') then 'A' else NULL end) AS `COLLATION`, + internal_index_column_cardinality(`sch`.`name`, `tbl`.`name`, `idx`.`name`, `col`.`name`, + `idx`.`ordinal_position`, `icu`.`ordinal_position`, + if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, + ((`tbl`.`hidden` <> 'Visible') or (0 <> `idx`.`hidden`) or + (0 <> `icu`.`hidden`)), + coalesce(`stat`.`cardinality`, cast(-(1) as unsigned)), + coalesce(cast(`stat`.`cached_time` as unsigned), 0)) AS `CARDINALITY`, + get_dd_index_sub_part_length(`icu`.`length`, `col`.`type`, `col`.`char_length`, `col`.`collation_id`, + `idx`.`type`) AS `SUB_PART`, + NULL AS `PACKED`, + if((`col`.`is_nullable` = 1), 'YES', '') AS `NULLABLE`, + (case + when (`idx`.`type` = 'SPATIAL') then 'SPATIAL' + when (`idx`.`algorithm` = 'SE_PRIVATE') then '' + else `idx`.`algorithm` end) AS `INDEX_TYPE`, + if(((`idx`.`type` = 'PRIMARY') or (`idx`.`type` = 'UNIQUE')), '', + if(internal_keys_disabled(`tbl`.`options`), 'disabled', '')) AS `COMMENT`, + `idx`.`comment` AS `INDEX_COMMENT`, + if(`idx`.`is_visible`, 'YES', 'NO') AS `IS_VISIBLE`, + if((`col`.`hidden` = 'SQL'), `col`.`generation_expression_utf8`, NULL) AS `EXPRESSION` +from (((((((`mysql`.`index_column_usage` `icu` join `mysql`.`indexes` `idx` + on ((`idx`.`id` = `icu`.`index_id`))) join `mysql`.`tables` `tbl` + on ((`idx`.`table_id` = `tbl`.`id`))) join `mysql`.`columns` `col` + on ((`icu`.`column_id` = `col`.`id`))) join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`collations` `coll` + on ((`tbl`.`collation_id` = `coll`.`id`))) left join `mysql`.`index_stats` `stat` + on (((`tbl`.`name` = `stat`.`table_name`) and (`sch`.`name` = `stat`.`schema_name`) and + (`idx`.`name` = `stat`.`index_name`) and (`col`.`name` = `stat`.`column_name`)))) +where ((0 <> can_access_table(`sch`.`name`, `tbl`.`name`)) and + (0 <> is_visible_dd_object(`tbl`.`hidden`, ((0 <> `idx`.`hidden`) or (0 <> `icu`.`hidden`)), `idx`.`options`))); + diff --git a/IDEA/information_schema/ST_GEOMETRY_COLUMNS.sql b/IDEA/information_schema/ST_GEOMETRY_COLUMNS.sql new file mode 100644 index 00000000..45bb8b7b --- /dev/null +++ b/IDEA/information_schema/ST_GEOMETRY_COLUMNS.sql @@ -0,0 +1,14 @@ +create view information_schema.ST_GEOMETRY_COLUMNS as +select `information_schema`.`cols`.`TABLE_CATALOG` AS `TABLE_CATALOG`, + `information_schema`.`cols`.`TABLE_SCHEMA` AS `TABLE_SCHEMA`, + `information_schema`.`cols`.`TABLE_NAME` AS `TABLE_NAME`, + `information_schema`.`cols`.`COLUMN_NAME` AS `COLUMN_NAME`, + `information_schema`.`srs`.`SRS_NAME` AS `SRS_NAME`, + `information_schema`.`cols`.`SRS_ID` AS `SRS_ID`, + `information_schema`.`cols`.`DATA_TYPE` AS `GEOMETRY_TYPE_NAME` +from (`information_schema`.`COLUMNS` `cols` left join `information_schema`.`ST_SPATIAL_REFERENCE_SYSTEMS` `srs` + on ((`information_schema`.`cols`.`SRS_ID` = `information_schema`.`srs`.`SRS_ID`))) +where (`information_schema`.`cols`.`DATA_TYPE` in + ('geometry', 'point', 'linestring', 'polygon', 'multipoint', 'multilinestring', 'multipolygon', + 'geomcollection')); + diff --git a/IDEA/information_schema/ST_SPATIAL_REFERENCE_SYSTEMS.sql b/IDEA/information_schema/ST_SPATIAL_REFERENCE_SYSTEMS.sql new file mode 100644 index 00000000..cd043096 --- /dev/null +++ b/IDEA/information_schema/ST_SPATIAL_REFERENCE_SYSTEMS.sql @@ -0,0 +1,9 @@ +create view information_schema.ST_SPATIAL_REFERENCE_SYSTEMS as +select `mysql`.`st_spatial_reference_systems`.`name` AS `SRS_NAME`, + `mysql`.`st_spatial_reference_systems`.`id` AS `SRS_ID`, + `mysql`.`st_spatial_reference_systems`.`organization` AS `ORGANIZATION`, + `mysql`.`st_spatial_reference_systems`.`organization_coordsys_id` AS `ORGANIZATION_COORDSYS_ID`, + `mysql`.`st_spatial_reference_systems`.`definition` AS `DEFINITION`, + `mysql`.`st_spatial_reference_systems`.`description` AS `DESCRIPTION` +from `mysql`.`st_spatial_reference_systems`; + diff --git a/IDEA/information_schema/ST_UNITS_OF_MEASURE.sql b/IDEA/information_schema/ST_UNITS_OF_MEASURE.sql new file mode 100644 index 00000000..33eb7411 --- /dev/null +++ b/IDEA/information_schema/ST_UNITS_OF_MEASURE.sql @@ -0,0 +1,10 @@ +create view information_schema.ST_UNITS_OF_MEASURE as +select `st_units_of_measure`.`UNIT_NAME` AS `UNIT_NAME`, + `st_units_of_measure`.`UNIT_TYPE` AS `UNIT_TYPE`, + `st_units_of_measure`.`CONVERSION_FACTOR` AS `CONVERSION_FACTOR`, + `st_units_of_measure`.`DESCRIPTION` AS `DESCRIPTION` +from json_table( + '[["metre","LINEAR","",1],["millimetre","LINEAR","",0.001],["centimetre","LINEAR","",0.01],["German legal metre","LINEAR","",1.0000135965],["foot","LINEAR","",0.3048],["US survey foot","LINEAR","",0.30480060960121924],["Clarke\'s yard","LINEAR","",0.9143917962],["Clarke\'s foot","LINEAR","",0.3047972654],["British link (Sears 1922 truncated)","LINEAR","",0.20116756],["nautical mile","LINEAR","",1852],["fathom","LINEAR","",1.8288],["US survey chain","LINEAR","",20.11684023368047],["US survey link","LINEAR","",0.2011684023368047],["US survey mile","LINEAR","",1609.3472186944375],["Indian yard","LINEAR","",0.9143985307444408],["kilometre","LINEAR","",1000],["Clarke\'s chain","LINEAR","",20.1166195164],["Clarke\'s link","LINEAR","",0.201166195164],["British yard (Benoit 1895 A)","LINEAR","",0.9143992],["British yard (Sears 1922)","LINEAR","",0.9143984146160287],["British foot (Sears 1922)","LINEAR","",0.3047994715386762],["Gold Coast foot","LINEAR","",0.3047997101815088],["British chain (Sears 1922)","LINEAR","",20.116765121552632],["yard","LINEAR","",0.9144],["British link (Sears 1922)","LINEAR","",0.2011676512155263],["British foot (Benoit 1895 A)","LINEAR","",0.3047997333333333],["Indian foot (1962)","LINEAR","",0.3047996],["British chain (Benoit 1895 A)","LINEAR","",20.1167824],["chain","LINEAR","",20.1168],["British link (Benoit 1895 A)","LINEAR","",0.201167824],["British yard (Benoit 1895 B)","LINEAR","",0.9143992042898124],["British foot (Benoit 1895 B)","LINEAR","",0.30479973476327077],["British chain (Benoit 1895 B)","LINEAR","",20.116782494375872],["British link (Benoit 1895 B)","LINEAR","",0.2011678249437587],["British foot (1865)","LINEAR","",0.30480083333333335],["Indian foot","LINEAR","",0.30479951024814694],["Indian foot (1937)","LINEAR","",0.30479841],["Indian foot (1975)","LINEAR","",0.3047995],["British foot (1936)","LINEAR","",0.3048007491],["Indian yard (1937)","LINEAR","",0.91439523],["Indian yard (1962)","LINEAR","",0.9143988],["Indian yard (1975)","LINEAR","",0.9143985],["Statute mile","LINEAR","",1609.344],["link","LINEAR","",0.201168],["British yard (Sears 1922 truncated)","LINEAR","",0.914398],["British foot (Sears 1922 truncated)","LINEAR","",0.30479933333333337],["British chain (Sears 1922 truncated)","LINEAR","",20.116756]]', + '$[*]' + columns (`UNIT_NAME` varchar(255) character set utf8mb4 path '$[0]', `UNIT_TYPE` varchar(7) character set utf8mb4 path '$[1]', `DESCRIPTION` varchar(255) character set utf8mb4 path '$[2]', `CONVERSION_FACTOR` double path '$[3]')) `st_units_of_measure`; + diff --git a/IDEA/information_schema/TABLES.sql b/IDEA/information_schema/TABLES.sql new file mode 100644 index 00000000..1e96ce0f --- /dev/null +++ b/IDEA/information_schema/TABLES.sql @@ -0,0 +1,75 @@ +create view information_schema.TABLES as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `TABLE_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `TABLE_SCHEMA`, + (`tbl`.`name` collate utf8mb3_tolower_ci) AS `TABLE_NAME`, + `tbl`.`type` AS `TABLE_TYPE`, + if((`tbl`.`type` = 'BASE TABLE'), `tbl`.`engine`, NULL) AS `ENGINE`, + if((`tbl`.`type` = 'VIEW'), NULL, 10) AS `VERSION`, + `tbl`.`row_format` AS `ROW_FORMAT`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_table_rows(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), `ts`.`se_private_data`, + coalesce(`stat`.`table_rows`, 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0))) AS `TABLE_ROWS`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_avg_row_length(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), `ts`.`se_private_data`, + coalesce(`stat`.`avg_row_length`, 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0))) AS `AVG_ROW_LENGTH`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_data_length(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), `ts`.`se_private_data`, + coalesce(`stat`.`data_length`, 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0))) AS `DATA_LENGTH`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_max_data_length(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), `ts`.`se_private_data`, + coalesce(`stat`.`max_data_length`, 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0))) AS `MAX_DATA_LENGTH`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_index_length(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), `ts`.`se_private_data`, + coalesce(`stat`.`index_length`, 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0))) AS `INDEX_LENGTH`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_data_free(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), `ts`.`se_private_data`, + coalesce(`stat`.`data_free`, 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0))) AS `DATA_FREE`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_auto_increment(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, + ((0 <> is_visible_dd_object(`tbl`.`hidden`, false, `tbl`.`options`)) is false), + `ts`.`se_private_data`, coalesce(`stat`.`auto_increment`, 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0), + `tbl`.`se_private_data`)) AS `AUTO_INCREMENT`, + `tbl`.`created` AS `CREATE_TIME`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_update_time(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), `ts`.`se_private_data`, + coalesce(cast(`stat`.`update_time` as unsigned), 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0))) AS `UPDATE_TIME`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_check_time(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), `ts`.`se_private_data`, + coalesce(cast(`stat`.`check_time` as unsigned), 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0))) AS `CHECK_TIME`, + `col`.`name` AS `TABLE_COLLATION`, + if((`tbl`.`type` = 'VIEW'), NULL, + internal_checksum(`sch`.`name`, `tbl`.`name`, if((`tbl`.`partition_type` is null), `tbl`.`engine`, ''), + `tbl`.`se_private_id`, (`tbl`.`hidden` <> 'Visible'), `ts`.`se_private_data`, + coalesce(`stat`.`checksum`, 0), + coalesce(cast(`stat`.`cached_time` as unsigned), 0))) AS `CHECKSUM`, + if((`tbl`.`type` = 'VIEW'), NULL, get_dd_create_options(`tbl`.`options`, if( + (ifnull(`tbl`.`partition_expression`, 'NOT_PART_TBL') = 'NOT_PART_TBL'), 0, 1), + if((`sch`.`default_encryption` = 'YES'), 1, 0))) AS `CREATE_OPTIONS`, + internal_get_comment_or_error(`sch`.`name`, `tbl`.`name`, `tbl`.`type`, `tbl`.`options`, + `tbl`.`comment`) AS `TABLE_COMMENT` +from (((((`mysql`.`tables` `tbl` join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) left join `mysql`.`collations` `col` + on ((`tbl`.`collation_id` = `col`.`id`))) left join `mysql`.`tablespaces` `ts` + on ((`tbl`.`tablespace_id` = `ts`.`id`))) left join `mysql`.`table_stats` `stat` + on (((`tbl`.`name` = `stat`.`table_name`) and (`sch`.`name` = `stat`.`schema_name`)))) +where ((0 <> can_access_table(`sch`.`name`, `tbl`.`name`)) and (0 <> is_visible_dd_object(`tbl`.`hidden`))); + diff --git a/IDEA/information_schema/TABLESPACES_EXTENSIONS.sql b/IDEA/information_schema/TABLESPACES_EXTENSIONS.sql new file mode 100644 index 00000000..a9a01bae --- /dev/null +++ b/IDEA/information_schema/TABLESPACES_EXTENSIONS.sql @@ -0,0 +1,4 @@ +create view information_schema.TABLESPACES_EXTENSIONS as +select `tsps`.`name` AS `TABLESPACE_NAME`, `tsps`.`engine_attribute` AS `ENGINE_ATTRIBUTE` +from `mysql`.`tablespaces` `tsps`; + diff --git a/IDEA/information_schema/TABLES_EXTENSIONS.sql b/IDEA/information_schema/TABLES_EXTENSIONS.sql new file mode 100644 index 00000000..528b727f --- /dev/null +++ b/IDEA/information_schema/TABLES_EXTENSIONS.sql @@ -0,0 +1,10 @@ +create view information_schema.TABLES_EXTENSIONS as +select `cat`.`name` AS `TABLE_CATALOG`, + `sch`.`name` AS `TABLE_SCHEMA`, + `tbl`.`name` AS `TABLE_NAME`, + `tbl`.`engine_attribute` AS `ENGINE_ATTRIBUTE`, + `tbl`.`secondary_engine_attribute` AS `SECONDARY_ENGINE_ATTRIBUTE` +from ((`mysql`.`tables` `tbl` join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` on ((`cat`.`id` = `sch`.`catalog_id`))) +where ((0 <> can_access_table(`sch`.`name`, `tbl`.`name`)) and (0 <> is_visible_dd_object(`tbl`.`hidden`))); + diff --git a/IDEA/information_schema/TABLE_CONSTRAINTS.sql b/IDEA/information_schema/TABLE_CONSTRAINTS.sql new file mode 100644 index 00000000..1d3d38dc --- /dev/null +++ b/IDEA/information_schema/TABLE_CONSTRAINTS.sql @@ -0,0 +1,34 @@ +create view information_schema.TABLE_CONSTRAINTS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `CONSTRAINT_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `CONSTRAINT_SCHEMA`, + `constraints`.`CONSTRAINT_NAME` AS `CONSTRAINT_NAME`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `TABLE_SCHEMA`, + (`tbl`.`name` collate utf8mb3_tolower_ci) AS `TABLE_NAME`, + `constraints`.`CONSTRAINT_TYPE` AS `CONSTRAINT_TYPE`, + `constraints`.`ENFORCED` AS `ENFORCED` +from (((`mysql`.`tables` `tbl` join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join lateral (select `idx`.`name` AS `CONSTRAINT_NAME`, + if((`idx`.`type` = 'PRIMARY'), 'PRIMARY KEY', `idx`.`type`) AS `CONSTRAINT_TYPE`, + 'YES' AS `ENFORCED` + from `mysql`.`indexes` `idx` + where ((`idx`.`table_id` = `tbl`.`id`) and + (`idx`.`type` in ('PRIMARY', 'UNIQUE')) and (0 <> + is_visible_dd_object( + `tbl`.`hidden`, + `idx`.`hidden`, + `idx`.`options`))) + union all + select (`fk`.`name` collate utf8mb3_tolower_ci) AS `CONSTRAINT_NAME`, + 'FOREIGN KEY' AS `CONSTRAINT_TYPE`, + 'YES' AS `ENFORCED` + from `mysql`.`foreign_keys` `fk` + where (`fk`.`table_id` = `tbl`.`id`) + union all + select `cc`.`name` AS `CONSTRAINT_NAME`, + 'CHECK' AS `CONSTRAINT_TYPE`, + `cc`.`enforced` AS `ENFORCED` + from `mysql`.`check_constraints` `cc` + where (`cc`.`table_id` = `tbl`.`id`)) `constraints`) +where ((0 <> can_access_table(`sch`.`name`, `tbl`.`name`)) and (0 <> is_visible_dd_object(`tbl`.`hidden`))); + diff --git a/IDEA/information_schema/TABLE_CONSTRAINTS_EXTENSIONS.sql b/IDEA/information_schema/TABLE_CONSTRAINTS_EXTENSIONS.sql new file mode 100644 index 00000000..ea3e53cb --- /dev/null +++ b/IDEA/information_schema/TABLE_CONSTRAINTS_EXTENSIONS.sql @@ -0,0 +1,13 @@ +create view information_schema.TABLE_CONSTRAINTS_EXTENSIONS as +select `cat`.`name` AS `CONSTRAINT_CATALOG`, + `sch`.`name` AS `CONSTRAINT_SCHEMA`, + `idx`.`name` AS `CONSTRAINT_NAME`, + `tbl`.`name` AS `TABLE_NAME`, + `idx`.`engine_attribute` AS `ENGINE_ATTRIBUTE`, + `idx`.`secondary_engine_attribute` AS `SECONDARY_ENGINE_ATTRIBUTE` +from (((`mysql`.`indexes` `idx` join `mysql`.`tables` `tbl` + on ((`idx`.`table_id` = `tbl`.`id`))) join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` on ((`cat`.`id` = `sch`.`catalog_id`))) +where ((0 <> can_access_table(`sch`.`name`, `tbl`.`name`)) and + (0 <> is_visible_dd_object(`tbl`.`hidden`, false, `idx`.`options`))); + diff --git a/IDEA/information_schema/TRIGGERS.sql b/IDEA/information_schema/TRIGGERS.sql new file mode 100644 index 00000000..fe72db01 --- /dev/null +++ b/IDEA/information_schema/TRIGGERS.sql @@ -0,0 +1,34 @@ +create view information_schema.TRIGGERS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `TRIGGER_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `TRIGGER_SCHEMA`, + `trg`.`name` AS `TRIGGER_NAME`, + `trg`.`event_type` AS `EVENT_MANIPULATION`, + (`cat`.`name` collate utf8mb3_tolower_ci) AS `EVENT_OBJECT_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `EVENT_OBJECT_SCHEMA`, + (`tbl`.`name` collate utf8mb3_tolower_ci) AS `EVENT_OBJECT_TABLE`, + `trg`.`action_order` AS `ACTION_ORDER`, + NULL AS `ACTION_CONDITION`, + `trg`.`action_statement_utf8` AS `ACTION_STATEMENT`, + 'ROW' AS `ACTION_ORIENTATION`, + `trg`.`action_timing` AS `ACTION_TIMING`, + NULL AS `ACTION_REFERENCE_OLD_TABLE`, + NULL AS `ACTION_REFERENCE_NEW_TABLE`, + 'OLD' AS `ACTION_REFERENCE_OLD_ROW`, + 'NEW' AS `ACTION_REFERENCE_NEW_ROW`, + `trg`.`created` AS `CREATED`, + `trg`.`sql_mode` AS `SQL_MODE`, + `trg`.`definer` AS `DEFINER`, + `cs_client`.`name` AS `CHARACTER_SET_CLIENT`, + `coll_conn`.`name` AS `COLLATION_CONNECTION`, + `coll_db`.`name` AS `DATABASE_COLLATION` +from (((((((`mysql`.`triggers` `trg` join `mysql`.`tables` `tbl` + on ((`tbl`.`id` = `trg`.`table_id`))) join `mysql`.`schemata` `sch` + on ((`tbl`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`collations` `coll_client` + on ((`coll_client`.`id` = `trg`.`client_collation_id`))) join `mysql`.`character_sets` `cs_client` + on ((`cs_client`.`id` = `coll_client`.`character_set_id`))) join `mysql`.`collations` `coll_conn` + on ((`coll_conn`.`id` = `trg`.`connection_collation_id`))) join `mysql`.`collations` `coll_db` + on ((`coll_db`.`id` = `trg`.`schema_collation_id`))) +where ((`tbl`.`type` <> 'VIEW') and (0 <> can_access_trigger(`sch`.`name`, `tbl`.`name`)) and + (0 <> is_visible_dd_object(`tbl`.`hidden`))); + diff --git a/IDEA/information_schema/USER_ATTRIBUTES.sql b/IDEA/information_schema/USER_ATTRIBUTES.sql new file mode 100644 index 00000000..bfe0dc78 --- /dev/null +++ b/IDEA/information_schema/USER_ATTRIBUTES.sql @@ -0,0 +1,7 @@ +create view information_schema.USER_ATTRIBUTES as +select `mysql`.`user`.`User` AS `USER`, + `mysql`.`user`.`Host` AS `HOST`, + json_unquote(json_extract(`mysql`.`user`.`User_attributes`, '$.metadata')) AS `ATTRIBUTE` +from `mysql`.`user` +where (0 <> can_access_user(`mysql`.`user`.`User`, `mysql`.`user`.`Host`)); + diff --git a/IDEA/information_schema/VIEWS.sql b/IDEA/information_schema/VIEWS.sql new file mode 100644 index 00000000..4e20042d --- /dev/null +++ b/IDEA/information_schema/VIEWS.sql @@ -0,0 +1,20 @@ +create view information_schema.VIEWS as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `TABLE_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `TABLE_SCHEMA`, + (`vw`.`name` collate utf8mb3_tolower_ci) AS `TABLE_NAME`, + if((can_access_view(`sch`.`name`, `vw`.`name`, `vw`.`view_definer`, `vw`.`options`) = true), + `vw`.`view_definition_utf8`, '') AS `VIEW_DEFINITION`, + `vw`.`view_check_option` AS `CHECK_OPTION`, + `vw`.`view_is_updatable` AS `IS_UPDATABLE`, + `vw`.`view_definer` AS `DEFINER`, + if((`vw`.`view_security_type` = 'DEFAULT'), 'DEFINER', `vw`.`view_security_type`) AS `SECURITY_TYPE`, + `cs`.`name` AS `CHARACTER_SET_CLIENT`, + `conn_coll`.`name` AS `COLLATION_CONNECTION` +from (((((`mysql`.`tables` `vw` join `mysql`.`schemata` `sch` + on ((`vw`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`collations` `conn_coll` + on ((`conn_coll`.`id` = `vw`.`view_connection_collation_id`))) join `mysql`.`collations` `client_coll` + on ((`client_coll`.`id` = `vw`.`view_client_collation_id`))) join `mysql`.`character_sets` `cs` + on ((`cs`.`id` = `client_coll`.`character_set_id`))) +where ((0 <> can_access_table(`sch`.`name`, `vw`.`name`)) and (`vw`.`type` = 'VIEW')); + diff --git a/IDEA/information_schema/VIEW_ROUTINE_USAGE.sql b/IDEA/information_schema/VIEW_ROUTINE_USAGE.sql new file mode 100644 index 00000000..50551987 --- /dev/null +++ b/IDEA/information_schema/VIEW_ROUTINE_USAGE.sql @@ -0,0 +1,17 @@ +create view information_schema.VIEW_ROUTINE_USAGE as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `TABLE_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `TABLE_SCHEMA`, + (`vw`.`name` collate utf8mb3_tolower_ci) AS `TABLE_NAME`, + (`vru`.`routine_catalog` collate utf8mb3_tolower_ci) AS `SPECIFIC_CATALOG`, + (`vru`.`routine_schema` collate utf8mb3_tolower_ci) AS `SPECIFIC_SCHEMA`, + `vru`.`routine_name` AS `SPECIFIC_NAME` +from ((((`mysql`.`tables` `vw` join `mysql`.`schemata` `sch` + on ((`vw`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`view_routine_usage` `vru` + on ((`vru`.`view_id` = `vw`.`id`))) join `mysql`.`routines` `rtn` + on (((`vru`.`routine_catalog` = `cat`.`name`) and (`vru`.`routine_schema` = `sch`.`name`) and + (`vru`.`routine_name` = `rtn`.`name`)))) +where ((`vw`.`type` = 'VIEW') and + (0 <> can_access_routine(`vru`.`routine_schema`, `vru`.`routine_name`, `rtn`.`type`, `rtn`.`definer`, false)) and + (0 <> can_access_view(`sch`.`name`, `vw`.`name`, `vw`.`view_definer`, `vw`.`options`))); + diff --git a/IDEA/information_schema/VIEW_TABLE_USAGE.sql b/IDEA/information_schema/VIEW_TABLE_USAGE.sql new file mode 100644 index 00000000..eb255537 --- /dev/null +++ b/IDEA/information_schema/VIEW_TABLE_USAGE.sql @@ -0,0 +1,13 @@ +create view information_schema.VIEW_TABLE_USAGE as +select (`cat`.`name` collate utf8mb3_tolower_ci) AS `VIEW_CATALOG`, + (`sch`.`name` collate utf8mb3_tolower_ci) AS `VIEW_SCHEMA`, + (`vw`.`name` collate utf8mb3_tolower_ci) AS `VIEW_NAME`, + (`vtu`.`table_catalog` collate utf8mb3_tolower_ci) AS `TABLE_CATALOG`, + (`vtu`.`table_schema` collate utf8mb3_tolower_ci) AS `TABLE_SCHEMA`, + (`vtu`.`table_name` collate utf8mb3_tolower_ci) AS `TABLE_NAME` +from (((`mysql`.`tables` `vw` join `mysql`.`schemata` `sch` + on ((`vw`.`schema_id` = `sch`.`id`))) join `mysql`.`catalogs` `cat` + on ((`cat`.`id` = `sch`.`catalog_id`))) join `mysql`.`view_table_usage` `vtu` on ((`vtu`.`view_id` = `vw`.`id`))) +where ((0 <> can_access_table(`vtu`.`table_schema`, `vtu`.`table_name`)) and (`vw`.`type` = 'VIEW') and + (0 <> can_access_view(`sch`.`name`, `vw`.`name`, `vw`.`view_definer`, `vw`.`options`))); + diff --git a/IDEA/mysql/columns_priv.sql b/IDEA/mysql/columns_priv.sql new file mode 100644 index 00000000..c9da0421 --- /dev/null +++ b/IDEA/mysql/columns_priv.sql @@ -0,0 +1,15 @@ +create table mysql.columns_priv +( + Host char(255) charset ascii default '' not null, + Db char(64) default '' not null, + User char(32) default '' not null, + Table_name char(64) default '' not null, + Column_name char(64) default '' not null, + Timestamp timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP, + Column_priv set ('Select', 'Insert', 'Update', 'References') charset utf8mb3 default '' not null, + primary key (Host, User, Db, Table_name, Column_name) +) + comment 'Column privileges' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/component.sql b/IDEA/mysql/component.sql new file mode 100644 index 00000000..323e6251 --- /dev/null +++ b/IDEA/mysql/component.sql @@ -0,0 +1,10 @@ +create table mysql.component +( + component_id int unsigned auto_increment + primary key, + component_group_id int unsigned not null, + component_urn text not null +) + comment 'Components' charset = utf8mb3 + row_format = DYNAMIC; + diff --git a/IDEA/mysql/db.sql b/IDEA/mysql/db.sql new file mode 100644 index 00000000..9d198c78 --- /dev/null +++ b/IDEA/mysql/db.sql @@ -0,0 +1,33 @@ +create table mysql.db +( + Host char(255) charset ascii default '' not null, + Db char(64) default '' not null, + User char(32) default '' not null, + Select_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Insert_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Update_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Delete_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Drop_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Grant_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + References_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Index_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Alter_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_tmp_table_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Lock_tables_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_view_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Show_view_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_routine_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Alter_routine_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Execute_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Event_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Trigger_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + primary key (Host, User, Db) +) + comment 'Database privileges' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + +create index User + on mysql.db (User); + diff --git a/IDEA/mysql/default_roles.sql b/IDEA/mysql/default_roles.sql new file mode 100644 index 00000000..49111bc9 --- /dev/null +++ b/IDEA/mysql/default_roles.sql @@ -0,0 +1,12 @@ +create table mysql.default_roles +( + HOST char(255) charset ascii default '' not null, + USER char(32) default '' not null, + DEFAULT_ROLE_HOST char(255) charset ascii default '%' not null, + DEFAULT_ROLE_USER char(32) default '' not null, + primary key (HOST, USER, DEFAULT_ROLE_HOST, DEFAULT_ROLE_USER) +) + comment 'Default roles' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/engine_cost.sql b/IDEA/mysql/engine_cost.sql new file mode 100644 index 00000000..ccea33b1 --- /dev/null +++ b/IDEA/mysql/engine_cost.sql @@ -0,0 +1,18 @@ +create table mysql.engine_cost +( + engine_name varchar(64) not null, + device_type int not null, + cost_name varchar(64) not null, + cost_value float null, + last_update timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP, + comment varchar(1024) null, + default_value float as ((case `cost_name` + when _utf8mb4'io_block_read_cost' then 1.0 + when _utf8mb4'memory_block_read_cost' then 0.25 + else NULL end)), + primary key (cost_name, engine_name, device_type) +) + charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/func.sql b/IDEA/mysql/func.sql new file mode 100644 index 00000000..66aa34fe --- /dev/null +++ b/IDEA/mysql/func.sql @@ -0,0 +1,12 @@ +create table mysql.func +( + name char(64) default '' not null + primary key, + ret tinyint default 0 not null, + dl char(128) default '' not null, + type enum ('function', 'aggregate') charset utf8mb3 not null +) + comment 'User defined functions' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/general_log.sql b/IDEA/mysql/general_log.sql new file mode 100644 index 00000000..bd3ea9a2 --- /dev/null +++ b/IDEA/mysql/general_log.sql @@ -0,0 +1,12 @@ +create table mysql.general_log +( + event_time timestamp(6) default CURRENT_TIMESTAMP(6) not null on update CURRENT_TIMESTAMP(6), + user_host mediumtext not null, + thread_id bigint unsigned not null, + server_id int unsigned not null, + command_type varchar(64) not null, + argument mediumblob not null +) + comment 'General log' engine = CSV + charset = utf8mb3; + diff --git a/IDEA/mysql/global_grants.sql b/IDEA/mysql/global_grants.sql new file mode 100644 index 00000000..6eb9ea9c --- /dev/null +++ b/IDEA/mysql/global_grants.sql @@ -0,0 +1,12 @@ +create table mysql.global_grants +( + USER char(32) default '' not null, + HOST char(255) charset ascii default '' not null, + PRIV char(32) charset utf8mb3 default '' not null, + WITH_GRANT_OPTION enum ('N', 'Y') charset utf8mb3 default 'N' not null, + primary key (USER, HOST, PRIV) +) + comment 'Extended global grants' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/gtid_executed.sql b/IDEA/mysql/gtid_executed.sql new file mode 100644 index 00000000..70873c15 --- /dev/null +++ b/IDEA/mysql/gtid_executed.sql @@ -0,0 +1,10 @@ +create table mysql.gtid_executed +( + source_uuid char(36) not null comment 'uuid of the source where the transaction was originally executed.', + interval_start bigint not null comment 'First number of interval.', + interval_end bigint not null comment 'Last number of interval.', + primary key (source_uuid, interval_start) +) + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/help_category.sql b/IDEA/mysql/help_category.sql new file mode 100644 index 00000000..33c3396e --- /dev/null +++ b/IDEA/mysql/help_category.sql @@ -0,0 +1,14 @@ +create table mysql.help_category +( + help_category_id smallint unsigned not null + primary key, + name char(64) not null, + parent_category_id smallint unsigned null, + url text not null, + constraint name + unique (name) +) + comment 'help categories' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/help_keyword.sql b/IDEA/mysql/help_keyword.sql new file mode 100644 index 00000000..08b23c94 --- /dev/null +++ b/IDEA/mysql/help_keyword.sql @@ -0,0 +1,12 @@ +create table mysql.help_keyword +( + help_keyword_id int unsigned not null + primary key, + name char(64) not null, + constraint name + unique (name) +) + comment 'help keywords' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/help_relation.sql b/IDEA/mysql/help_relation.sql new file mode 100644 index 00000000..59e2309d --- /dev/null +++ b/IDEA/mysql/help_relation.sql @@ -0,0 +1,10 @@ +create table mysql.help_relation +( + help_topic_id int unsigned not null, + help_keyword_id int unsigned not null, + primary key (help_keyword_id, help_topic_id) +) + comment 'keyword-topic relation' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/help_topic.sql b/IDEA/mysql/help_topic.sql new file mode 100644 index 00000000..065b7db2 --- /dev/null +++ b/IDEA/mysql/help_topic.sql @@ -0,0 +1,16 @@ +create table mysql.help_topic +( + help_topic_id int unsigned not null + primary key, + name char(64) not null, + help_category_id smallint unsigned not null, + description text not null, + example text not null, + url text not null, + constraint name + unique (name) +) + comment 'help topics' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/innodb_index_stats.sql b/IDEA/mysql/innodb_index_stats.sql new file mode 100644 index 00000000..e6beaec2 --- /dev/null +++ b/IDEA/mysql/innodb_index_stats.sql @@ -0,0 +1,16 @@ +create table mysql.innodb_index_stats +( + database_name varchar(64) not null, + table_name varchar(199) not null, + index_name varchar(64) not null, + last_update timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP, + stat_name varchar(64) not null, + stat_value bigint unsigned not null, + sample_size bigint unsigned null, + stat_description varchar(1024) not null, + primary key (database_name, table_name, index_name, stat_name) +) + collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/innodb_table_stats.sql b/IDEA/mysql/innodb_table_stats.sql new file mode 100644 index 00000000..fb8218f3 --- /dev/null +++ b/IDEA/mysql/innodb_table_stats.sql @@ -0,0 +1,14 @@ +create table mysql.innodb_table_stats +( + database_name varchar(64) not null, + table_name varchar(199) not null, + last_update timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP, + n_rows bigint unsigned not null, + clustered_index_size bigint unsigned not null, + sum_of_other_index_sizes bigint unsigned not null, + primary key (database_name, table_name) +) + collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/ndb_binlog_index.sql b/IDEA/mysql/ndb_binlog_index.sql new file mode 100644 index 00000000..18bdd621 --- /dev/null +++ b/IDEA/mysql/ndb_binlog_index.sql @@ -0,0 +1,20 @@ +create table mysql.ndb_binlog_index +( + Position bigint unsigned not null, + File varchar(255) not null, + epoch bigint unsigned not null, + inserts int unsigned not null, + updates int unsigned not null, + deletes int unsigned not null, + schemaops int unsigned not null, + orig_server_id int unsigned not null, + orig_epoch bigint unsigned not null, + gci int unsigned not null, + next_position bigint unsigned not null, + next_file varchar(255) not null, + primary key (epoch, orig_server_id, orig_epoch) +) + charset = latin1 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/password_history.sql b/IDEA/mysql/password_history.sql new file mode 100644 index 00000000..57d2db14 --- /dev/null +++ b/IDEA/mysql/password_history.sql @@ -0,0 +1,12 @@ +create table mysql.password_history +( + Host char(255) charset ascii default '' not null, + User char(32) default '' not null, + Password_timestamp timestamp(6) default CURRENT_TIMESTAMP(6) not null, + Password text null, + primary key (Host asc, User asc, Password_timestamp desc) +) + comment 'Password history for user accounts' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/plugin.sql b/IDEA/mysql/plugin.sql new file mode 100644 index 00000000..9c401c16 --- /dev/null +++ b/IDEA/mysql/plugin.sql @@ -0,0 +1,10 @@ +create table mysql.plugin +( + name varchar(64) default '' not null + primary key, + dl varchar(128) default '' not null +) + comment 'MySQL plugins' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/procs_priv.sql b/IDEA/mysql/procs_priv.sql new file mode 100644 index 00000000..41a3f9e7 --- /dev/null +++ b/IDEA/mysql/procs_priv.sql @@ -0,0 +1,19 @@ +create table mysql.procs_priv +( + Host char(255) charset ascii default '' not null, + Db char(64) default '' not null, + User char(32) default '' not null, + Routine_name char(64) charset utf8mb3 default '' not null, + Routine_type enum ('FUNCTION', 'PROCEDURE') not null, + Grantor varchar(288) default '' not null, + Proc_priv set ('Execute', 'Alter Routine', 'Grant') charset utf8mb3 default '' not null, + Timestamp timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP, + primary key (Host, User, Db, Routine_name, Routine_type) +) + comment 'Procedure privileges' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + +create index Grantor + on mysql.procs_priv (Grantor); + diff --git a/IDEA/mysql/proxies_priv.sql b/IDEA/mysql/proxies_priv.sql new file mode 100644 index 00000000..7cb5ccc1 --- /dev/null +++ b/IDEA/mysql/proxies_priv.sql @@ -0,0 +1,18 @@ +create table mysql.proxies_priv +( + Host char(255) charset ascii default '' not null, + User char(32) default '' not null, + Proxied_host char(255) charset ascii default '' not null, + Proxied_user char(32) default '' not null, + With_grant tinyint(1) default 0 not null, + Grantor varchar(288) default '' not null, + Timestamp timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP, + primary key (Host, User, Proxied_host, Proxied_user) +) + comment 'User proxy privileges' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + +create index Grantor + on mysql.proxies_priv (Grantor); + diff --git a/IDEA/mysql/replication_asynchronous_connection_failover.sql b/IDEA/mysql/replication_asynchronous_connection_failover.sql new file mode 100644 index 00000000..d20912ea --- /dev/null +++ b/IDEA/mysql/replication_asynchronous_connection_failover.sql @@ -0,0 +1,17 @@ +create table mysql.replication_asynchronous_connection_failover +( + Channel_name char(64) not null comment 'The replication channel name that connects source and replica.', + Host char(255) charset ascii not null comment 'The source hostname that the replica will attempt to switch over the replication connection to in case of a failure.', + Port int unsigned not null comment 'The source port that the replica will attempt to switch over the replication connection to in case of a failure.', + Network_namespace char(64) not null comment 'The source network namespace that the replica will attempt to switch over the replication connection to in case of a failure. If its value is empty, connections use the default (global) namespace.', + Weight tinyint unsigned not null comment 'The order in which the replica shall try to switch the connection over to when there are failures. Weight can be set to a number between 1 and 100, where 100 is the highest weight and 1 the lowest.', + Managed_name char(64) default '' not null comment 'The name of the group which this server belongs to.', + primary key (Channel_name, Host, Port, Network_namespace, Managed_name) +) + comment 'The source configuration details' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + +create index Channel_name + on mysql.replication_asynchronous_connection_failover (Channel_name, Managed_name); + diff --git a/IDEA/mysql/replication_asynchronous_connection_failover_managed.sql b/IDEA/mysql/replication_asynchronous_connection_failover_managed.sql new file mode 100644 index 00000000..d4fcf5bc --- /dev/null +++ b/IDEA/mysql/replication_asynchronous_connection_failover_managed.sql @@ -0,0 +1,12 @@ +create table mysql.replication_asynchronous_connection_failover_managed +( + Channel_name char(64) not null comment 'The replication channel name that connects source and replica.', + Managed_name char(64) default '' not null comment 'The name of the source which needs to be managed.', + Managed_type char(64) default '' not null comment 'Determines the managed type.', + Configuration json null comment 'The data to help manage group. For Managed_type = GroupReplication, Configuration value should contain {"Primary_weight": 80, "Secondary_weight": 60}, so that it assigns weight=80 to PRIMARY of the group, and weight=60 for rest of the members in mysql.replication_asynchronous_connection_failover table.', + primary key (Channel_name, Managed_name) +) + comment 'The managed source configuration details' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/replication_group_configuration_version.sql b/IDEA/mysql/replication_group_configuration_version.sql new file mode 100644 index 00000000..0fc425b2 --- /dev/null +++ b/IDEA/mysql/replication_group_configuration_version.sql @@ -0,0 +1,9 @@ +create table mysql.replication_group_configuration_version +( + name char(255) charset ascii not null comment 'The configuration name.' + primary key, + version bigint unsigned not null comment 'The version of the configuration name.' +) + comment 'The group configuration version.' row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/replication_group_member_actions.sql b/IDEA/mysql/replication_group_member_actions.sql new file mode 100644 index 00000000..74651c2a --- /dev/null +++ b/IDEA/mysql/replication_group_member_actions.sql @@ -0,0 +1,16 @@ +create table mysql.replication_group_member_actions +( + name char(255) charset ascii not null comment 'The action name.', + event char(64) charset ascii not null comment 'The event that will trigger the action.', + enabled tinyint(1) not null comment 'Whether the action is enabled.', + type char(64) charset ascii not null comment 'The action type.', + priority tinyint unsigned not null comment 'The order on which the action will be run, value between 1 and 100, lower values first.', + error_handling char(64) charset ascii not null comment 'On errors during the action will be handled: IGNORE, CRITICAL.', + primary key (name, event) +) + comment 'The member actions configuration.' row_format = DYNAMIC + stats_persistent = 0; + +create index event + on mysql.replication_group_member_actions (event); + diff --git a/IDEA/mysql/role_edges.sql b/IDEA/mysql/role_edges.sql new file mode 100644 index 00000000..9f1af6fd --- /dev/null +++ b/IDEA/mysql/role_edges.sql @@ -0,0 +1,13 @@ +create table mysql.role_edges +( + FROM_HOST char(255) charset ascii default '' not null, + FROM_USER char(32) default '' not null, + TO_HOST char(255) charset ascii default '' not null, + TO_USER char(32) default '' not null, + WITH_ADMIN_OPTION enum ('N', 'Y') charset utf8mb3 default 'N' not null, + primary key (FROM_HOST, FROM_USER, TO_HOST, TO_USER) +) + comment 'Role hierarchy and role grants' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/server_cost.sql b/IDEA/mysql/server_cost.sql new file mode 100644 index 00000000..b3314458 --- /dev/null +++ b/IDEA/mysql/server_cost.sql @@ -0,0 +1,20 @@ +create table mysql.server_cost +( + cost_name varchar(64) not null + primary key, + cost_value float null, + last_update timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP, + comment varchar(1024) null, + default_value float as ((case `cost_name` + when _utf8mb4'disk_temptable_create_cost' then 20.0 + when _utf8mb4'disk_temptable_row_cost' then 0.5 + when _utf8mb4'key_compare_cost' then 0.05 + when _utf8mb4'memory_temptable_create_cost' then 1.0 + when _utf8mb4'memory_temptable_row_cost' then 0.1 + when _utf8mb4'row_evaluate_cost' then 0.1 + else NULL end)) +) + charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/servers.sql b/IDEA/mysql/servers.sql new file mode 100644 index 00000000..4ee2bf69 --- /dev/null +++ b/IDEA/mysql/servers.sql @@ -0,0 +1,17 @@ +create table mysql.servers +( + Server_name char(64) default '' not null + primary key, + Host char(255) charset ascii default '' not null, + Db char(64) default '' not null, + Username char(64) default '' not null, + Password char(64) default '' not null, + Port int default 0 not null, + Socket char(64) default '' not null, + Wrapper char(64) default '' not null, + Owner char(64) default '' not null +) + comment 'MySQL Foreign Servers table' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/slave_master_info.sql b/IDEA/mysql/slave_master_info.sql new file mode 100644 index 00000000..3ee611f9 --- /dev/null +++ b/IDEA/mysql/slave_master_info.sql @@ -0,0 +1,41 @@ +create table mysql.slave_master_info +( + Number_of_lines int unsigned not null comment 'Number of lines in the file.', + Master_log_name text collate utf8mb3_bin not null comment 'The name of the master binary log currently being read from the master.', + Master_log_pos bigint unsigned not null comment 'The master log position of the last read event.', + Host varchar(255) charset ascii null comment 'The host name of the source.', + User_name text collate utf8mb3_bin null comment 'The user name used to connect to the master.', + User_password text collate utf8mb3_bin null comment 'The password used to connect to the master.', + Port int unsigned not null comment 'The network port used to connect to the master.', + Connect_retry int unsigned not null comment 'The period (in seconds) that the slave will wait before trying to reconnect to the master.', + Enabled_ssl tinyint(1) not null comment 'Indicates whether the server supports SSL connections.', + Ssl_ca text collate utf8mb3_bin null comment 'The file used for the Certificate Authority (CA) certificate.', + Ssl_capath text collate utf8mb3_bin null comment 'The path to the Certificate Authority (CA) certificates.', + Ssl_cert text collate utf8mb3_bin null comment 'The name of the SSL certificate file.', + Ssl_cipher text collate utf8mb3_bin null comment 'The name of the cipher in use for the SSL connection.', + Ssl_key text collate utf8mb3_bin null comment 'The name of the SSL key file.', + Ssl_verify_server_cert tinyint(1) not null comment 'Whether to verify the server certificate.', + Heartbeat float not null, + Bind text collate utf8mb3_bin null comment 'Displays which interface is employed when connecting to the MySQL server', + Ignored_server_ids text collate utf8mb3_bin null comment 'The number of server IDs to be ignored, followed by the actual server IDs', + Uuid text collate utf8mb3_bin null comment 'The master server uuid.', + Retry_count bigint unsigned not null comment 'Number of reconnect attempts, to the master, before giving up.', + Ssl_crl text collate utf8mb3_bin null comment 'The file used for the Certificate Revocation List (CRL)', + Ssl_crlpath text collate utf8mb3_bin null comment 'The path used for Certificate Revocation List (CRL) files', + Enabled_auto_position tinyint(1) not null comment 'Indicates whether GTIDs will be used to retrieve events from the master.', + Channel_name varchar(64) not null comment 'The channel on which the replica is connected to a source. Used in Multisource Replication' + primary key, + Tls_version text collate utf8mb3_bin null comment 'Tls version', + Public_key_path text collate utf8mb3_bin null comment 'The file containing public key of master server.', + Get_public_key tinyint(1) not null comment 'Preference to get public key from master.', + Network_namespace text collate utf8mb3_bin null comment 'Network namespace used for communication with the master server.', + Master_compression_algorithm varchar(64) collate utf8mb3_bin not null comment 'Compression algorithm supported for data transfer between source and replica.', + Master_zstd_compression_level int unsigned not null comment 'Compression level associated with zstd compression algorithm.', + Tls_ciphersuites text collate utf8mb3_bin null comment 'Ciphersuites used for TLS 1.3 communication with the master server.', + Source_connection_auto_failover tinyint(1) default 0 not null comment 'Indicates whether the channel connection failover is enabled.', + Gtid_only tinyint(1) default 0 not null comment 'Indicates if this channel only uses GTIDs and does not persist positions.' +) + comment 'Master Information' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/slave_relay_log_info.sql b/IDEA/mysql/slave_relay_log_info.sql new file mode 100644 index 00000000..0b45f3e7 --- /dev/null +++ b/IDEA/mysql/slave_relay_log_info.sql @@ -0,0 +1,23 @@ +create table mysql.slave_relay_log_info +( + Number_of_lines int unsigned not null comment 'Number of lines in the file or rows in the table. Used to version table definitions.', + Relay_log_name text collate utf8mb3_bin null comment 'The name of the current relay log file.', + Relay_log_pos bigint unsigned null comment 'The relay log position of the last executed event.', + Master_log_name text collate utf8mb3_bin null comment 'The name of the master binary log file from which the events in the relay log file were read.', + Master_log_pos bigint unsigned null comment 'The master log position of the last executed event.', + Sql_delay int null comment 'The number of seconds that the slave must lag behind the master.', + Number_of_workers int unsigned null, + Id int unsigned null comment 'Internal Id that uniquely identifies this record.', + Channel_name varchar(64) not null comment 'The channel on which the replica is connected to a source. Used in Multisource Replication' + primary key, + Privilege_checks_username varchar(32) collate utf8mb3_bin null comment 'Username part of PRIVILEGE_CHECKS_USER.', + Privilege_checks_hostname varchar(255) charset ascii null comment 'Hostname part of PRIVILEGE_CHECKS_USER.', + Require_row_format tinyint(1) not null comment 'Indicates whether the channel shall only accept row based events.', + Require_table_primary_key_check enum ('STREAM', 'ON', 'OFF', 'GENERATE') default 'STREAM' not null comment 'Indicates what is the channel policy regarding tables without primary keys on create and alter table queries', + Assign_gtids_to_anonymous_transactions_type enum ('OFF', 'LOCAL', 'UUID') default 'OFF' not null comment 'Indicates whether the channel will generate a new GTID for anonymous transactions. OFF means that anonymous transactions will remain anonymous. LOCAL means that anonymous transactions will be assigned a newly generated GTID based on server_uuid. UUID indicates that anonymous transactions will be assigned a newly generated GTID based on Assign_gtids_to_anonymous_transactions_value', + Assign_gtids_to_anonymous_transactions_value text collate utf8mb3_bin null comment 'Indicates the UUID used while generating GTIDs for anonymous transactions' +) + comment 'Relay Log Information' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/slave_worker_info.sql b/IDEA/mysql/slave_worker_info.sql new file mode 100644 index 00000000..bafd36f4 --- /dev/null +++ b/IDEA/mysql/slave_worker_info.sql @@ -0,0 +1,21 @@ +create table mysql.slave_worker_info +( + Id int unsigned not null, + Relay_log_name text collate utf8mb3_bin not null, + Relay_log_pos bigint unsigned not null, + Master_log_name text collate utf8mb3_bin not null, + Master_log_pos bigint unsigned not null, + Checkpoint_relay_log_name text collate utf8mb3_bin not null, + Checkpoint_relay_log_pos bigint unsigned not null, + Checkpoint_master_log_name text collate utf8mb3_bin not null, + Checkpoint_master_log_pos bigint unsigned not null, + Checkpoint_seqno int unsigned not null, + Checkpoint_group_size int unsigned not null, + Checkpoint_group_bitmap blob not null, + Channel_name varchar(64) not null comment 'The channel on which the replica is connected to a source. Used in Multisource Replication', + primary key (Channel_name, Id) +) + comment 'Worker Information' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/slow_log.sql b/IDEA/mysql/slow_log.sql new file mode 100644 index 00000000..6c76a307 --- /dev/null +++ b/IDEA/mysql/slow_log.sql @@ -0,0 +1,18 @@ +create table mysql.slow_log +( + start_time timestamp(6) default CURRENT_TIMESTAMP(6) not null on update CURRENT_TIMESTAMP(6), + user_host mediumtext not null, + query_time time(6) not null, + lock_time time(6) not null, + rows_sent int not null, + rows_examined int not null, + db varchar(512) not null, + last_insert_id int not null, + insert_id int not null, + server_id int unsigned not null, + sql_text mediumblob not null, + thread_id bigint unsigned not null +) + comment 'Slow log' engine = CSV + charset = utf8mb3; + diff --git a/IDEA/mysql/tables_priv.sql b/IDEA/mysql/tables_priv.sql new file mode 100644 index 00000000..b76376ce --- /dev/null +++ b/IDEA/mysql/tables_priv.sql @@ -0,0 +1,19 @@ +create table mysql.tables_priv +( + Host char(255) charset ascii default '' not null, + Db char(64) default '' not null, + User char(32) default '' not null, + Table_name char(64) default '' not null, + Grantor varchar(288) default '' not null, + Timestamp timestamp default CURRENT_TIMESTAMP not null on update CURRENT_TIMESTAMP, + Table_priv set ('Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter', 'Create View', 'Show view', 'Trigger') charset utf8mb3 default '' not null, + Column_priv set ('Select', 'Insert', 'Update', 'References') charset utf8mb3 default '' not null, + primary key (Host, User, Db, Table_name) +) + comment 'Table privileges' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + +create index Grantor + on mysql.tables_priv (Grantor); + diff --git a/IDEA/mysql/time_zone.sql b/IDEA/mysql/time_zone.sql new file mode 100644 index 00000000..8f49aac1 --- /dev/null +++ b/IDEA/mysql/time_zone.sql @@ -0,0 +1,10 @@ +create table mysql.time_zone +( + Time_zone_id int unsigned auto_increment + primary key, + Use_leap_seconds enum ('Y', 'N') default 'N' not null +) + comment 'Time zones' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/time_zone_leap_second.sql b/IDEA/mysql/time_zone_leap_second.sql new file mode 100644 index 00000000..6ceb1770 --- /dev/null +++ b/IDEA/mysql/time_zone_leap_second.sql @@ -0,0 +1,10 @@ +create table mysql.time_zone_leap_second +( + Transition_time bigint not null + primary key, + Correction int not null +) + comment 'Leap seconds information for time zones' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/time_zone_name.sql b/IDEA/mysql/time_zone_name.sql new file mode 100644 index 00000000..8865a095 --- /dev/null +++ b/IDEA/mysql/time_zone_name.sql @@ -0,0 +1,10 @@ +create table mysql.time_zone_name +( + Name char(64) not null + primary key, + Time_zone_id int unsigned not null +) + comment 'Time zone names' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/time_zone_transition.sql b/IDEA/mysql/time_zone_transition.sql new file mode 100644 index 00000000..63b0a952 --- /dev/null +++ b/IDEA/mysql/time_zone_transition.sql @@ -0,0 +1,11 @@ +create table mysql.time_zone_transition +( + Time_zone_id int unsigned not null, + Transition_time bigint not null, + Transition_type_id int unsigned not null, + primary key (Time_zone_id, Transition_time) +) + comment 'Time zone transitions' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/time_zone_transition_type.sql b/IDEA/mysql/time_zone_transition_type.sql new file mode 100644 index 00000000..03d4696e --- /dev/null +++ b/IDEA/mysql/time_zone_transition_type.sql @@ -0,0 +1,13 @@ +create table mysql.time_zone_transition_type +( + Time_zone_id int unsigned not null, + Transition_type_id int unsigned not null, + Offset int default 0 not null, + Is_DST tinyint unsigned default '0' not null, + Abbreviation char(8) default '' not null, + primary key (Time_zone_id, Transition_type_id) +) + comment 'Time zone transition types' charset = utf8mb3 + row_format = DYNAMIC + stats_persistent = 0; + diff --git a/IDEA/mysql/user.sql b/IDEA/mysql/user.sql new file mode 100644 index 00000000..c0e91d82 --- /dev/null +++ b/IDEA/mysql/user.sql @@ -0,0 +1,61 @@ +create table mysql.user +( + Host char(255) charset ascii default '' not null, + User char(32) default '' not null, + Select_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Insert_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Update_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Delete_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Drop_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Reload_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Shutdown_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Process_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + File_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Grant_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + References_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Index_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Alter_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Show_db_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Super_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_tmp_table_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Lock_tables_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Execute_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Repl_slave_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Repl_client_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_view_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Show_view_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_routine_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Alter_routine_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_user_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Event_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Trigger_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_tablespace_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + ssl_type enum ('', 'ANY', 'X509', 'SPECIFIED') charset utf8mb3 default '' not null, + ssl_cipher blob not null, + x509_issuer blob not null, + x509_subject blob not null, + max_questions int unsigned default '0' not null, + max_updates int unsigned default '0' not null, + max_connections int unsigned default '0' not null, + max_user_connections int unsigned default '0' not null, + plugin char(64) default 'caching_sha2_password' not null, + authentication_string text null, + password_expired enum ('N', 'Y') charset utf8mb3 default 'N' not null, + password_last_changed timestamp null, + password_lifetime smallint unsigned null, + account_locked enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Create_role_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Drop_role_priv enum ('N', 'Y') charset utf8mb3 default 'N' not null, + Password_reuse_history smallint unsigned null, + Password_reuse_time smallint unsigned null, + Password_require_current enum ('N', 'Y') charset utf8mb3 null, + User_attributes json null, + primary key (Host, User) +) + comment 'Users and global privileges' collate = utf8mb3_bin + row_format = DYNAMIC + stats_persistent = 0; + +grant select on table mysql.user to 'mysql.session'@localhost; + diff --git a/IDEA/performance_schema/accounts.sql b/IDEA/performance_schema/accounts.sql new file mode 100644 index 00000000..1d22ea88 --- /dev/null +++ b/IDEA/performance_schema/accounts.sql @@ -0,0 +1,13 @@ +create table performance_schema.accounts +( + USER char(32) collate utf8mb4_bin null, + HOST char(255) charset ascii null, + CURRENT_CONNECTIONS bigint not null, + TOTAL_CONNECTIONS bigint not null, + MAX_SESSION_CONTROLLED_MEMORY bigint unsigned not null, + MAX_SESSION_TOTAL_MEMORY bigint unsigned not null, + constraint ACCOUNT + unique (USER, HOST) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/binary_log_transaction_compression_stats.sql b/IDEA/performance_schema/binary_log_transaction_compression_stats.sql new file mode 100644 index 00000000..28e14c9e --- /dev/null +++ b/IDEA/performance_schema/binary_log_transaction_compression_stats.sql @@ -0,0 +1,19 @@ +create table performance_schema.binary_log_transaction_compression_stats +( + LOG_TYPE enum ('BINARY', 'RELAY') not null comment 'The log type to which the transactions were written.', + COMPRESSION_TYPE varchar(64) not null comment 'The transaction compression algorithm used.', + TRANSACTION_COUNTER bigint unsigned not null comment 'Number of transactions written to the log', + COMPRESSED_BYTES_COUNTER bigint unsigned not null comment 'The total number of bytes compressed.', + UNCOMPRESSED_BYTES_COUNTER bigint unsigned not null comment 'The total number of bytes uncompressed.', + COMPRESSION_PERCENTAGE smallint not null comment 'The compression ratio as a percentage.', + FIRST_TRANSACTION_ID text null comment 'The first transaction written.', + FIRST_TRANSACTION_COMPRESSED_BYTES bigint unsigned not null comment 'First transaction written compressed bytes.', + FIRST_TRANSACTION_UNCOMPRESSED_BYTES bigint unsigned not null comment 'First transaction written uncompressed bytes.', + FIRST_TRANSACTION_TIMESTAMP timestamp(6) null comment 'When the first transaction was written.', + LAST_TRANSACTION_ID text null comment 'The last transaction written.', + LAST_TRANSACTION_COMPRESSED_BYTES bigint unsigned not null comment 'Last transaction written compressed bytes.', + LAST_TRANSACTION_UNCOMPRESSED_BYTES bigint unsigned not null comment 'Last transaction written uncompressed bytes.', + LAST_TRANSACTION_TIMESTAMP timestamp(6) null comment 'When the last transaction was written.' +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/cond_instances.sql b/IDEA/performance_schema/cond_instances.sql new file mode 100644 index 00000000..3438dd0d --- /dev/null +++ b/IDEA/performance_schema/cond_instances.sql @@ -0,0 +1,12 @@ +create table performance_schema.cond_instances +( + NAME varchar(128) not null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash +) + engine = PERFORMANCE_SCHEMA; + +create index NAME + on performance_schema.cond_instances (NAME) + using hash; + diff --git a/IDEA/performance_schema/data_lock_waits.sql b/IDEA/performance_schema/data_lock_waits.sql new file mode 100644 index 00000000..25db7369 --- /dev/null +++ b/IDEA/performance_schema/data_lock_waits.sql @@ -0,0 +1,41 @@ +create table performance_schema.data_lock_waits +( + ENGINE varchar(32) not null, + REQUESTING_ENGINE_LOCK_ID varchar(128) not null, + REQUESTING_ENGINE_TRANSACTION_ID bigint unsigned null, + REQUESTING_THREAD_ID bigint unsigned null, + REQUESTING_EVENT_ID bigint unsigned null, + REQUESTING_OBJECT_INSTANCE_BEGIN bigint unsigned not null, + BLOCKING_ENGINE_LOCK_ID varchar(128) not null, + BLOCKING_ENGINE_TRANSACTION_ID bigint unsigned null, + BLOCKING_THREAD_ID bigint unsigned null, + BLOCKING_EVENT_ID bigint unsigned null, + BLOCKING_OBJECT_INSTANCE_BEGIN bigint unsigned not null, + primary key (REQUESTING_ENGINE_LOCK_ID, BLOCKING_ENGINE_LOCK_ID, ENGINE) using hash +) + engine = PERFORMANCE_SCHEMA; + +create index BLOCKING_ENGINE_LOCK_ID + on performance_schema.data_lock_waits (BLOCKING_ENGINE_LOCK_ID, ENGINE) + using hash; + +create index BLOCKING_ENGINE_TRANSACTION_ID + on performance_schema.data_lock_waits (BLOCKING_ENGINE_TRANSACTION_ID, ENGINE) + using hash; + +create index BLOCKING_THREAD_ID + on performance_schema.data_lock_waits (BLOCKING_THREAD_ID, BLOCKING_EVENT_ID) + using hash; + +create index REQUESTING_ENGINE_LOCK_ID + on performance_schema.data_lock_waits (REQUESTING_ENGINE_LOCK_ID, ENGINE) + using hash; + +create index REQUESTING_ENGINE_TRANSACTION_ID + on performance_schema.data_lock_waits (REQUESTING_ENGINE_TRANSACTION_ID, ENGINE) + using hash; + +create index REQUESTING_THREAD_ID + on performance_schema.data_lock_waits (REQUESTING_THREAD_ID, REQUESTING_EVENT_ID) + using hash; + diff --git a/IDEA/performance_schema/data_locks.sql b/IDEA/performance_schema/data_locks.sql new file mode 100644 index 00000000..5b3170f5 --- /dev/null +++ b/IDEA/performance_schema/data_locks.sql @@ -0,0 +1,33 @@ +create table performance_schema.data_locks +( + ENGINE varchar(32) not null, + ENGINE_LOCK_ID varchar(128) not null, + ENGINE_TRANSACTION_ID bigint unsigned null, + THREAD_ID bigint unsigned null, + EVENT_ID bigint unsigned null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(64) null, + PARTITION_NAME varchar(64) null, + SUBPARTITION_NAME varchar(64) null, + INDEX_NAME varchar(64) null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null, + LOCK_TYPE varchar(32) not null, + LOCK_MODE varchar(32) not null, + LOCK_STATUS varchar(32) not null, + LOCK_DATA varchar(8192) null, + primary key (ENGINE_LOCK_ID, ENGINE) using hash +) + engine = PERFORMANCE_SCHEMA; + +create index ENGINE_TRANSACTION_ID + on performance_schema.data_locks (ENGINE_TRANSACTION_ID, ENGINE) + using hash; + +create index OBJECT_SCHEMA + on performance_schema.data_locks (OBJECT_SCHEMA, OBJECT_NAME, PARTITION_NAME, SUBPARTITION_NAME) + using hash; + +create index THREAD_ID + on performance_schema.data_locks (THREAD_ID, EVENT_ID) + using hash; + diff --git a/IDEA/performance_schema/error_log.sql b/IDEA/performance_schema/error_log.sql new file mode 100644 index 00000000..f3517abd --- /dev/null +++ b/IDEA/performance_schema/error_log.sql @@ -0,0 +1,28 @@ +create table performance_schema.error_log +( + LOGGED timestamp(6) not null + primary key using hash, + THREAD_ID bigint unsigned null, + PRIO enum ('System', 'Error', 'Warning', 'Note') not null, + ERROR_CODE varchar(10) null, + SUBSYSTEM varchar(7) null, + DATA text not null +) + engine = PERFORMANCE_SCHEMA; + +create index ERROR_CODE + on performance_schema.error_log (ERROR_CODE) + using hash; + +create index PRIO + on performance_schema.error_log (PRIO) + using hash; + +create index SUBSYSTEM + on performance_schema.error_log (SUBSYSTEM) + using hash; + +create index THREAD_ID + on performance_schema.error_log (THREAD_ID) + using hash; + diff --git a/IDEA/performance_schema/events_errors_summary_by_account_by_error.sql b/IDEA/performance_schema/events_errors_summary_by_account_by_error.sql new file mode 100644 index 00000000..083c435f --- /dev/null +++ b/IDEA/performance_schema/events_errors_summary_by_account_by_error.sql @@ -0,0 +1,16 @@ +create table performance_schema.events_errors_summary_by_account_by_error +( + USER char(32) collate utf8mb4_bin null, + HOST char(255) charset ascii null, + ERROR_NUMBER int null, + ERROR_NAME varchar(64) null, + SQL_STATE varchar(5) null, + SUM_ERROR_RAISED bigint unsigned not null, + SUM_ERROR_HANDLED bigint unsigned not null, + FIRST_SEEN timestamp null, + LAST_SEEN timestamp null, + constraint ACCOUNT + unique (USER, HOST, ERROR_NUMBER) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_errors_summary_by_host_by_error.sql b/IDEA/performance_schema/events_errors_summary_by_host_by_error.sql new file mode 100644 index 00000000..0f39748d --- /dev/null +++ b/IDEA/performance_schema/events_errors_summary_by_host_by_error.sql @@ -0,0 +1,15 @@ +create table performance_schema.events_errors_summary_by_host_by_error +( + HOST char(255) charset ascii null, + ERROR_NUMBER int null, + ERROR_NAME varchar(64) null, + SQL_STATE varchar(5) null, + SUM_ERROR_RAISED bigint unsigned not null, + SUM_ERROR_HANDLED bigint unsigned not null, + FIRST_SEEN timestamp null, + LAST_SEEN timestamp null, + constraint HOST + unique (HOST, ERROR_NUMBER) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_errors_summary_by_thread_by_error.sql b/IDEA/performance_schema/events_errors_summary_by_thread_by_error.sql new file mode 100644 index 00000000..64e04b49 --- /dev/null +++ b/IDEA/performance_schema/events_errors_summary_by_thread_by_error.sql @@ -0,0 +1,15 @@ +create table performance_schema.events_errors_summary_by_thread_by_error +( + THREAD_ID bigint unsigned not null, + ERROR_NUMBER int null, + ERROR_NAME varchar(64) null, + SQL_STATE varchar(5) null, + SUM_ERROR_RAISED bigint unsigned not null, + SUM_ERROR_HANDLED bigint unsigned not null, + FIRST_SEEN timestamp null, + LAST_SEEN timestamp null, + constraint THREAD_ID + unique (THREAD_ID, ERROR_NUMBER) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_errors_summary_by_user_by_error.sql b/IDEA/performance_schema/events_errors_summary_by_user_by_error.sql new file mode 100644 index 00000000..678767fd --- /dev/null +++ b/IDEA/performance_schema/events_errors_summary_by_user_by_error.sql @@ -0,0 +1,15 @@ +create table performance_schema.events_errors_summary_by_user_by_error +( + USER char(32) collate utf8mb4_bin null, + ERROR_NUMBER int null, + ERROR_NAME varchar(64) null, + SQL_STATE varchar(5) null, + SUM_ERROR_RAISED bigint unsigned not null, + SUM_ERROR_HANDLED bigint unsigned not null, + FIRST_SEEN timestamp null, + LAST_SEEN timestamp null, + constraint USER + unique (USER, ERROR_NUMBER) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_errors_summary_global_by_error.sql b/IDEA/performance_schema/events_errors_summary_global_by_error.sql new file mode 100644 index 00000000..d07a595f --- /dev/null +++ b/IDEA/performance_schema/events_errors_summary_global_by_error.sql @@ -0,0 +1,14 @@ +create table performance_schema.events_errors_summary_global_by_error +( + ERROR_NUMBER int null, + ERROR_NAME varchar(64) null, + SQL_STATE varchar(5) null, + SUM_ERROR_RAISED bigint unsigned not null, + SUM_ERROR_HANDLED bigint unsigned not null, + FIRST_SEEN timestamp null, + LAST_SEEN timestamp null, + constraint ERROR_NUMBER + unique (ERROR_NUMBER) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_stages_current.sql b/IDEA/performance_schema/events_stages_current.sql new file mode 100644 index 00000000..bd9b4d6c --- /dev/null +++ b/IDEA/performance_schema/events_stages_current.sql @@ -0,0 +1,18 @@ +create table performance_schema.events_stages_current +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + WORK_COMPLETED bigint unsigned null, + WORK_ESTIMATED bigint unsigned null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + primary key (THREAD_ID, EVENT_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_stages_history.sql b/IDEA/performance_schema/events_stages_history.sql new file mode 100644 index 00000000..eb858ee1 --- /dev/null +++ b/IDEA/performance_schema/events_stages_history.sql @@ -0,0 +1,18 @@ +create table performance_schema.events_stages_history +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + WORK_COMPLETED bigint unsigned null, + WORK_ESTIMATED bigint unsigned null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + primary key (THREAD_ID, EVENT_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_stages_history_long.sql b/IDEA/performance_schema/events_stages_history_long.sql new file mode 100644 index 00000000..a7e3904c --- /dev/null +++ b/IDEA/performance_schema/events_stages_history_long.sql @@ -0,0 +1,17 @@ +create table performance_schema.events_stages_history_long +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + WORK_COMPLETED bigint unsigned null, + WORK_ESTIMATED bigint unsigned null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_stages_summary_by_account_by_event_name.sql b/IDEA/performance_schema/events_stages_summary_by_account_by_event_name.sql new file mode 100644 index 00000000..cbd0657e --- /dev/null +++ b/IDEA/performance_schema/events_stages_summary_by_account_by_event_name.sql @@ -0,0 +1,15 @@ +create table performance_schema.events_stages_summary_by_account_by_event_name +( + USER char(32) collate utf8mb4_bin null, + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + constraint ACCOUNT + unique (USER, HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_stages_summary_by_host_by_event_name.sql b/IDEA/performance_schema/events_stages_summary_by_host_by_event_name.sql new file mode 100644 index 00000000..62e99e5b --- /dev/null +++ b/IDEA/performance_schema/events_stages_summary_by_host_by_event_name.sql @@ -0,0 +1,14 @@ +create table performance_schema.events_stages_summary_by_host_by_event_name +( + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + constraint HOST + unique (HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_stages_summary_by_thread_by_event_name.sql b/IDEA/performance_schema/events_stages_summary_by_thread_by_event_name.sql new file mode 100644 index 00000000..eed524d0 --- /dev/null +++ b/IDEA/performance_schema/events_stages_summary_by_thread_by_event_name.sql @@ -0,0 +1,13 @@ +create table performance_schema.events_stages_summary_by_thread_by_event_name +( + THREAD_ID bigint unsigned not null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + primary key (THREAD_ID, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_stages_summary_by_user_by_event_name.sql b/IDEA/performance_schema/events_stages_summary_by_user_by_event_name.sql new file mode 100644 index 00000000..9d505131 --- /dev/null +++ b/IDEA/performance_schema/events_stages_summary_by_user_by_event_name.sql @@ -0,0 +1,14 @@ +create table performance_schema.events_stages_summary_by_user_by_event_name +( + USER char(32) collate utf8mb4_bin null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + constraint USER + unique (USER, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_stages_summary_global_by_event_name.sql b/IDEA/performance_schema/events_stages_summary_global_by_event_name.sql new file mode 100644 index 00000000..6a79c5c1 --- /dev/null +++ b/IDEA/performance_schema/events_stages_summary_global_by_event_name.sql @@ -0,0 +1,12 @@ +create table performance_schema.events_stages_summary_global_by_event_name +( + EVENT_NAME varchar(128) not null + primary key using hash, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_current.sql b/IDEA/performance_schema/events_statements_current.sql new file mode 100644 index 00000000..1a4ee2c8 --- /dev/null +++ b/IDEA/performance_schema/events_statements_current.sql @@ -0,0 +1,52 @@ +create table performance_schema.events_statements_current +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + LOCK_TIME bigint unsigned not null, + SQL_TEXT longtext null, + DIGEST varchar(64) null, + DIGEST_TEXT longtext null, + CURRENT_SCHEMA varchar(64) null, + OBJECT_TYPE varchar(64) null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(64) null, + OBJECT_INSTANCE_BEGIN bigint unsigned null, + MYSQL_ERRNO int null, + RETURNED_SQLSTATE varchar(5) null, + MESSAGE_TEXT varchar(128) null, + ERRORS bigint unsigned not null, + WARNINGS bigint unsigned not null, + ROWS_AFFECTED bigint unsigned not null, + ROWS_SENT bigint unsigned not null, + ROWS_EXAMINED bigint unsigned not null, + CREATED_TMP_DISK_TABLES bigint unsigned not null, + CREATED_TMP_TABLES bigint unsigned not null, + SELECT_FULL_JOIN bigint unsigned not null, + SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SELECT_RANGE bigint unsigned not null, + SELECT_RANGE_CHECK bigint unsigned not null, + SELECT_SCAN bigint unsigned not null, + SORT_MERGE_PASSES bigint unsigned not null, + SORT_RANGE bigint unsigned not null, + SORT_ROWS bigint unsigned not null, + SORT_SCAN bigint unsigned not null, + NO_INDEX_USED bigint unsigned not null, + NO_GOOD_INDEX_USED bigint unsigned not null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + NESTING_EVENT_LEVEL int null, + STATEMENT_ID bigint unsigned null, + CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + EXECUTION_ENGINE enum ('PRIMARY', 'SECONDARY') null, + primary key (THREAD_ID, EVENT_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_histogram_by_digest.sql b/IDEA/performance_schema/events_statements_histogram_by_digest.sql new file mode 100644 index 00000000..490c5807 --- /dev/null +++ b/IDEA/performance_schema/events_statements_histogram_by_digest.sql @@ -0,0 +1,15 @@ +create table performance_schema.events_statements_histogram_by_digest +( + SCHEMA_NAME varchar(64) null, + DIGEST varchar(64) null, + BUCKET_NUMBER int unsigned not null, + BUCKET_TIMER_LOW bigint unsigned not null, + BUCKET_TIMER_HIGH bigint unsigned not null, + COUNT_BUCKET bigint unsigned not null, + COUNT_BUCKET_AND_LOWER bigint unsigned not null, + BUCKET_QUANTILE double(7, 6) not null, + constraint SCHEMA_NAME + unique (SCHEMA_NAME, DIGEST, BUCKET_NUMBER) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_histogram_global.sql b/IDEA/performance_schema/events_statements_histogram_global.sql new file mode 100644 index 00000000..47066a27 --- /dev/null +++ b/IDEA/performance_schema/events_statements_histogram_global.sql @@ -0,0 +1,12 @@ +create table performance_schema.events_statements_histogram_global +( + BUCKET_NUMBER int unsigned not null + primary key using hash, + BUCKET_TIMER_LOW bigint unsigned not null, + BUCKET_TIMER_HIGH bigint unsigned not null, + COUNT_BUCKET bigint unsigned not null, + COUNT_BUCKET_AND_LOWER bigint unsigned not null, + BUCKET_QUANTILE double(7, 6) not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_history.sql b/IDEA/performance_schema/events_statements_history.sql new file mode 100644 index 00000000..7f391476 --- /dev/null +++ b/IDEA/performance_schema/events_statements_history.sql @@ -0,0 +1,52 @@ +create table performance_schema.events_statements_history +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + LOCK_TIME bigint unsigned not null, + SQL_TEXT longtext null, + DIGEST varchar(64) null, + DIGEST_TEXT longtext null, + CURRENT_SCHEMA varchar(64) null, + OBJECT_TYPE varchar(64) null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(64) null, + OBJECT_INSTANCE_BEGIN bigint unsigned null, + MYSQL_ERRNO int null, + RETURNED_SQLSTATE varchar(5) null, + MESSAGE_TEXT varchar(128) null, + ERRORS bigint unsigned not null, + WARNINGS bigint unsigned not null, + ROWS_AFFECTED bigint unsigned not null, + ROWS_SENT bigint unsigned not null, + ROWS_EXAMINED bigint unsigned not null, + CREATED_TMP_DISK_TABLES bigint unsigned not null, + CREATED_TMP_TABLES bigint unsigned not null, + SELECT_FULL_JOIN bigint unsigned not null, + SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SELECT_RANGE bigint unsigned not null, + SELECT_RANGE_CHECK bigint unsigned not null, + SELECT_SCAN bigint unsigned not null, + SORT_MERGE_PASSES bigint unsigned not null, + SORT_RANGE bigint unsigned not null, + SORT_ROWS bigint unsigned not null, + SORT_SCAN bigint unsigned not null, + NO_INDEX_USED bigint unsigned not null, + NO_GOOD_INDEX_USED bigint unsigned not null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + NESTING_EVENT_LEVEL int null, + STATEMENT_ID bigint unsigned null, + CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + EXECUTION_ENGINE enum ('PRIMARY', 'SECONDARY') null, + primary key (THREAD_ID, EVENT_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_history_long.sql b/IDEA/performance_schema/events_statements_history_long.sql new file mode 100644 index 00000000..87c98300 --- /dev/null +++ b/IDEA/performance_schema/events_statements_history_long.sql @@ -0,0 +1,51 @@ +create table performance_schema.events_statements_history_long +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + LOCK_TIME bigint unsigned not null, + SQL_TEXT longtext null, + DIGEST varchar(64) null, + DIGEST_TEXT longtext null, + CURRENT_SCHEMA varchar(64) null, + OBJECT_TYPE varchar(64) null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(64) null, + OBJECT_INSTANCE_BEGIN bigint unsigned null, + MYSQL_ERRNO int null, + RETURNED_SQLSTATE varchar(5) null, + MESSAGE_TEXT varchar(128) null, + ERRORS bigint unsigned not null, + WARNINGS bigint unsigned not null, + ROWS_AFFECTED bigint unsigned not null, + ROWS_SENT bigint unsigned not null, + ROWS_EXAMINED bigint unsigned not null, + CREATED_TMP_DISK_TABLES bigint unsigned not null, + CREATED_TMP_TABLES bigint unsigned not null, + SELECT_FULL_JOIN bigint unsigned not null, + SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SELECT_RANGE bigint unsigned not null, + SELECT_RANGE_CHECK bigint unsigned not null, + SELECT_SCAN bigint unsigned not null, + SORT_MERGE_PASSES bigint unsigned not null, + SORT_RANGE bigint unsigned not null, + SORT_ROWS bigint unsigned not null, + SORT_SCAN bigint unsigned not null, + NO_INDEX_USED bigint unsigned not null, + NO_GOOD_INDEX_USED bigint unsigned not null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + NESTING_EVENT_LEVEL int null, + STATEMENT_ID bigint unsigned null, + CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + EXECUTION_ENGINE enum ('PRIMARY', 'SECONDARY') null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_summary_by_account_by_event_name.sql b/IDEA/performance_schema/events_statements_summary_by_account_by_event_name.sql new file mode 100644 index 00000000..75512d17 --- /dev/null +++ b/IDEA/performance_schema/events_statements_summary_by_account_by_event_name.sql @@ -0,0 +1,38 @@ +create table performance_schema.events_statements_summary_by_account_by_event_name +( + USER char(32) collate utf8mb4_bin null, + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + SUM_LOCK_TIME bigint unsigned not null, + SUM_ERRORS bigint unsigned not null, + SUM_WARNINGS bigint unsigned not null, + SUM_ROWS_AFFECTED bigint unsigned not null, + SUM_ROWS_SENT bigint unsigned not null, + SUM_ROWS_EXAMINED bigint unsigned not null, + SUM_CREATED_TMP_DISK_TABLES bigint unsigned not null, + SUM_CREATED_TMP_TABLES bigint unsigned not null, + SUM_SELECT_FULL_JOIN bigint unsigned not null, + SUM_SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SUM_SELECT_RANGE bigint unsigned not null, + SUM_SELECT_RANGE_CHECK bigint unsigned not null, + SUM_SELECT_SCAN bigint unsigned not null, + SUM_SORT_MERGE_PASSES bigint unsigned not null, + SUM_SORT_RANGE bigint unsigned not null, + SUM_SORT_ROWS bigint unsigned not null, + SUM_SORT_SCAN bigint unsigned not null, + SUM_NO_INDEX_USED bigint unsigned not null, + SUM_NO_GOOD_INDEX_USED bigint unsigned not null, + SUM_CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + COUNT_SECONDARY bigint unsigned not null, + constraint ACCOUNT + unique (USER, HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_summary_by_digest.sql b/IDEA/performance_schema/events_statements_summary_by_digest.sql new file mode 100644 index 00000000..23eef772 --- /dev/null +++ b/IDEA/performance_schema/events_statements_summary_by_digest.sql @@ -0,0 +1,46 @@ +create table performance_schema.events_statements_summary_by_digest +( + SCHEMA_NAME varchar(64) null, + DIGEST varchar(64) null, + DIGEST_TEXT longtext null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + SUM_LOCK_TIME bigint unsigned not null, + SUM_ERRORS bigint unsigned not null, + SUM_WARNINGS bigint unsigned not null, + SUM_ROWS_AFFECTED bigint unsigned not null, + SUM_ROWS_SENT bigint unsigned not null, + SUM_ROWS_EXAMINED bigint unsigned not null, + SUM_CREATED_TMP_DISK_TABLES bigint unsigned not null, + SUM_CREATED_TMP_TABLES bigint unsigned not null, + SUM_SELECT_FULL_JOIN bigint unsigned not null, + SUM_SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SUM_SELECT_RANGE bigint unsigned not null, + SUM_SELECT_RANGE_CHECK bigint unsigned not null, + SUM_SELECT_SCAN bigint unsigned not null, + SUM_SORT_MERGE_PASSES bigint unsigned not null, + SUM_SORT_RANGE bigint unsigned not null, + SUM_SORT_ROWS bigint unsigned not null, + SUM_SORT_SCAN bigint unsigned not null, + SUM_NO_INDEX_USED bigint unsigned not null, + SUM_NO_GOOD_INDEX_USED bigint unsigned not null, + SUM_CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + COUNT_SECONDARY bigint unsigned not null, + FIRST_SEEN timestamp(6) not null, + LAST_SEEN timestamp(6) not null, + QUANTILE_95 bigint unsigned not null, + QUANTILE_99 bigint unsigned not null, + QUANTILE_999 bigint unsigned not null, + QUERY_SAMPLE_TEXT longtext null, + QUERY_SAMPLE_SEEN timestamp(6) not null, + QUERY_SAMPLE_TIMER_WAIT bigint unsigned not null, + constraint SCHEMA_NAME + unique (SCHEMA_NAME, DIGEST) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_summary_by_host_by_event_name.sql b/IDEA/performance_schema/events_statements_summary_by_host_by_event_name.sql new file mode 100644 index 00000000..c9c0e84e --- /dev/null +++ b/IDEA/performance_schema/events_statements_summary_by_host_by_event_name.sql @@ -0,0 +1,37 @@ +create table performance_schema.events_statements_summary_by_host_by_event_name +( + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + SUM_LOCK_TIME bigint unsigned not null, + SUM_ERRORS bigint unsigned not null, + SUM_WARNINGS bigint unsigned not null, + SUM_ROWS_AFFECTED bigint unsigned not null, + SUM_ROWS_SENT bigint unsigned not null, + SUM_ROWS_EXAMINED bigint unsigned not null, + SUM_CREATED_TMP_DISK_TABLES bigint unsigned not null, + SUM_CREATED_TMP_TABLES bigint unsigned not null, + SUM_SELECT_FULL_JOIN bigint unsigned not null, + SUM_SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SUM_SELECT_RANGE bigint unsigned not null, + SUM_SELECT_RANGE_CHECK bigint unsigned not null, + SUM_SELECT_SCAN bigint unsigned not null, + SUM_SORT_MERGE_PASSES bigint unsigned not null, + SUM_SORT_RANGE bigint unsigned not null, + SUM_SORT_ROWS bigint unsigned not null, + SUM_SORT_SCAN bigint unsigned not null, + SUM_NO_INDEX_USED bigint unsigned not null, + SUM_NO_GOOD_INDEX_USED bigint unsigned not null, + SUM_CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + COUNT_SECONDARY bigint unsigned not null, + constraint HOST + unique (HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_summary_by_program.sql b/IDEA/performance_schema/events_statements_summary_by_program.sql new file mode 100644 index 00000000..14280aa7 --- /dev/null +++ b/IDEA/performance_schema/events_statements_summary_by_program.sql @@ -0,0 +1,42 @@ +create table performance_schema.events_statements_summary_by_program +( + OBJECT_TYPE enum ('EVENT', 'FUNCTION', 'PROCEDURE', 'TABLE', 'TRIGGER') not null, + OBJECT_SCHEMA varchar(64) not null, + OBJECT_NAME varchar(64) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_STATEMENTS bigint unsigned not null, + SUM_STATEMENTS_WAIT bigint unsigned not null, + MIN_STATEMENTS_WAIT bigint unsigned not null, + AVG_STATEMENTS_WAIT bigint unsigned not null, + MAX_STATEMENTS_WAIT bigint unsigned not null, + SUM_LOCK_TIME bigint unsigned not null, + SUM_ERRORS bigint unsigned not null, + SUM_WARNINGS bigint unsigned not null, + SUM_ROWS_AFFECTED bigint unsigned not null, + SUM_ROWS_SENT bigint unsigned not null, + SUM_ROWS_EXAMINED bigint unsigned not null, + SUM_CREATED_TMP_DISK_TABLES bigint unsigned not null, + SUM_CREATED_TMP_TABLES bigint unsigned not null, + SUM_SELECT_FULL_JOIN bigint unsigned not null, + SUM_SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SUM_SELECT_RANGE bigint unsigned not null, + SUM_SELECT_RANGE_CHECK bigint unsigned not null, + SUM_SELECT_SCAN bigint unsigned not null, + SUM_SORT_MERGE_PASSES bigint unsigned not null, + SUM_SORT_RANGE bigint unsigned not null, + SUM_SORT_ROWS bigint unsigned not null, + SUM_SORT_SCAN bigint unsigned not null, + SUM_NO_INDEX_USED bigint unsigned not null, + SUM_NO_GOOD_INDEX_USED bigint unsigned not null, + SUM_CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + COUNT_SECONDARY bigint unsigned not null, + primary key (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_summary_by_thread_by_event_name.sql b/IDEA/performance_schema/events_statements_summary_by_thread_by_event_name.sql new file mode 100644 index 00000000..35de7205 --- /dev/null +++ b/IDEA/performance_schema/events_statements_summary_by_thread_by_event_name.sql @@ -0,0 +1,36 @@ +create table performance_schema.events_statements_summary_by_thread_by_event_name +( + THREAD_ID bigint unsigned not null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + SUM_LOCK_TIME bigint unsigned not null, + SUM_ERRORS bigint unsigned not null, + SUM_WARNINGS bigint unsigned not null, + SUM_ROWS_AFFECTED bigint unsigned not null, + SUM_ROWS_SENT bigint unsigned not null, + SUM_ROWS_EXAMINED bigint unsigned not null, + SUM_CREATED_TMP_DISK_TABLES bigint unsigned not null, + SUM_CREATED_TMP_TABLES bigint unsigned not null, + SUM_SELECT_FULL_JOIN bigint unsigned not null, + SUM_SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SUM_SELECT_RANGE bigint unsigned not null, + SUM_SELECT_RANGE_CHECK bigint unsigned not null, + SUM_SELECT_SCAN bigint unsigned not null, + SUM_SORT_MERGE_PASSES bigint unsigned not null, + SUM_SORT_RANGE bigint unsigned not null, + SUM_SORT_ROWS bigint unsigned not null, + SUM_SORT_SCAN bigint unsigned not null, + SUM_NO_INDEX_USED bigint unsigned not null, + SUM_NO_GOOD_INDEX_USED bigint unsigned not null, + SUM_CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + COUNT_SECONDARY bigint unsigned not null, + primary key (THREAD_ID, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_summary_by_user_by_event_name.sql b/IDEA/performance_schema/events_statements_summary_by_user_by_event_name.sql new file mode 100644 index 00000000..19c1e680 --- /dev/null +++ b/IDEA/performance_schema/events_statements_summary_by_user_by_event_name.sql @@ -0,0 +1,37 @@ +create table performance_schema.events_statements_summary_by_user_by_event_name +( + USER char(32) collate utf8mb4_bin null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + SUM_LOCK_TIME bigint unsigned not null, + SUM_ERRORS bigint unsigned not null, + SUM_WARNINGS bigint unsigned not null, + SUM_ROWS_AFFECTED bigint unsigned not null, + SUM_ROWS_SENT bigint unsigned not null, + SUM_ROWS_EXAMINED bigint unsigned not null, + SUM_CREATED_TMP_DISK_TABLES bigint unsigned not null, + SUM_CREATED_TMP_TABLES bigint unsigned not null, + SUM_SELECT_FULL_JOIN bigint unsigned not null, + SUM_SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SUM_SELECT_RANGE bigint unsigned not null, + SUM_SELECT_RANGE_CHECK bigint unsigned not null, + SUM_SELECT_SCAN bigint unsigned not null, + SUM_SORT_MERGE_PASSES bigint unsigned not null, + SUM_SORT_RANGE bigint unsigned not null, + SUM_SORT_ROWS bigint unsigned not null, + SUM_SORT_SCAN bigint unsigned not null, + SUM_NO_INDEX_USED bigint unsigned not null, + SUM_NO_GOOD_INDEX_USED bigint unsigned not null, + SUM_CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + COUNT_SECONDARY bigint unsigned not null, + constraint USER + unique (USER, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_statements_summary_global_by_event_name.sql b/IDEA/performance_schema/events_statements_summary_global_by_event_name.sql new file mode 100644 index 00000000..58d8f9dc --- /dev/null +++ b/IDEA/performance_schema/events_statements_summary_global_by_event_name.sql @@ -0,0 +1,35 @@ +create table performance_schema.events_statements_summary_global_by_event_name +( + EVENT_NAME varchar(128) not null + primary key using hash, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + SUM_LOCK_TIME bigint unsigned not null, + SUM_ERRORS bigint unsigned not null, + SUM_WARNINGS bigint unsigned not null, + SUM_ROWS_AFFECTED bigint unsigned not null, + SUM_ROWS_SENT bigint unsigned not null, + SUM_ROWS_EXAMINED bigint unsigned not null, + SUM_CREATED_TMP_DISK_TABLES bigint unsigned not null, + SUM_CREATED_TMP_TABLES bigint unsigned not null, + SUM_SELECT_FULL_JOIN bigint unsigned not null, + SUM_SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SUM_SELECT_RANGE bigint unsigned not null, + SUM_SELECT_RANGE_CHECK bigint unsigned not null, + SUM_SELECT_SCAN bigint unsigned not null, + SUM_SORT_MERGE_PASSES bigint unsigned not null, + SUM_SORT_RANGE bigint unsigned not null, + SUM_SORT_ROWS bigint unsigned not null, + SUM_SORT_SCAN bigint unsigned not null, + SUM_NO_INDEX_USED bigint unsigned not null, + SUM_NO_GOOD_INDEX_USED bigint unsigned not null, + SUM_CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + COUNT_SECONDARY bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_transactions_current.sql b/IDEA/performance_schema/events_transactions_current.sql new file mode 100644 index 00000000..6b986014 --- /dev/null +++ b/IDEA/performance_schema/events_transactions_current.sql @@ -0,0 +1,30 @@ +create table performance_schema.events_transactions_current +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + STATE enum ('ACTIVE', 'COMMITTED', 'ROLLED BACK') null, + TRX_ID bigint unsigned null, + GTID varchar(64) null, + XID_FORMAT_ID int null, + XID_GTRID varchar(130) null, + XID_BQUAL varchar(130) null, + XA_STATE varchar(64) null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + ACCESS_MODE enum ('READ ONLY', 'READ WRITE') null, + ISOLATION_LEVEL varchar(64) null, + AUTOCOMMIT enum ('YES', 'NO') not null, + NUMBER_OF_SAVEPOINTS bigint unsigned null, + NUMBER_OF_ROLLBACK_TO_SAVEPOINT bigint unsigned null, + NUMBER_OF_RELEASE_SAVEPOINT bigint unsigned null, + OBJECT_INSTANCE_BEGIN bigint unsigned null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + primary key (THREAD_ID, EVENT_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_transactions_history.sql b/IDEA/performance_schema/events_transactions_history.sql new file mode 100644 index 00000000..6daa5b75 --- /dev/null +++ b/IDEA/performance_schema/events_transactions_history.sql @@ -0,0 +1,30 @@ +create table performance_schema.events_transactions_history +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + STATE enum ('ACTIVE', 'COMMITTED', 'ROLLED BACK') null, + TRX_ID bigint unsigned null, + GTID varchar(64) null, + XID_FORMAT_ID int null, + XID_GTRID varchar(130) null, + XID_BQUAL varchar(130) null, + XA_STATE varchar(64) null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + ACCESS_MODE enum ('READ ONLY', 'READ WRITE') null, + ISOLATION_LEVEL varchar(64) null, + AUTOCOMMIT enum ('YES', 'NO') not null, + NUMBER_OF_SAVEPOINTS bigint unsigned null, + NUMBER_OF_ROLLBACK_TO_SAVEPOINT bigint unsigned null, + NUMBER_OF_RELEASE_SAVEPOINT bigint unsigned null, + OBJECT_INSTANCE_BEGIN bigint unsigned null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + primary key (THREAD_ID, EVENT_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_transactions_history_long.sql b/IDEA/performance_schema/events_transactions_history_long.sql new file mode 100644 index 00000000..aff081ed --- /dev/null +++ b/IDEA/performance_schema/events_transactions_history_long.sql @@ -0,0 +1,29 @@ +create table performance_schema.events_transactions_history_long +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + STATE enum ('ACTIVE', 'COMMITTED', 'ROLLED BACK') null, + TRX_ID bigint unsigned null, + GTID varchar(64) null, + XID_FORMAT_ID int null, + XID_GTRID varchar(130) null, + XID_BQUAL varchar(130) null, + XA_STATE varchar(64) null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + ACCESS_MODE enum ('READ ONLY', 'READ WRITE') null, + ISOLATION_LEVEL varchar(64) null, + AUTOCOMMIT enum ('YES', 'NO') not null, + NUMBER_OF_SAVEPOINTS bigint unsigned null, + NUMBER_OF_ROLLBACK_TO_SAVEPOINT bigint unsigned null, + NUMBER_OF_RELEASE_SAVEPOINT bigint unsigned null, + OBJECT_INSTANCE_BEGIN bigint unsigned null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_transactions_summary_by_account_by_event_name.sql b/IDEA/performance_schema/events_transactions_summary_by_account_by_event_name.sql new file mode 100644 index 00000000..1caf33aa --- /dev/null +++ b/IDEA/performance_schema/events_transactions_summary_by_account_by_event_name.sql @@ -0,0 +1,25 @@ +create table performance_schema.events_transactions_summary_by_account_by_event_name +( + USER char(32) collate utf8mb4_bin null, + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ_WRITE bigint unsigned not null, + SUM_TIMER_READ_WRITE bigint unsigned not null, + MIN_TIMER_READ_WRITE bigint unsigned not null, + AVG_TIMER_READ_WRITE bigint unsigned not null, + MAX_TIMER_READ_WRITE bigint unsigned not null, + COUNT_READ_ONLY bigint unsigned not null, + SUM_TIMER_READ_ONLY bigint unsigned not null, + MIN_TIMER_READ_ONLY bigint unsigned not null, + AVG_TIMER_READ_ONLY bigint unsigned not null, + MAX_TIMER_READ_ONLY bigint unsigned not null, + constraint ACCOUNT + unique (USER, HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_transactions_summary_by_host_by_event_name.sql b/IDEA/performance_schema/events_transactions_summary_by_host_by_event_name.sql new file mode 100644 index 00000000..6dce733a --- /dev/null +++ b/IDEA/performance_schema/events_transactions_summary_by_host_by_event_name.sql @@ -0,0 +1,24 @@ +create table performance_schema.events_transactions_summary_by_host_by_event_name +( + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ_WRITE bigint unsigned not null, + SUM_TIMER_READ_WRITE bigint unsigned not null, + MIN_TIMER_READ_WRITE bigint unsigned not null, + AVG_TIMER_READ_WRITE bigint unsigned not null, + MAX_TIMER_READ_WRITE bigint unsigned not null, + COUNT_READ_ONLY bigint unsigned not null, + SUM_TIMER_READ_ONLY bigint unsigned not null, + MIN_TIMER_READ_ONLY bigint unsigned not null, + AVG_TIMER_READ_ONLY bigint unsigned not null, + MAX_TIMER_READ_ONLY bigint unsigned not null, + constraint HOST + unique (HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_transactions_summary_by_thread_by_event_name.sql b/IDEA/performance_schema/events_transactions_summary_by_thread_by_event_name.sql new file mode 100644 index 00000000..b8853892 --- /dev/null +++ b/IDEA/performance_schema/events_transactions_summary_by_thread_by_event_name.sql @@ -0,0 +1,23 @@ +create table performance_schema.events_transactions_summary_by_thread_by_event_name +( + THREAD_ID bigint unsigned not null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ_WRITE bigint unsigned not null, + SUM_TIMER_READ_WRITE bigint unsigned not null, + MIN_TIMER_READ_WRITE bigint unsigned not null, + AVG_TIMER_READ_WRITE bigint unsigned not null, + MAX_TIMER_READ_WRITE bigint unsigned not null, + COUNT_READ_ONLY bigint unsigned not null, + SUM_TIMER_READ_ONLY bigint unsigned not null, + MIN_TIMER_READ_ONLY bigint unsigned not null, + AVG_TIMER_READ_ONLY bigint unsigned not null, + MAX_TIMER_READ_ONLY bigint unsigned not null, + primary key (THREAD_ID, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_transactions_summary_by_user_by_event_name.sql b/IDEA/performance_schema/events_transactions_summary_by_user_by_event_name.sql new file mode 100644 index 00000000..01638d1e --- /dev/null +++ b/IDEA/performance_schema/events_transactions_summary_by_user_by_event_name.sql @@ -0,0 +1,24 @@ +create table performance_schema.events_transactions_summary_by_user_by_event_name +( + USER char(32) collate utf8mb4_bin null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ_WRITE bigint unsigned not null, + SUM_TIMER_READ_WRITE bigint unsigned not null, + MIN_TIMER_READ_WRITE bigint unsigned not null, + AVG_TIMER_READ_WRITE bigint unsigned not null, + MAX_TIMER_READ_WRITE bigint unsigned not null, + COUNT_READ_ONLY bigint unsigned not null, + SUM_TIMER_READ_ONLY bigint unsigned not null, + MIN_TIMER_READ_ONLY bigint unsigned not null, + AVG_TIMER_READ_ONLY bigint unsigned not null, + MAX_TIMER_READ_ONLY bigint unsigned not null, + constraint USER + unique (USER, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_transactions_summary_global_by_event_name.sql b/IDEA/performance_schema/events_transactions_summary_global_by_event_name.sql new file mode 100644 index 00000000..f0c04f14 --- /dev/null +++ b/IDEA/performance_schema/events_transactions_summary_global_by_event_name.sql @@ -0,0 +1,22 @@ +create table performance_schema.events_transactions_summary_global_by_event_name +( + EVENT_NAME varchar(128) not null + primary key using hash, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ_WRITE bigint unsigned not null, + SUM_TIMER_READ_WRITE bigint unsigned not null, + MIN_TIMER_READ_WRITE bigint unsigned not null, + AVG_TIMER_READ_WRITE bigint unsigned not null, + MAX_TIMER_READ_WRITE bigint unsigned not null, + COUNT_READ_ONLY bigint unsigned not null, + SUM_TIMER_READ_ONLY bigint unsigned not null, + MIN_TIMER_READ_ONLY bigint unsigned not null, + AVG_TIMER_READ_ONLY bigint unsigned not null, + MAX_TIMER_READ_ONLY bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_waits_current.sql b/IDEA/performance_schema/events_waits_current.sql new file mode 100644 index 00000000..08087201 --- /dev/null +++ b/IDEA/performance_schema/events_waits_current.sql @@ -0,0 +1,25 @@ +create table performance_schema.events_waits_current +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + SPINS int unsigned null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(512) null, + INDEX_NAME varchar(64) null, + OBJECT_TYPE varchar(64) null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + OPERATION varchar(32) not null, + NUMBER_OF_BYTES bigint null, + FLAGS int unsigned null, + primary key (THREAD_ID, EVENT_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_waits_history.sql b/IDEA/performance_schema/events_waits_history.sql new file mode 100644 index 00000000..c9c06a54 --- /dev/null +++ b/IDEA/performance_schema/events_waits_history.sql @@ -0,0 +1,25 @@ +create table performance_schema.events_waits_history +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + SPINS int unsigned null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(512) null, + INDEX_NAME varchar(64) null, + OBJECT_TYPE varchar(64) null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + OPERATION varchar(32) not null, + NUMBER_OF_BYTES bigint null, + FLAGS int unsigned null, + primary key (THREAD_ID, EVENT_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_waits_history_long.sql b/IDEA/performance_schema/events_waits_history_long.sql new file mode 100644 index 00000000..614a69bc --- /dev/null +++ b/IDEA/performance_schema/events_waits_history_long.sql @@ -0,0 +1,24 @@ +create table performance_schema.events_waits_history_long +( + THREAD_ID bigint unsigned not null, + EVENT_ID bigint unsigned not null, + END_EVENT_ID bigint unsigned null, + EVENT_NAME varchar(128) not null, + SOURCE varchar(64) null, + TIMER_START bigint unsigned null, + TIMER_END bigint unsigned null, + TIMER_WAIT bigint unsigned null, + SPINS int unsigned null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(512) null, + INDEX_NAME varchar(64) null, + OBJECT_TYPE varchar(64) null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null, + NESTING_EVENT_ID bigint unsigned null, + NESTING_EVENT_TYPE enum ('TRANSACTION', 'STATEMENT', 'STAGE', 'WAIT') null, + OPERATION varchar(32) not null, + NUMBER_OF_BYTES bigint null, + FLAGS int unsigned null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_waits_summary_by_account_by_event_name.sql b/IDEA/performance_schema/events_waits_summary_by_account_by_event_name.sql new file mode 100644 index 00000000..927a12cd --- /dev/null +++ b/IDEA/performance_schema/events_waits_summary_by_account_by_event_name.sql @@ -0,0 +1,15 @@ +create table performance_schema.events_waits_summary_by_account_by_event_name +( + USER char(32) collate utf8mb4_bin null, + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + constraint ACCOUNT + unique (USER, HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_waits_summary_by_host_by_event_name.sql b/IDEA/performance_schema/events_waits_summary_by_host_by_event_name.sql new file mode 100644 index 00000000..e720cc3a --- /dev/null +++ b/IDEA/performance_schema/events_waits_summary_by_host_by_event_name.sql @@ -0,0 +1,14 @@ +create table performance_schema.events_waits_summary_by_host_by_event_name +( + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + constraint HOST + unique (HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_waits_summary_by_instance.sql b/IDEA/performance_schema/events_waits_summary_by_instance.sql new file mode 100644 index 00000000..7cbc432d --- /dev/null +++ b/IDEA/performance_schema/events_waits_summary_by_instance.sql @@ -0,0 +1,17 @@ +create table performance_schema.events_waits_summary_by_instance +( + EVENT_NAME varchar(128) not null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + +create index EVENT_NAME + on performance_schema.events_waits_summary_by_instance (EVENT_NAME) + using hash; + diff --git a/IDEA/performance_schema/events_waits_summary_by_thread_by_event_name.sql b/IDEA/performance_schema/events_waits_summary_by_thread_by_event_name.sql new file mode 100644 index 00000000..44fc9633 --- /dev/null +++ b/IDEA/performance_schema/events_waits_summary_by_thread_by_event_name.sql @@ -0,0 +1,13 @@ +create table performance_schema.events_waits_summary_by_thread_by_event_name +( + THREAD_ID bigint unsigned not null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + primary key (THREAD_ID, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_waits_summary_by_user_by_event_name.sql b/IDEA/performance_schema/events_waits_summary_by_user_by_event_name.sql new file mode 100644 index 00000000..7f93fe2b --- /dev/null +++ b/IDEA/performance_schema/events_waits_summary_by_user_by_event_name.sql @@ -0,0 +1,14 @@ +create table performance_schema.events_waits_summary_by_user_by_event_name +( + USER char(32) collate utf8mb4_bin null, + EVENT_NAME varchar(128) not null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + constraint USER + unique (USER, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/events_waits_summary_global_by_event_name.sql b/IDEA/performance_schema/events_waits_summary_global_by_event_name.sql new file mode 100644 index 00000000..ce42a5df --- /dev/null +++ b/IDEA/performance_schema/events_waits_summary_global_by_event_name.sql @@ -0,0 +1,12 @@ +create table performance_schema.events_waits_summary_global_by_event_name +( + EVENT_NAME varchar(128) not null + primary key using hash, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/file_instances.sql b/IDEA/performance_schema/file_instances.sql new file mode 100644 index 00000000..aff27fec --- /dev/null +++ b/IDEA/performance_schema/file_instances.sql @@ -0,0 +1,13 @@ +create table performance_schema.file_instances +( + FILE_NAME varchar(512) not null + primary key using hash, + EVENT_NAME varchar(128) not null, + OPEN_COUNT int unsigned not null +) + engine = PERFORMANCE_SCHEMA; + +create index EVENT_NAME + on performance_schema.file_instances (EVENT_NAME) + using hash; + diff --git a/IDEA/performance_schema/file_summary_by_event_name.sql b/IDEA/performance_schema/file_summary_by_event_name.sql new file mode 100644 index 00000000..3065c909 --- /dev/null +++ b/IDEA/performance_schema/file_summary_by_event_name.sql @@ -0,0 +1,29 @@ +create table performance_schema.file_summary_by_event_name +( + EVENT_NAME varchar(128) not null + primary key using hash, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ bigint unsigned not null, + SUM_TIMER_READ bigint unsigned not null, + MIN_TIMER_READ bigint unsigned not null, + AVG_TIMER_READ bigint unsigned not null, + MAX_TIMER_READ bigint unsigned not null, + SUM_NUMBER_OF_BYTES_READ bigint not null, + COUNT_WRITE bigint unsigned not null, + SUM_TIMER_WRITE bigint unsigned not null, + MIN_TIMER_WRITE bigint unsigned not null, + AVG_TIMER_WRITE bigint unsigned not null, + MAX_TIMER_WRITE bigint unsigned not null, + SUM_NUMBER_OF_BYTES_WRITE bigint not null, + COUNT_MISC bigint unsigned not null, + SUM_TIMER_MISC bigint unsigned not null, + MIN_TIMER_MISC bigint unsigned not null, + AVG_TIMER_MISC bigint unsigned not null, + MAX_TIMER_MISC bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/file_summary_by_instance.sql b/IDEA/performance_schema/file_summary_by_instance.sql new file mode 100644 index 00000000..dd680cf7 --- /dev/null +++ b/IDEA/performance_schema/file_summary_by_instance.sql @@ -0,0 +1,39 @@ +create table performance_schema.file_summary_by_instance +( + FILE_NAME varchar(512) not null, + EVENT_NAME varchar(128) not null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ bigint unsigned not null, + SUM_TIMER_READ bigint unsigned not null, + MIN_TIMER_READ bigint unsigned not null, + AVG_TIMER_READ bigint unsigned not null, + MAX_TIMER_READ bigint unsigned not null, + SUM_NUMBER_OF_BYTES_READ bigint not null, + COUNT_WRITE bigint unsigned not null, + SUM_TIMER_WRITE bigint unsigned not null, + MIN_TIMER_WRITE bigint unsigned not null, + AVG_TIMER_WRITE bigint unsigned not null, + MAX_TIMER_WRITE bigint unsigned not null, + SUM_NUMBER_OF_BYTES_WRITE bigint not null, + COUNT_MISC bigint unsigned not null, + SUM_TIMER_MISC bigint unsigned not null, + MIN_TIMER_MISC bigint unsigned not null, + AVG_TIMER_MISC bigint unsigned not null, + MAX_TIMER_MISC bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + +create index EVENT_NAME + on performance_schema.file_summary_by_instance (EVENT_NAME) + using hash; + +create index FILE_NAME + on performance_schema.file_summary_by_instance (FILE_NAME) + using hash; + diff --git a/IDEA/performance_schema/global_status.sql b/IDEA/performance_schema/global_status.sql new file mode 100644 index 00000000..66e9c899 --- /dev/null +++ b/IDEA/performance_schema/global_status.sql @@ -0,0 +1,8 @@ +create table performance_schema.global_status +( + VARIABLE_NAME varchar(64) not null + primary key using hash, + VARIABLE_VALUE varchar(1024) null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/global_variables.sql b/IDEA/performance_schema/global_variables.sql new file mode 100644 index 00000000..379c40f2 --- /dev/null +++ b/IDEA/performance_schema/global_variables.sql @@ -0,0 +1,8 @@ +create table performance_schema.global_variables +( + VARIABLE_NAME varchar(64) not null + primary key using hash, + VARIABLE_VALUE varchar(1024) null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/host_cache.sql b/IDEA/performance_schema/host_cache.sql new file mode 100644 index 00000000..68677fd9 --- /dev/null +++ b/IDEA/performance_schema/host_cache.sql @@ -0,0 +1,39 @@ +create table performance_schema.host_cache +( + IP varchar(64) not null + primary key using hash, + HOST varchar(255) charset ascii null, + HOST_VALIDATED enum ('YES', 'NO') not null, + SUM_CONNECT_ERRORS bigint not null, + COUNT_HOST_BLOCKED_ERRORS bigint not null, + COUNT_NAMEINFO_TRANSIENT_ERRORS bigint not null, + COUNT_NAMEINFO_PERMANENT_ERRORS bigint not null, + COUNT_FORMAT_ERRORS bigint not null, + COUNT_ADDRINFO_TRANSIENT_ERRORS bigint not null, + COUNT_ADDRINFO_PERMANENT_ERRORS bigint not null, + COUNT_FCRDNS_ERRORS bigint not null, + COUNT_HOST_ACL_ERRORS bigint not null, + COUNT_NO_AUTH_PLUGIN_ERRORS bigint not null, + COUNT_AUTH_PLUGIN_ERRORS bigint not null, + COUNT_HANDSHAKE_ERRORS bigint not null, + COUNT_PROXY_USER_ERRORS bigint not null, + COUNT_PROXY_USER_ACL_ERRORS bigint not null, + COUNT_AUTHENTICATION_ERRORS bigint not null, + COUNT_SSL_ERRORS bigint not null, + COUNT_MAX_USER_CONNECTIONS_ERRORS bigint not null, + COUNT_MAX_USER_CONNECTIONS_PER_HOUR_ERRORS bigint not null, + COUNT_DEFAULT_DATABASE_ERRORS bigint not null, + COUNT_INIT_CONNECT_ERRORS bigint not null, + COUNT_LOCAL_ERRORS bigint not null, + COUNT_UNKNOWN_ERRORS bigint not null, + FIRST_SEEN timestamp not null, + LAST_SEEN timestamp not null, + FIRST_ERROR_SEEN timestamp null, + LAST_ERROR_SEEN timestamp null +) + engine = PERFORMANCE_SCHEMA; + +create index HOST + on performance_schema.host_cache (HOST) + using hash; + diff --git a/IDEA/performance_schema/hosts.sql b/IDEA/performance_schema/hosts.sql new file mode 100644 index 00000000..8f483dd1 --- /dev/null +++ b/IDEA/performance_schema/hosts.sql @@ -0,0 +1,12 @@ +create table performance_schema.hosts +( + HOST char(255) charset ascii null, + CURRENT_CONNECTIONS bigint not null, + TOTAL_CONNECTIONS bigint not null, + MAX_SESSION_CONTROLLED_MEMORY bigint unsigned not null, + MAX_SESSION_TOTAL_MEMORY bigint unsigned not null, + constraint HOST + unique (HOST) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/innodb_redo_log_files.sql b/IDEA/performance_schema/innodb_redo_log_files.sql new file mode 100644 index 00000000..864baeaf --- /dev/null +++ b/IDEA/performance_schema/innodb_redo_log_files.sql @@ -0,0 +1,12 @@ +create table performance_schema.innodb_redo_log_files +( + FILE_ID bigint not null comment 'Id of the file.', + FILE_NAME varchar(2000) not null comment 'Path to the file.', + START_LSN bigint not null comment 'LSN of the first block in the file.', + END_LSN bigint not null comment 'LSN after the last block in the file.', + SIZE_IN_BYTES bigint not null comment 'Size of the file (in bytes).', + IS_FULL tinyint not null comment '1 iff file has no free space inside.', + CONSUMER_LEVEL int not null comment 'All redo log consumers registered on smaller levels than this value, have already consumed this file.' +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/keyring_component_status.sql b/IDEA/performance_schema/keyring_component_status.sql new file mode 100644 index 00000000..05320e6d --- /dev/null +++ b/IDEA/performance_schema/keyring_component_status.sql @@ -0,0 +1,7 @@ +create table performance_schema.keyring_component_status +( + STATUS_KEY varchar(256) not null, + STATUS_VALUE varchar(1024) not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/keyring_keys.sql b/IDEA/performance_schema/keyring_keys.sql new file mode 100644 index 00000000..31f41454 --- /dev/null +++ b/IDEA/performance_schema/keyring_keys.sql @@ -0,0 +1,9 @@ +create table performance_schema.keyring_keys +( + KEY_ID varchar(255) not null, + KEY_OWNER varchar(255) null, + BACKEND_KEY_ID varchar(255) null +) + engine = PERFORMANCE_SCHEMA + collate = utf8mb4_bin; + diff --git a/IDEA/performance_schema/log_status.sql b/IDEA/performance_schema/log_status.sql new file mode 100644 index 00000000..b72b37eb --- /dev/null +++ b/IDEA/performance_schema/log_status.sql @@ -0,0 +1,9 @@ +create table performance_schema.log_status +( + SERVER_UUID char(36) collate utf8mb4_bin not null, + LOCAL json not null, + REPLICATION json not null, + STORAGE_ENGINES json not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/memory_summary_by_account_by_event_name.sql b/IDEA/performance_schema/memory_summary_by_account_by_event_name.sql new file mode 100644 index 00000000..9bc7bab2 --- /dev/null +++ b/IDEA/performance_schema/memory_summary_by_account_by_event_name.sql @@ -0,0 +1,20 @@ +create table performance_schema.memory_summary_by_account_by_event_name +( + USER char(32) collate utf8mb4_bin null, + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_ALLOC bigint unsigned not null, + COUNT_FREE bigint unsigned not null, + SUM_NUMBER_OF_BYTES_ALLOC bigint unsigned not null, + SUM_NUMBER_OF_BYTES_FREE bigint unsigned not null, + LOW_COUNT_USED bigint not null, + CURRENT_COUNT_USED bigint not null, + HIGH_COUNT_USED bigint not null, + LOW_NUMBER_OF_BYTES_USED bigint not null, + CURRENT_NUMBER_OF_BYTES_USED bigint not null, + HIGH_NUMBER_OF_BYTES_USED bigint not null, + constraint ACCOUNT + unique (USER, HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/memory_summary_by_host_by_event_name.sql b/IDEA/performance_schema/memory_summary_by_host_by_event_name.sql new file mode 100644 index 00000000..3c0426ad --- /dev/null +++ b/IDEA/performance_schema/memory_summary_by_host_by_event_name.sql @@ -0,0 +1,19 @@ +create table performance_schema.memory_summary_by_host_by_event_name +( + HOST char(255) charset ascii null, + EVENT_NAME varchar(128) not null, + COUNT_ALLOC bigint unsigned not null, + COUNT_FREE bigint unsigned not null, + SUM_NUMBER_OF_BYTES_ALLOC bigint unsigned not null, + SUM_NUMBER_OF_BYTES_FREE bigint unsigned not null, + LOW_COUNT_USED bigint not null, + CURRENT_COUNT_USED bigint not null, + HIGH_COUNT_USED bigint not null, + LOW_NUMBER_OF_BYTES_USED bigint not null, + CURRENT_NUMBER_OF_BYTES_USED bigint not null, + HIGH_NUMBER_OF_BYTES_USED bigint not null, + constraint HOST + unique (HOST, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/memory_summary_by_thread_by_event_name.sql b/IDEA/performance_schema/memory_summary_by_thread_by_event_name.sql new file mode 100644 index 00000000..61991dd3 --- /dev/null +++ b/IDEA/performance_schema/memory_summary_by_thread_by_event_name.sql @@ -0,0 +1,18 @@ +create table performance_schema.memory_summary_by_thread_by_event_name +( + THREAD_ID bigint unsigned not null, + EVENT_NAME varchar(128) not null, + COUNT_ALLOC bigint unsigned not null, + COUNT_FREE bigint unsigned not null, + SUM_NUMBER_OF_BYTES_ALLOC bigint unsigned not null, + SUM_NUMBER_OF_BYTES_FREE bigint unsigned not null, + LOW_COUNT_USED bigint not null, + CURRENT_COUNT_USED bigint not null, + HIGH_COUNT_USED bigint not null, + LOW_NUMBER_OF_BYTES_USED bigint not null, + CURRENT_NUMBER_OF_BYTES_USED bigint not null, + HIGH_NUMBER_OF_BYTES_USED bigint not null, + primary key (THREAD_ID, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/memory_summary_by_user_by_event_name.sql b/IDEA/performance_schema/memory_summary_by_user_by_event_name.sql new file mode 100644 index 00000000..5c2ba26d --- /dev/null +++ b/IDEA/performance_schema/memory_summary_by_user_by_event_name.sql @@ -0,0 +1,19 @@ +create table performance_schema.memory_summary_by_user_by_event_name +( + USER char(32) collate utf8mb4_bin null, + EVENT_NAME varchar(128) not null, + COUNT_ALLOC bigint unsigned not null, + COUNT_FREE bigint unsigned not null, + SUM_NUMBER_OF_BYTES_ALLOC bigint unsigned not null, + SUM_NUMBER_OF_BYTES_FREE bigint unsigned not null, + LOW_COUNT_USED bigint not null, + CURRENT_COUNT_USED bigint not null, + HIGH_COUNT_USED bigint not null, + LOW_NUMBER_OF_BYTES_USED bigint not null, + CURRENT_NUMBER_OF_BYTES_USED bigint not null, + HIGH_NUMBER_OF_BYTES_USED bigint not null, + constraint USER + unique (USER, EVENT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/memory_summary_global_by_event_name.sql b/IDEA/performance_schema/memory_summary_global_by_event_name.sql new file mode 100644 index 00000000..692479db --- /dev/null +++ b/IDEA/performance_schema/memory_summary_global_by_event_name.sql @@ -0,0 +1,17 @@ +create table performance_schema.memory_summary_global_by_event_name +( + EVENT_NAME varchar(128) not null + primary key using hash, + COUNT_ALLOC bigint unsigned not null, + COUNT_FREE bigint unsigned not null, + SUM_NUMBER_OF_BYTES_ALLOC bigint unsigned not null, + SUM_NUMBER_OF_BYTES_FREE bigint unsigned not null, + LOW_COUNT_USED bigint not null, + CURRENT_COUNT_USED bigint not null, + HIGH_COUNT_USED bigint not null, + LOW_NUMBER_OF_BYTES_USED bigint not null, + CURRENT_NUMBER_OF_BYTES_USED bigint not null, + HIGH_NUMBER_OF_BYTES_USED bigint not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/metadata_locks.sql b/IDEA/performance_schema/metadata_locks.sql new file mode 100644 index 00000000..94eff6ce --- /dev/null +++ b/IDEA/performance_schema/metadata_locks.sql @@ -0,0 +1,25 @@ +create table performance_schema.metadata_locks +( + OBJECT_TYPE varchar(64) not null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(64) null, + COLUMN_NAME varchar(64) null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash, + LOCK_TYPE varchar(32) not null, + LOCK_DURATION varchar(32) not null, + LOCK_STATUS varchar(32) not null, + SOURCE varchar(64) null, + OWNER_THREAD_ID bigint unsigned null, + OWNER_EVENT_ID bigint unsigned null +) + engine = PERFORMANCE_SCHEMA; + +create index OBJECT_TYPE + on performance_schema.metadata_locks (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, COLUMN_NAME) + using hash; + +create index OWNER_THREAD_ID + on performance_schema.metadata_locks (OWNER_THREAD_ID, OWNER_EVENT_ID) + using hash; + diff --git a/IDEA/performance_schema/mutex_instances.sql b/IDEA/performance_schema/mutex_instances.sql new file mode 100644 index 00000000..da31a45b --- /dev/null +++ b/IDEA/performance_schema/mutex_instances.sql @@ -0,0 +1,17 @@ +create table performance_schema.mutex_instances +( + NAME varchar(128) not null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash, + LOCKED_BY_THREAD_ID bigint unsigned null +) + engine = PERFORMANCE_SCHEMA; + +create index LOCKED_BY_THREAD_ID + on performance_schema.mutex_instances (LOCKED_BY_THREAD_ID) + using hash; + +create index NAME + on performance_schema.mutex_instances (NAME) + using hash; + diff --git a/IDEA/performance_schema/objects_summary_global_by_type.sql b/IDEA/performance_schema/objects_summary_global_by_type.sql new file mode 100644 index 00000000..fcd33714 --- /dev/null +++ b/IDEA/performance_schema/objects_summary_global_by_type.sql @@ -0,0 +1,15 @@ +create table performance_schema.objects_summary_global_by_type +( + OBJECT_TYPE varchar(64) null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(64) null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + constraint OBJECT + unique (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/performance_timers.sql b/IDEA/performance_schema/performance_timers.sql new file mode 100644 index 00000000..c6b9328a --- /dev/null +++ b/IDEA/performance_schema/performance_timers.sql @@ -0,0 +1,9 @@ +create table performance_schema.performance_timers +( + TIMER_NAME enum ('CYCLE', 'NANOSECOND', 'MICROSECOND', 'MILLISECOND', 'THREAD_CPU') not null, + TIMER_FREQUENCY bigint null, + TIMER_RESOLUTION bigint null, + TIMER_OVERHEAD bigint null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/persisted_variables.sql b/IDEA/performance_schema/persisted_variables.sql new file mode 100644 index 00000000..cf2ba89c --- /dev/null +++ b/IDEA/performance_schema/persisted_variables.sql @@ -0,0 +1,8 @@ +create table performance_schema.persisted_variables +( + VARIABLE_NAME varchar(64) not null + primary key using hash, + VARIABLE_VALUE varchar(1024) null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/prepared_statements_instances.sql b/IDEA/performance_schema/prepared_statements_instances.sql new file mode 100644 index 00000000..fc584c28 --- /dev/null +++ b/IDEA/performance_schema/prepared_statements_instances.sql @@ -0,0 +1,60 @@ +create table performance_schema.prepared_statements_instances +( + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash, + STATEMENT_ID bigint unsigned not null, + STATEMENT_NAME varchar(64) null, + SQL_TEXT longtext not null, + OWNER_THREAD_ID bigint unsigned not null, + OWNER_EVENT_ID bigint unsigned not null, + OWNER_OBJECT_TYPE enum ('EVENT', 'FUNCTION', 'PROCEDURE', 'TABLE', 'TRIGGER') null, + OWNER_OBJECT_SCHEMA varchar(64) null, + OWNER_OBJECT_NAME varchar(64) null, + EXECUTION_ENGINE enum ('PRIMARY', 'SECONDARY') null, + TIMER_PREPARE bigint unsigned not null, + COUNT_REPREPARE bigint unsigned not null, + COUNT_EXECUTE bigint unsigned not null, + SUM_TIMER_EXECUTE bigint unsigned not null, + MIN_TIMER_EXECUTE bigint unsigned not null, + AVG_TIMER_EXECUTE bigint unsigned not null, + MAX_TIMER_EXECUTE bigint unsigned not null, + SUM_LOCK_TIME bigint unsigned not null, + SUM_ERRORS bigint unsigned not null, + SUM_WARNINGS bigint unsigned not null, + SUM_ROWS_AFFECTED bigint unsigned not null, + SUM_ROWS_SENT bigint unsigned not null, + SUM_ROWS_EXAMINED bigint unsigned not null, + SUM_CREATED_TMP_DISK_TABLES bigint unsigned not null, + SUM_CREATED_TMP_TABLES bigint unsigned not null, + SUM_SELECT_FULL_JOIN bigint unsigned not null, + SUM_SELECT_FULL_RANGE_JOIN bigint unsigned not null, + SUM_SELECT_RANGE bigint unsigned not null, + SUM_SELECT_RANGE_CHECK bigint unsigned not null, + SUM_SELECT_SCAN bigint unsigned not null, + SUM_SORT_MERGE_PASSES bigint unsigned not null, + SUM_SORT_RANGE bigint unsigned not null, + SUM_SORT_ROWS bigint unsigned not null, + SUM_SORT_SCAN bigint unsigned not null, + SUM_NO_INDEX_USED bigint unsigned not null, + SUM_NO_GOOD_INDEX_USED bigint unsigned not null, + SUM_CPU_TIME bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + COUNT_SECONDARY bigint unsigned not null, + constraint OWNER_THREAD_ID + unique (OWNER_THREAD_ID, OWNER_EVENT_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + +create index OWNER_OBJECT_TYPE + on performance_schema.prepared_statements_instances (OWNER_OBJECT_TYPE, OWNER_OBJECT_SCHEMA, OWNER_OBJECT_NAME) + using hash; + +create index STATEMENT_ID + on performance_schema.prepared_statements_instances (STATEMENT_ID) + using hash; + +create index STATEMENT_NAME + on performance_schema.prepared_statements_instances (STATEMENT_NAME) + using hash; + diff --git a/IDEA/performance_schema/processlist.sql b/IDEA/performance_schema/processlist.sql new file mode 100644 index 00000000..4159d5cd --- /dev/null +++ b/IDEA/performance_schema/processlist.sql @@ -0,0 +1,15 @@ +create table performance_schema.processlist +( + ID bigint unsigned not null + primary key using hash, + USER varchar(32) null, + HOST varchar(261) charset ascii null, + DB varchar(64) null, + COMMAND varchar(16) null, + TIME bigint null, + STATE varchar(64) null, + INFO longtext null, + EXECUTION_ENGINE enum ('PRIMARY', 'SECONDARY') null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/replication_applier_configuration.sql b/IDEA/performance_schema/replication_applier_configuration.sql new file mode 100644 index 00000000..31eecf99 --- /dev/null +++ b/IDEA/performance_schema/replication_applier_configuration.sql @@ -0,0 +1,13 @@ +create table performance_schema.replication_applier_configuration +( + CHANNEL_NAME char(64) not null + primary key using hash, + DESIRED_DELAY int not null, + PRIVILEGE_CHECKS_USER text collate utf8mb3_bin null comment 'User name for the security context of the applier.', + REQUIRE_ROW_FORMAT enum ('YES', 'NO') not null comment 'Indicates whether the channel shall only accept row based events.', + REQUIRE_TABLE_PRIMARY_KEY_CHECK enum ('STREAM', 'ON', 'OFF', 'GENERATE') not null comment 'Indicates what is the channel policy regarding tables without primary keys on create and alter table queries', + ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_TYPE enum ('OFF', 'LOCAL', 'UUID') not null comment 'Indicates whether the channel will generate a new GTID for anonymous transactions. OFF means that anonymous transactions will remain anonymous. LOCAL means that anonymous transactions will be assigned a newly generated GTID based on server_uuid. UUID indicates that anonymous transactions will be assigned a newly generated GTID based on Assign_gtids_to_anonymous_transactions_value', + ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_VALUE text collate utf8mb3_bin null comment 'Indicates the UUID used while generating GTIDs for anonymous transactions' +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/replication_applier_filters.sql b/IDEA/performance_schema/replication_applier_filters.sql new file mode 100644 index 00000000..fbfec234 --- /dev/null +++ b/IDEA/performance_schema/replication_applier_filters.sql @@ -0,0 +1,11 @@ +create table performance_schema.replication_applier_filters +( + CHANNEL_NAME char(64) not null, + FILTER_NAME char(64) not null, + FILTER_RULE longtext not null, + CONFIGURED_BY enum ('STARTUP_OPTIONS', 'CHANGE_REPLICATION_FILTER', 'STARTUP_OPTIONS_FOR_CHANNEL', 'CHANGE_REPLICATION_FILTER_FOR_CHANNEL') not null, + ACTIVE_SINCE timestamp(6) not null, + COUNTER bigint unsigned default '0' not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/replication_applier_global_filters.sql b/IDEA/performance_schema/replication_applier_global_filters.sql new file mode 100644 index 00000000..e9341dfa --- /dev/null +++ b/IDEA/performance_schema/replication_applier_global_filters.sql @@ -0,0 +1,9 @@ +create table performance_schema.replication_applier_global_filters +( + FILTER_NAME char(64) not null, + FILTER_RULE longtext not null, + CONFIGURED_BY enum ('STARTUP_OPTIONS', 'CHANGE_REPLICATION_FILTER') not null, + ACTIVE_SINCE timestamp(6) not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/replication_applier_status.sql b/IDEA/performance_schema/replication_applier_status.sql new file mode 100644 index 00000000..e1998efc --- /dev/null +++ b/IDEA/performance_schema/replication_applier_status.sql @@ -0,0 +1,10 @@ +create table performance_schema.replication_applier_status +( + CHANNEL_NAME char(64) not null + primary key using hash, + SERVICE_STATE enum ('ON', 'OFF') not null, + REMAINING_DELAY int unsigned null, + COUNT_TRANSACTIONS_RETRIES bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/replication_applier_status_by_coordinator.sql b/IDEA/performance_schema/replication_applier_status_by_coordinator.sql new file mode 100644 index 00000000..39ae0c35 --- /dev/null +++ b/IDEA/performance_schema/replication_applier_status_by_coordinator.sql @@ -0,0 +1,25 @@ +create table performance_schema.replication_applier_status_by_coordinator +( + CHANNEL_NAME char(64) not null + primary key using hash, + THREAD_ID bigint unsigned null, + SERVICE_STATE enum ('ON', 'OFF') not null, + LAST_ERROR_NUMBER int not null, + LAST_ERROR_MESSAGE varchar(1024) not null, + LAST_ERROR_TIMESTAMP timestamp(6) not null, + LAST_PROCESSED_TRANSACTION char(57) null, + LAST_PROCESSED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP timestamp(6) not null, + LAST_PROCESSED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP timestamp(6) not null, + LAST_PROCESSED_TRANSACTION_START_BUFFER_TIMESTAMP timestamp(6) not null, + LAST_PROCESSED_TRANSACTION_END_BUFFER_TIMESTAMP timestamp(6) not null, + PROCESSING_TRANSACTION char(57) null, + PROCESSING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP timestamp(6) not null, + PROCESSING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP timestamp(6) not null, + PROCESSING_TRANSACTION_START_BUFFER_TIMESTAMP timestamp(6) not null +) + engine = PERFORMANCE_SCHEMA; + +create index THREAD_ID + on performance_schema.replication_applier_status_by_coordinator (THREAD_ID) + using hash; + diff --git a/IDEA/performance_schema/replication_applier_status_by_worker.sql b/IDEA/performance_schema/replication_applier_status_by_worker.sql new file mode 100644 index 00000000..c0ca5765 --- /dev/null +++ b/IDEA/performance_schema/replication_applier_status_by_worker.sql @@ -0,0 +1,34 @@ +create table performance_schema.replication_applier_status_by_worker +( + CHANNEL_NAME char(64) not null, + WORKER_ID bigint unsigned not null, + THREAD_ID bigint unsigned null, + SERVICE_STATE enum ('ON', 'OFF') not null, + LAST_ERROR_NUMBER int not null, + LAST_ERROR_MESSAGE varchar(1024) not null, + LAST_ERROR_TIMESTAMP timestamp(6) not null, + LAST_APPLIED_TRANSACTION char(57) null, + LAST_APPLIED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP timestamp(6) not null, + LAST_APPLIED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP timestamp(6) not null, + LAST_APPLIED_TRANSACTION_START_APPLY_TIMESTAMP timestamp(6) not null, + LAST_APPLIED_TRANSACTION_END_APPLY_TIMESTAMP timestamp(6) not null, + APPLYING_TRANSACTION char(57) null, + APPLYING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP timestamp(6) not null, + APPLYING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP timestamp(6) not null, + APPLYING_TRANSACTION_START_APPLY_TIMESTAMP timestamp(6) not null, + LAST_APPLIED_TRANSACTION_RETRIES_COUNT bigint unsigned not null, + LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER int not null, + LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE varchar(1024) null, + LAST_APPLIED_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP timestamp(6) not null, + APPLYING_TRANSACTION_RETRIES_COUNT bigint unsigned not null, + APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_NUMBER int not null, + APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_MESSAGE varchar(1024) null, + APPLYING_TRANSACTION_LAST_TRANSIENT_ERROR_TIMESTAMP timestamp(6) not null, + primary key (CHANNEL_NAME, WORKER_ID) using hash +) + engine = PERFORMANCE_SCHEMA; + +create index THREAD_ID + on performance_schema.replication_applier_status_by_worker (THREAD_ID) + using hash; + diff --git a/IDEA/performance_schema/replication_asynchronous_connection_failover.sql b/IDEA/performance_schema/replication_asynchronous_connection_failover.sql new file mode 100644 index 00000000..466c29e7 --- /dev/null +++ b/IDEA/performance_schema/replication_asynchronous_connection_failover.sql @@ -0,0 +1,11 @@ +create table performance_schema.replication_asynchronous_connection_failover +( + CHANNEL_NAME char(64) charset utf8mb3 not null comment 'The replication channel name that connects source and replica.', + HOST char(255) charset ascii not null comment 'The source hostname that the replica will attempt to switch over the replication connection to in case of a failure.', + PORT int not null comment 'The source port that the replica will attempt to switch over the replication connection to in case of a failure.', + NETWORK_NAMESPACE char(64) null comment 'The source network namespace that the replica will attempt to switch over the replication connection to in case of a failure. If its value is empty, connections use the default (global) namespace.', + WEIGHT int unsigned not null comment 'The order in which the replica shall try to switch the connection over to when there are failures. Weight can be set to a number between 1 and 100, where 100 is the highest weight and 1 the lowest.', + MANAGED_NAME char(64) charset utf8mb3 default '' not null comment 'The name of the group which this server belongs to.' +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/replication_asynchronous_connection_failover_managed.sql b/IDEA/performance_schema/replication_asynchronous_connection_failover_managed.sql new file mode 100644 index 00000000..0e515151 --- /dev/null +++ b/IDEA/performance_schema/replication_asynchronous_connection_failover_managed.sql @@ -0,0 +1,9 @@ +create table performance_schema.replication_asynchronous_connection_failover_managed +( + CHANNEL_NAME char(64) charset utf8mb3 not null comment 'The replication channel name that connects source and replica.', + MANAGED_NAME char(64) charset utf8mb3 default '' not null comment 'The name of the source which needs to be managed.', + MANAGED_TYPE char(64) charset utf8mb3 default '' not null comment 'Determines the managed type.', + CONFIGURATION json null comment 'The data to help manage group. For Managed_type = GroupReplication, Configuration value should contain {"Primary_weight": 80, "Secondary_weight": 60}, so that it assigns weight=80 to PRIMARY of the group, and weight=60 for rest of the members in mysql.replication_asynchronous_connection_failover table.' +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/replication_connection_configuration.sql b/IDEA/performance_schema/replication_connection_configuration.sql new file mode 100644 index 00000000..81305c0b --- /dev/null +++ b/IDEA/performance_schema/replication_connection_configuration.sql @@ -0,0 +1,33 @@ +create table performance_schema.replication_connection_configuration +( + CHANNEL_NAME char(64) not null + primary key using hash, + HOST char(255) charset ascii not null, + PORT int not null, + USER char(32) collate utf8mb4_bin not null, + NETWORK_INTERFACE char(60) collate utf8mb4_bin not null, + AUTO_POSITION enum ('1', '0') not null, + SSL_ALLOWED enum ('YES', 'NO', 'IGNORED') not null, + SSL_CA_FILE varchar(512) not null, + SSL_CA_PATH varchar(512) not null, + SSL_CERTIFICATE varchar(512) not null, + SSL_CIPHER varchar(512) not null, + SSL_KEY varchar(512) not null, + SSL_VERIFY_SERVER_CERTIFICATE enum ('YES', 'NO') not null, + SSL_CRL_FILE varchar(255) not null, + SSL_CRL_PATH varchar(255) not null, + CONNECTION_RETRY_INTERVAL int not null, + CONNECTION_RETRY_COUNT bigint unsigned not null, + HEARTBEAT_INTERVAL double(10, 3) not null comment 'Number of seconds after which a heartbeat will be sent .', + TLS_VERSION varchar(255) not null, + PUBLIC_KEY_PATH varchar(512) not null, + GET_PUBLIC_KEY enum ('YES', 'NO') not null, + NETWORK_NAMESPACE varchar(64) not null, + COMPRESSION_ALGORITHM char(64) collate utf8mb4_bin not null comment 'Compression algorithm used for data transfer between master and slave.', + ZSTD_COMPRESSION_LEVEL int not null comment 'Compression level associated with zstd compression algorithm.', + TLS_CIPHERSUITES text collate utf8mb3_bin null, + SOURCE_CONNECTION_AUTO_FAILOVER enum ('1', '0') not null, + GTID_ONLY enum ('1', '0') not null comment 'Indicates if this channel only uses GTIDs and does not persist positions.' +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/replication_connection_status.sql b/IDEA/performance_schema/replication_connection_status.sql new file mode 100644 index 00000000..361bc843 --- /dev/null +++ b/IDEA/performance_schema/replication_connection_status.sql @@ -0,0 +1,30 @@ +create table performance_schema.replication_connection_status +( + CHANNEL_NAME char(64) not null + primary key using hash, + GROUP_NAME char(36) collate utf8mb4_bin not null, + SOURCE_UUID char(36) collate utf8mb4_bin not null, + THREAD_ID bigint unsigned null, + SERVICE_STATE enum ('ON', 'OFF', 'CONNECTING') not null, + COUNT_RECEIVED_HEARTBEATS bigint unsigned default '0' not null, + LAST_HEARTBEAT_TIMESTAMP timestamp(6) not null comment 'Shows when the most recent heartbeat signal was received.', + RECEIVED_TRANSACTION_SET longtext not null, + LAST_ERROR_NUMBER int not null, + LAST_ERROR_MESSAGE varchar(1024) not null, + LAST_ERROR_TIMESTAMP timestamp(6) not null, + LAST_QUEUED_TRANSACTION char(57) null, + LAST_QUEUED_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP timestamp(6) not null, + LAST_QUEUED_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP timestamp(6) not null, + LAST_QUEUED_TRANSACTION_START_QUEUE_TIMESTAMP timestamp(6) not null, + LAST_QUEUED_TRANSACTION_END_QUEUE_TIMESTAMP timestamp(6) not null, + QUEUEING_TRANSACTION char(57) null, + QUEUEING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP timestamp(6) not null, + QUEUEING_TRANSACTION_IMMEDIATE_COMMIT_TIMESTAMP timestamp(6) not null, + QUEUEING_TRANSACTION_START_QUEUE_TIMESTAMP timestamp(6) not null +) + engine = PERFORMANCE_SCHEMA; + +create index THREAD_ID + on performance_schema.replication_connection_status (THREAD_ID) + using hash; + diff --git a/IDEA/performance_schema/replication_group_member_stats.sql b/IDEA/performance_schema/replication_group_member_stats.sql new file mode 100644 index 00000000..cf1c9982 --- /dev/null +++ b/IDEA/performance_schema/replication_group_member_stats.sql @@ -0,0 +1,18 @@ +create table performance_schema.replication_group_member_stats +( + CHANNEL_NAME char(64) not null, + VIEW_ID char(60) collate utf8mb4_bin not null, + MEMBER_ID char(36) collate utf8mb4_bin not null, + COUNT_TRANSACTIONS_IN_QUEUE bigint unsigned not null, + COUNT_TRANSACTIONS_CHECKED bigint unsigned not null, + COUNT_CONFLICTS_DETECTED bigint unsigned not null, + COUNT_TRANSACTIONS_ROWS_VALIDATING bigint unsigned not null, + TRANSACTIONS_COMMITTED_ALL_MEMBERS longtext not null, + LAST_CONFLICT_FREE_TRANSACTION text not null, + COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE bigint unsigned not null, + COUNT_TRANSACTIONS_REMOTE_APPLIED bigint unsigned not null, + COUNT_TRANSACTIONS_LOCAL_PROPOSED bigint unsigned not null, + COUNT_TRANSACTIONS_LOCAL_ROLLBACK bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/replication_group_members.sql b/IDEA/performance_schema/replication_group_members.sql new file mode 100644 index 00000000..510e531b --- /dev/null +++ b/IDEA/performance_schema/replication_group_members.sql @@ -0,0 +1,13 @@ +create table performance_schema.replication_group_members +( + CHANNEL_NAME char(64) not null, + MEMBER_ID char(36) collate utf8mb4_bin not null, + MEMBER_HOST char(255) charset ascii not null, + MEMBER_PORT int null, + MEMBER_STATE char(64) collate utf8mb4_bin not null, + MEMBER_ROLE char(64) collate utf8mb4_bin not null, + MEMBER_VERSION char(64) collate utf8mb4_bin not null, + MEMBER_COMMUNICATION_STACK char(64) collate utf8mb4_bin not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/rwlock_instances.sql b/IDEA/performance_schema/rwlock_instances.sql new file mode 100644 index 00000000..480e603e --- /dev/null +++ b/IDEA/performance_schema/rwlock_instances.sql @@ -0,0 +1,18 @@ +create table performance_schema.rwlock_instances +( + NAME varchar(128) not null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash, + WRITE_LOCKED_BY_THREAD_ID bigint unsigned null, + READ_LOCKED_BY_COUNT int unsigned not null +) + engine = PERFORMANCE_SCHEMA; + +create index NAME + on performance_schema.rwlock_instances (NAME) + using hash; + +create index WRITE_LOCKED_BY_THREAD_ID + on performance_schema.rwlock_instances (WRITE_LOCKED_BY_THREAD_ID) + using hash; + diff --git a/IDEA/performance_schema/session_account_connect_attrs.sql b/IDEA/performance_schema/session_account_connect_attrs.sql new file mode 100644 index 00000000..f16d105c --- /dev/null +++ b/IDEA/performance_schema/session_account_connect_attrs.sql @@ -0,0 +1,11 @@ +create table performance_schema.session_account_connect_attrs +( + PROCESSLIST_ID bigint unsigned not null, + ATTR_NAME varchar(32) not null, + ATTR_VALUE varchar(1024) null, + ORDINAL_POSITION int null, + primary key (PROCESSLIST_ID, ATTR_NAME) using hash +) + engine = PERFORMANCE_SCHEMA + collate = utf8mb4_bin; + diff --git a/IDEA/performance_schema/session_connect_attrs.sql b/IDEA/performance_schema/session_connect_attrs.sql new file mode 100644 index 00000000..a9996eb9 --- /dev/null +++ b/IDEA/performance_schema/session_connect_attrs.sql @@ -0,0 +1,11 @@ +create table performance_schema.session_connect_attrs +( + PROCESSLIST_ID bigint unsigned not null, + ATTR_NAME varchar(32) not null, + ATTR_VALUE varchar(1024) null, + ORDINAL_POSITION int null, + primary key (PROCESSLIST_ID, ATTR_NAME) using hash +) + engine = PERFORMANCE_SCHEMA + collate = utf8mb4_bin; + diff --git a/IDEA/performance_schema/session_status.sql b/IDEA/performance_schema/session_status.sql new file mode 100644 index 00000000..e30ad641 --- /dev/null +++ b/IDEA/performance_schema/session_status.sql @@ -0,0 +1,8 @@ +create table performance_schema.session_status +( + VARIABLE_NAME varchar(64) not null + primary key using hash, + VARIABLE_VALUE varchar(1024) null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/session_variables.sql b/IDEA/performance_schema/session_variables.sql new file mode 100644 index 00000000..8fcdc32c --- /dev/null +++ b/IDEA/performance_schema/session_variables.sql @@ -0,0 +1,8 @@ +create table performance_schema.session_variables +( + VARIABLE_NAME varchar(64) not null + primary key using hash, + VARIABLE_VALUE varchar(1024) null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/setup_actors.sql b/IDEA/performance_schema/setup_actors.sql new file mode 100644 index 00000000..59d4572f --- /dev/null +++ b/IDEA/performance_schema/setup_actors.sql @@ -0,0 +1,11 @@ +create table performance_schema.setup_actors +( + HOST char(255) charset ascii default '%' not null, + USER char(32) collate utf8mb4_bin default '%' not null, + ROLE char(32) collate utf8mb4_bin default '%' not null, + ENABLED enum ('YES', 'NO') default 'YES' not null, + HISTORY enum ('YES', 'NO') default 'YES' not null, + primary key (HOST, USER, ROLE) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/setup_consumers.sql b/IDEA/performance_schema/setup_consumers.sql new file mode 100644 index 00000000..323eacc1 --- /dev/null +++ b/IDEA/performance_schema/setup_consumers.sql @@ -0,0 +1,8 @@ +create table performance_schema.setup_consumers +( + NAME varchar(64) not null + primary key using hash, + ENABLED enum ('YES', 'NO') not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/setup_instruments.sql b/IDEA/performance_schema/setup_instruments.sql new file mode 100644 index 00000000..abb49de9 --- /dev/null +++ b/IDEA/performance_schema/setup_instruments.sql @@ -0,0 +1,13 @@ +create table performance_schema.setup_instruments +( + NAME varchar(128) not null + primary key using hash, + ENABLED enum ('YES', 'NO') not null, + TIMED enum ('YES', 'NO') null, + PROPERTIES set ('singleton', 'progress', 'user', 'global_statistics', 'mutable', 'controlled_by_default') not null, + FLAGS set ('controlled') null, + VOLATILITY int not null, + DOCUMENTATION longtext null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/setup_objects.sql b/IDEA/performance_schema/setup_objects.sql new file mode 100644 index 00000000..df4e08a1 --- /dev/null +++ b/IDEA/performance_schema/setup_objects.sql @@ -0,0 +1,12 @@ +create table performance_schema.setup_objects +( + OBJECT_TYPE enum ('EVENT', 'FUNCTION', 'PROCEDURE', 'TABLE', 'TRIGGER') default 'TABLE' not null, + OBJECT_SCHEMA varchar(64) default '%' null, + OBJECT_NAME varchar(64) default '%' not null, + ENABLED enum ('YES', 'NO') default 'YES' not null, + TIMED enum ('YES', 'NO') default 'YES' not null, + constraint OBJECT + unique (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/setup_threads.sql b/IDEA/performance_schema/setup_threads.sql new file mode 100644 index 00000000..0fa82dab --- /dev/null +++ b/IDEA/performance_schema/setup_threads.sql @@ -0,0 +1,12 @@ +create table performance_schema.setup_threads +( + NAME varchar(128) not null + primary key using hash, + ENABLED enum ('YES', 'NO') not null, + HISTORY enum ('YES', 'NO') not null, + PROPERTIES set ('singleton', 'user') not null, + VOLATILITY int not null, + DOCUMENTATION longtext null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/socket_instances.sql b/IDEA/performance_schema/socket_instances.sql new file mode 100644 index 00000000..7bf92b1f --- /dev/null +++ b/IDEA/performance_schema/socket_instances.sql @@ -0,0 +1,25 @@ +create table performance_schema.socket_instances +( + EVENT_NAME varchar(128) not null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash, + THREAD_ID bigint unsigned null, + SOCKET_ID int not null, + IP varchar(64) not null, + PORT int not null, + STATE enum ('IDLE', 'ACTIVE') not null +) + engine = PERFORMANCE_SCHEMA; + +create index IP + on performance_schema.socket_instances (IP, PORT) + using hash; + +create index SOCKET_ID + on performance_schema.socket_instances (SOCKET_ID) + using hash; + +create index THREAD_ID + on performance_schema.socket_instances (THREAD_ID) + using hash; + diff --git a/IDEA/performance_schema/socket_summary_by_event_name.sql b/IDEA/performance_schema/socket_summary_by_event_name.sql new file mode 100644 index 00000000..0bf73a8d --- /dev/null +++ b/IDEA/performance_schema/socket_summary_by_event_name.sql @@ -0,0 +1,29 @@ +create table performance_schema.socket_summary_by_event_name +( + EVENT_NAME varchar(128) not null + primary key using hash, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ bigint unsigned not null, + SUM_TIMER_READ bigint unsigned not null, + MIN_TIMER_READ bigint unsigned not null, + AVG_TIMER_READ bigint unsigned not null, + MAX_TIMER_READ bigint unsigned not null, + SUM_NUMBER_OF_BYTES_READ bigint unsigned not null, + COUNT_WRITE bigint unsigned not null, + SUM_TIMER_WRITE bigint unsigned not null, + MIN_TIMER_WRITE bigint unsigned not null, + AVG_TIMER_WRITE bigint unsigned not null, + MAX_TIMER_WRITE bigint unsigned not null, + SUM_NUMBER_OF_BYTES_WRITE bigint unsigned not null, + COUNT_MISC bigint unsigned not null, + SUM_TIMER_MISC bigint unsigned not null, + MIN_TIMER_MISC bigint unsigned not null, + AVG_TIMER_MISC bigint unsigned not null, + MAX_TIMER_MISC bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/socket_summary_by_instance.sql b/IDEA/performance_schema/socket_summary_by_instance.sql new file mode 100644 index 00000000..de813058 --- /dev/null +++ b/IDEA/performance_schema/socket_summary_by_instance.sql @@ -0,0 +1,34 @@ +create table performance_schema.socket_summary_by_instance +( + EVENT_NAME varchar(128) not null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ bigint unsigned not null, + SUM_TIMER_READ bigint unsigned not null, + MIN_TIMER_READ bigint unsigned not null, + AVG_TIMER_READ bigint unsigned not null, + MAX_TIMER_READ bigint unsigned not null, + SUM_NUMBER_OF_BYTES_READ bigint unsigned not null, + COUNT_WRITE bigint unsigned not null, + SUM_TIMER_WRITE bigint unsigned not null, + MIN_TIMER_WRITE bigint unsigned not null, + AVG_TIMER_WRITE bigint unsigned not null, + MAX_TIMER_WRITE bigint unsigned not null, + SUM_NUMBER_OF_BYTES_WRITE bigint unsigned not null, + COUNT_MISC bigint unsigned not null, + SUM_TIMER_MISC bigint unsigned not null, + MIN_TIMER_MISC bigint unsigned not null, + AVG_TIMER_MISC bigint unsigned not null, + MAX_TIMER_MISC bigint unsigned not null +) + engine = PERFORMANCE_SCHEMA; + +create index EVENT_NAME + on performance_schema.socket_summary_by_instance (EVENT_NAME) + using hash; + diff --git a/IDEA/performance_schema/status_by_account.sql b/IDEA/performance_schema/status_by_account.sql new file mode 100644 index 00000000..429d6087 --- /dev/null +++ b/IDEA/performance_schema/status_by_account.sql @@ -0,0 +1,11 @@ +create table performance_schema.status_by_account +( + USER char(32) collate utf8mb4_bin null, + HOST char(255) charset ascii null, + VARIABLE_NAME varchar(64) not null, + VARIABLE_VALUE varchar(1024) null, + constraint ACCOUNT + unique (USER, HOST, VARIABLE_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/status_by_host.sql b/IDEA/performance_schema/status_by_host.sql new file mode 100644 index 00000000..e0c3b220 --- /dev/null +++ b/IDEA/performance_schema/status_by_host.sql @@ -0,0 +1,10 @@ +create table performance_schema.status_by_host +( + HOST char(255) charset ascii null, + VARIABLE_NAME varchar(64) not null, + VARIABLE_VALUE varchar(1024) null, + constraint HOST + unique (HOST, VARIABLE_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/status_by_thread.sql b/IDEA/performance_schema/status_by_thread.sql new file mode 100644 index 00000000..1efd0d4e --- /dev/null +++ b/IDEA/performance_schema/status_by_thread.sql @@ -0,0 +1,9 @@ +create table performance_schema.status_by_thread +( + THREAD_ID bigint unsigned not null, + VARIABLE_NAME varchar(64) not null, + VARIABLE_VALUE varchar(1024) null, + primary key (THREAD_ID, VARIABLE_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/status_by_user.sql b/IDEA/performance_schema/status_by_user.sql new file mode 100644 index 00000000..1de909e0 --- /dev/null +++ b/IDEA/performance_schema/status_by_user.sql @@ -0,0 +1,10 @@ +create table performance_schema.status_by_user +( + USER char(32) collate utf8mb4_bin null, + VARIABLE_NAME varchar(64) not null, + VARIABLE_VALUE varchar(1024) null, + constraint USER + unique (USER, VARIABLE_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/table_handles.sql b/IDEA/performance_schema/table_handles.sql new file mode 100644 index 00000000..d95eacb5 --- /dev/null +++ b/IDEA/performance_schema/table_handles.sql @@ -0,0 +1,22 @@ +create table performance_schema.table_handles +( + OBJECT_TYPE varchar(64) not null, + OBJECT_SCHEMA varchar(64) not null, + OBJECT_NAME varchar(64) not null, + OBJECT_INSTANCE_BEGIN bigint unsigned not null + primary key using hash, + OWNER_THREAD_ID bigint unsigned null, + OWNER_EVENT_ID bigint unsigned null, + INTERNAL_LOCK varchar(64) null, + EXTERNAL_LOCK varchar(64) null +) + engine = PERFORMANCE_SCHEMA; + +create index OBJECT_TYPE + on performance_schema.table_handles (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME) + using hash; + +create index OWNER_THREAD_ID + on performance_schema.table_handles (OWNER_THREAD_ID, OWNER_EVENT_ID) + using hash; + diff --git a/IDEA/performance_schema/table_io_waits_summary_by_index_usage.sql b/IDEA/performance_schema/table_io_waits_summary_by_index_usage.sql new file mode 100644 index 00000000..219fdf0c --- /dev/null +++ b/IDEA/performance_schema/table_io_waits_summary_by_index_usage.sql @@ -0,0 +1,46 @@ +create table performance_schema.table_io_waits_summary_by_index_usage +( + OBJECT_TYPE varchar(64) null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(64) null, + INDEX_NAME varchar(64) null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ bigint unsigned not null, + SUM_TIMER_READ bigint unsigned not null, + MIN_TIMER_READ bigint unsigned not null, + AVG_TIMER_READ bigint unsigned not null, + MAX_TIMER_READ bigint unsigned not null, + COUNT_WRITE bigint unsigned not null, + SUM_TIMER_WRITE bigint unsigned not null, + MIN_TIMER_WRITE bigint unsigned not null, + AVG_TIMER_WRITE bigint unsigned not null, + MAX_TIMER_WRITE bigint unsigned not null, + COUNT_FETCH bigint unsigned not null, + SUM_TIMER_FETCH bigint unsigned not null, + MIN_TIMER_FETCH bigint unsigned not null, + AVG_TIMER_FETCH bigint unsigned not null, + MAX_TIMER_FETCH bigint unsigned not null, + COUNT_INSERT bigint unsigned not null, + SUM_TIMER_INSERT bigint unsigned not null, + MIN_TIMER_INSERT bigint unsigned not null, + AVG_TIMER_INSERT bigint unsigned not null, + MAX_TIMER_INSERT bigint unsigned not null, + COUNT_UPDATE bigint unsigned not null, + SUM_TIMER_UPDATE bigint unsigned not null, + MIN_TIMER_UPDATE bigint unsigned not null, + AVG_TIMER_UPDATE bigint unsigned not null, + MAX_TIMER_UPDATE bigint unsigned not null, + COUNT_DELETE bigint unsigned not null, + SUM_TIMER_DELETE bigint unsigned not null, + MIN_TIMER_DELETE bigint unsigned not null, + AVG_TIMER_DELETE bigint unsigned not null, + MAX_TIMER_DELETE bigint unsigned not null, + constraint OBJECT + unique (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME, INDEX_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/table_io_waits_summary_by_table.sql b/IDEA/performance_schema/table_io_waits_summary_by_table.sql new file mode 100644 index 00000000..043dc44c --- /dev/null +++ b/IDEA/performance_schema/table_io_waits_summary_by_table.sql @@ -0,0 +1,45 @@ +create table performance_schema.table_io_waits_summary_by_table +( + OBJECT_TYPE varchar(64) null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(64) null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ bigint unsigned not null, + SUM_TIMER_READ bigint unsigned not null, + MIN_TIMER_READ bigint unsigned not null, + AVG_TIMER_READ bigint unsigned not null, + MAX_TIMER_READ bigint unsigned not null, + COUNT_WRITE bigint unsigned not null, + SUM_TIMER_WRITE bigint unsigned not null, + MIN_TIMER_WRITE bigint unsigned not null, + AVG_TIMER_WRITE bigint unsigned not null, + MAX_TIMER_WRITE bigint unsigned not null, + COUNT_FETCH bigint unsigned not null, + SUM_TIMER_FETCH bigint unsigned not null, + MIN_TIMER_FETCH bigint unsigned not null, + AVG_TIMER_FETCH bigint unsigned not null, + MAX_TIMER_FETCH bigint unsigned not null, + COUNT_INSERT bigint unsigned not null, + SUM_TIMER_INSERT bigint unsigned not null, + MIN_TIMER_INSERT bigint unsigned not null, + AVG_TIMER_INSERT bigint unsigned not null, + MAX_TIMER_INSERT bigint unsigned not null, + COUNT_UPDATE bigint unsigned not null, + SUM_TIMER_UPDATE bigint unsigned not null, + MIN_TIMER_UPDATE bigint unsigned not null, + AVG_TIMER_UPDATE bigint unsigned not null, + MAX_TIMER_UPDATE bigint unsigned not null, + COUNT_DELETE bigint unsigned not null, + SUM_TIMER_DELETE bigint unsigned not null, + MIN_TIMER_DELETE bigint unsigned not null, + AVG_TIMER_DELETE bigint unsigned not null, + MAX_TIMER_DELETE bigint unsigned not null, + constraint OBJECT + unique (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/table_lock_waits_summary_by_table.sql b/IDEA/performance_schema/table_lock_waits_summary_by_table.sql new file mode 100644 index 00000000..a8eb61e0 --- /dev/null +++ b/IDEA/performance_schema/table_lock_waits_summary_by_table.sql @@ -0,0 +1,75 @@ +create table performance_schema.table_lock_waits_summary_by_table +( + OBJECT_TYPE varchar(64) null, + OBJECT_SCHEMA varchar(64) null, + OBJECT_NAME varchar(64) null, + COUNT_STAR bigint unsigned not null, + SUM_TIMER_WAIT bigint unsigned not null, + MIN_TIMER_WAIT bigint unsigned not null, + AVG_TIMER_WAIT bigint unsigned not null, + MAX_TIMER_WAIT bigint unsigned not null, + COUNT_READ bigint unsigned not null, + SUM_TIMER_READ bigint unsigned not null, + MIN_TIMER_READ bigint unsigned not null, + AVG_TIMER_READ bigint unsigned not null, + MAX_TIMER_READ bigint unsigned not null, + COUNT_WRITE bigint unsigned not null, + SUM_TIMER_WRITE bigint unsigned not null, + MIN_TIMER_WRITE bigint unsigned not null, + AVG_TIMER_WRITE bigint unsigned not null, + MAX_TIMER_WRITE bigint unsigned not null, + COUNT_READ_NORMAL bigint unsigned not null, + SUM_TIMER_READ_NORMAL bigint unsigned not null, + MIN_TIMER_READ_NORMAL bigint unsigned not null, + AVG_TIMER_READ_NORMAL bigint unsigned not null, + MAX_TIMER_READ_NORMAL bigint unsigned not null, + COUNT_READ_WITH_SHARED_LOCKS bigint unsigned not null, + SUM_TIMER_READ_WITH_SHARED_LOCKS bigint unsigned not null, + MIN_TIMER_READ_WITH_SHARED_LOCKS bigint unsigned not null, + AVG_TIMER_READ_WITH_SHARED_LOCKS bigint unsigned not null, + MAX_TIMER_READ_WITH_SHARED_LOCKS bigint unsigned not null, + COUNT_READ_HIGH_PRIORITY bigint unsigned not null, + SUM_TIMER_READ_HIGH_PRIORITY bigint unsigned not null, + MIN_TIMER_READ_HIGH_PRIORITY bigint unsigned not null, + AVG_TIMER_READ_HIGH_PRIORITY bigint unsigned not null, + MAX_TIMER_READ_HIGH_PRIORITY bigint unsigned not null, + COUNT_READ_NO_INSERT bigint unsigned not null, + SUM_TIMER_READ_NO_INSERT bigint unsigned not null, + MIN_TIMER_READ_NO_INSERT bigint unsigned not null, + AVG_TIMER_READ_NO_INSERT bigint unsigned not null, + MAX_TIMER_READ_NO_INSERT bigint unsigned not null, + COUNT_READ_EXTERNAL bigint unsigned not null, + SUM_TIMER_READ_EXTERNAL bigint unsigned not null, + MIN_TIMER_READ_EXTERNAL bigint unsigned not null, + AVG_TIMER_READ_EXTERNAL bigint unsigned not null, + MAX_TIMER_READ_EXTERNAL bigint unsigned not null, + COUNT_WRITE_ALLOW_WRITE bigint unsigned not null, + SUM_TIMER_WRITE_ALLOW_WRITE bigint unsigned not null, + MIN_TIMER_WRITE_ALLOW_WRITE bigint unsigned not null, + AVG_TIMER_WRITE_ALLOW_WRITE bigint unsigned not null, + MAX_TIMER_WRITE_ALLOW_WRITE bigint unsigned not null, + COUNT_WRITE_CONCURRENT_INSERT bigint unsigned not null, + SUM_TIMER_WRITE_CONCURRENT_INSERT bigint unsigned not null, + MIN_TIMER_WRITE_CONCURRENT_INSERT bigint unsigned not null, + AVG_TIMER_WRITE_CONCURRENT_INSERT bigint unsigned not null, + MAX_TIMER_WRITE_CONCURRENT_INSERT bigint unsigned not null, + COUNT_WRITE_LOW_PRIORITY bigint unsigned not null, + SUM_TIMER_WRITE_LOW_PRIORITY bigint unsigned not null, + MIN_TIMER_WRITE_LOW_PRIORITY bigint unsigned not null, + AVG_TIMER_WRITE_LOW_PRIORITY bigint unsigned not null, + MAX_TIMER_WRITE_LOW_PRIORITY bigint unsigned not null, + COUNT_WRITE_NORMAL bigint unsigned not null, + SUM_TIMER_WRITE_NORMAL bigint unsigned not null, + MIN_TIMER_WRITE_NORMAL bigint unsigned not null, + AVG_TIMER_WRITE_NORMAL bigint unsigned not null, + MAX_TIMER_WRITE_NORMAL bigint unsigned not null, + COUNT_WRITE_EXTERNAL bigint unsigned not null, + SUM_TIMER_WRITE_EXTERNAL bigint unsigned not null, + MIN_TIMER_WRITE_EXTERNAL bigint unsigned not null, + AVG_TIMER_WRITE_EXTERNAL bigint unsigned not null, + MAX_TIMER_WRITE_EXTERNAL bigint unsigned not null, + constraint OBJECT + unique (OBJECT_TYPE, OBJECT_SCHEMA, OBJECT_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/threads.sql b/IDEA/performance_schema/threads.sql new file mode 100644 index 00000000..1ef70bd5 --- /dev/null +++ b/IDEA/performance_schema/threads.sql @@ -0,0 +1,54 @@ +create table performance_schema.threads +( + THREAD_ID bigint unsigned not null + primary key using hash, + NAME varchar(128) not null, + TYPE varchar(10) not null, + PROCESSLIST_ID bigint unsigned null, + PROCESSLIST_USER varchar(32) null, + PROCESSLIST_HOST varchar(255) charset ascii null, + PROCESSLIST_DB varchar(64) null, + PROCESSLIST_COMMAND varchar(16) null, + PROCESSLIST_TIME bigint null, + PROCESSLIST_STATE varchar(64) null, + PROCESSLIST_INFO longtext null, + PARENT_THREAD_ID bigint unsigned null, + ROLE varchar(64) null, + INSTRUMENTED enum ('YES', 'NO') not null, + HISTORY enum ('YES', 'NO') not null, + CONNECTION_TYPE varchar(16) null, + THREAD_OS_ID bigint unsigned null, + RESOURCE_GROUP varchar(64) null, + EXECUTION_ENGINE enum ('PRIMARY', 'SECONDARY') null, + CONTROLLED_MEMORY bigint unsigned not null, + MAX_CONTROLLED_MEMORY bigint unsigned not null, + TOTAL_MEMORY bigint unsigned not null, + MAX_TOTAL_MEMORY bigint unsigned not null, + TELEMETRY_ACTIVE enum ('YES', 'NO') not null +) + engine = PERFORMANCE_SCHEMA; + +create index NAME + on performance_schema.threads (NAME) + using hash; + +create index PROCESSLIST_ACCOUNT + on performance_schema.threads (PROCESSLIST_USER, PROCESSLIST_HOST) + using hash; + +create index PROCESSLIST_HOST + on performance_schema.threads (PROCESSLIST_HOST) + using hash; + +create index PROCESSLIST_ID + on performance_schema.threads (PROCESSLIST_ID) + using hash; + +create index RESOURCE_GROUP + on performance_schema.threads (RESOURCE_GROUP) + using hash; + +create index THREAD_OS_ID + on performance_schema.threads (THREAD_OS_ID) + using hash; + diff --git a/IDEA/performance_schema/tls_channel_status.sql b/IDEA/performance_schema/tls_channel_status.sql new file mode 100644 index 00000000..44e1c92e --- /dev/null +++ b/IDEA/performance_schema/tls_channel_status.sql @@ -0,0 +1,8 @@ +create table performance_schema.tls_channel_status +( + CHANNEL varchar(128) not null, + PROPERTY varchar(128) not null, + VALUE varchar(2048) not null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/user_defined_functions.sql b/IDEA/performance_schema/user_defined_functions.sql new file mode 100644 index 00000000..7f56dcd4 --- /dev/null +++ b/IDEA/performance_schema/user_defined_functions.sql @@ -0,0 +1,11 @@ +create table performance_schema.user_defined_functions +( + UDF_NAME varchar(64) not null + primary key using hash, + UDF_RETURN_TYPE varchar(20) not null, + UDF_TYPE varchar(20) not null, + UDF_LIBRARY varchar(1024) null, + UDF_USAGE_COUNT bigint null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/user_variables_by_thread.sql b/IDEA/performance_schema/user_variables_by_thread.sql new file mode 100644 index 00000000..18c45772 --- /dev/null +++ b/IDEA/performance_schema/user_variables_by_thread.sql @@ -0,0 +1,9 @@ +create table performance_schema.user_variables_by_thread +( + THREAD_ID bigint unsigned not null, + VARIABLE_NAME varchar(64) not null, + VARIABLE_VALUE longblob null, + primary key (THREAD_ID, VARIABLE_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/users.sql b/IDEA/performance_schema/users.sql new file mode 100644 index 00000000..45d9e487 --- /dev/null +++ b/IDEA/performance_schema/users.sql @@ -0,0 +1,12 @@ +create table performance_schema.users +( + USER char(32) collate utf8mb4_bin null, + CURRENT_CONNECTIONS bigint not null, + TOTAL_CONNECTIONS bigint not null, + MAX_SESSION_CONTROLLED_MEMORY bigint unsigned not null, + MAX_SESSION_TOTAL_MEMORY bigint unsigned not null, + constraint USER + unique (USER) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/variables_by_thread.sql b/IDEA/performance_schema/variables_by_thread.sql new file mode 100644 index 00000000..f94d9d5d --- /dev/null +++ b/IDEA/performance_schema/variables_by_thread.sql @@ -0,0 +1,9 @@ +create table performance_schema.variables_by_thread +( + THREAD_ID bigint unsigned not null, + VARIABLE_NAME varchar(64) not null, + VARIABLE_VALUE varchar(1024) null, + primary key (THREAD_ID, VARIABLE_NAME) using hash +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/performance_schema/variables_info.sql b/IDEA/performance_schema/variables_info.sql new file mode 100644 index 00000000..5d9ee400 --- /dev/null +++ b/IDEA/performance_schema/variables_info.sql @@ -0,0 +1,13 @@ +create table performance_schema.variables_info +( + VARIABLE_NAME varchar(64) not null, + VARIABLE_SOURCE enum ('COMPILED', 'GLOBAL', 'SERVER', 'EXPLICIT', 'EXTRA', 'USER', 'LOGIN', 'COMMAND_LINE', 'PERSISTED', 'DYNAMIC') default 'COMPILED' null, + VARIABLE_PATH varchar(1024) null, + MIN_VALUE varchar(64) null, + MAX_VALUE varchar(64) null, + SET_TIME timestamp(6) null, + SET_USER char(32) collate utf8mb4_bin null, + SET_HOST char(255) charset ascii null +) + engine = PERFORMANCE_SCHEMA; + diff --git a/IDEA/pom.xml b/IDEA/pom.xml new file mode 100644 index 00000000..12eac4c5 --- /dev/null +++ b/IDEA/pom.xml @@ -0,0 +1,140 @@ + + + 4.0.0 + com.example + api + 0.0.1-SNAPSHOT + + + org.springframework.boot + spring-boot-starter-parent + 2.7.2 + + + + 11 + 0.9.1 + 3.4.2 + 1.2.73 + 1.4.7.RELEASE + + + + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter + + + + + org.springframework.boot + spring-boot-starter-data-jpa + + + + + org.springframework.boot + spring-boot-starter-security + + + + + org.springframework.boot + spring-boot-starter-mail + + + + org.springframework + spring-context-support + 5.3.3 + + + + + io.jsonwebtoken + jjwt + ${jwt.version} + + + + + mysql + mysql-connector-java + runtime + + + + + org.projectlombok + lombok + 1.18.24 + true + + + + + com.alibaba + fastjson + ${fastjson.version} + + + + + + javax.xml.bind + jaxb-api + 2.3.0 + + + com.sun.xml.bind + jaxb-impl + 2.3.0 + + + com.sun.xml.bind + jaxb-core + 2.3.0 + + + javax.activation + activation + 1.1.1 + + + com.fasterxml.jackson.core + jackson-databind + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + org.projectlombok + lombok + + + + + + + + + + + + + diff --git a/IDEA/src/main/java/com/example/api/ApiApplication.java b/IDEA/src/main/java/com/example/api/ApiApplication.java new file mode 100644 index 00000000..9aa6b2f8 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/ApiApplication.java @@ -0,0 +1,13 @@ +package com.example.api; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class ApiApplication { + public static void main(String[] args) { + SpringApplication.run(ApiApplication.class, args); + + } + +} diff --git a/IDEA/src/main/java/com/example/api/annotation/DisableBaseResponse.java b/IDEA/src/main/java/com/example/api/annotation/DisableBaseResponse.java new file mode 100644 index 00000000..6a31ba6d --- /dev/null +++ b/IDEA/src/main/java/com/example/api/annotation/DisableBaseResponse.java @@ -0,0 +1,14 @@ +package com.example.api.annotation; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * 加上注解后不统一封装返回 + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +public @interface DisableBaseResponse { +} diff --git a/IDEA/src/main/java/com/example/api/annotation/Log.java b/IDEA/src/main/java/com/example/api/annotation/Log.java new file mode 100644 index 00000000..5aa33f54 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/annotation/Log.java @@ -0,0 +1,20 @@ +package com.example.api.annotation; + +import com.example.api.model.enums.BusincessType; + +import java.lang.annotation.*; + +@Target(ElementType.METHOD) //目标类型 +@Retention(RetentionPolicy.RUNTIME) //作用范围 +@Documented +public @interface Log { + /* + 功能模块 + */ + String moudle() default ""; + + /* + 操作类型 + */ + BusincessType type(); +} diff --git a/IDEA/src/main/java/com/example/api/aspect/LogAspect.java b/IDEA/src/main/java/com/example/api/aspect/LogAspect.java new file mode 100644 index 00000000..3c0b2fba --- /dev/null +++ b/IDEA/src/main/java/com/example/api/aspect/LogAspect.java @@ -0,0 +1,76 @@ +package com.example.api.aspect; + +import com.example.api.annotation.Log; +import com.example.api.model.entity.SystemLog; +import com.example.api.service.SystemLogService; +import com.example.api.utils.IpUtil; +import com.example.api.utils.JwtTokenUtil; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import javax.servlet.http.HttpServletRequest; +import java.lang.reflect.Method; +import java.time.LocalDateTime; + +@Aspect +@Component +public class LogAspect { + @Autowired + private SystemLogService logService; + + /* + 表明切点 + */ + @Pointcut("@annotation(com.example.api.annotation.Log)") + public void pt(){} + + /* + 环绕通知 + */ + @Around("pt()") + public Object Around(ProceedingJoinPoint point) throws Throwable { + //记录开始时间 + long beginTime = System.currentTimeMillis(); + Object res = null; + try { + //执行方法 + res = point.proceed(); + }finally { + //计算执行时长 + long time = System.currentTimeMillis() - beginTime; + recordLog(point); + } + return res; + } + + private void recordLog(ProceedingJoinPoint point){ + //获取当前请求对象 + ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + HttpServletRequest request = requestAttributes.getRequest(); + //获取目标方法签名 + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = signature.getMethod(); + Log annotation = method.getAnnotation(Log.class); + //封装日志对象 + SystemLog systemLog = new SystemLog(); + systemLog.setModule(annotation.moudle()); + systemLog.setBusincessType(annotation.type().getName()); + systemLog.setIp(IpUtil.getIpAddr(request)); + systemLog.setTime(LocalDateTime.now()); + //获取方法的全路径 + systemLog.setMethod(signature.getDeclaringTypeName()+"."+signature.getName()); + //获取token,并解析token来获取当前账号 + String token = request.getHeader(JwtTokenUtil.TOKEN_HEADER); + systemLog.setAccount(JwtTokenUtil.getUsername(token)); + //持久化到数据库 + logService.record(systemLog); + } +} diff --git a/IDEA/src/main/java/com/example/api/controller/AdminController.java b/IDEA/src/main/java/com/example/api/controller/AdminController.java new file mode 100644 index 00000000..aa01af69 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/AdminController.java @@ -0,0 +1,101 @@ +package com.example.api.controller; + +import com.example.api.exception.AccountAndPasswordError; +import com.example.api.model.dto.LoginDto; +import com.example.api.model.entity.Admin; +import com.example.api.model.entity.LoginLog; +import com.example.api.model.enums.Role; +import com.example.api.model.support.ResponseResult; +import com.example.api.repository.AdminRepository; +import com.example.api.service.AdminService; +import com.example.api.service.LoginLogService; +import com.example.api.utils.JwtTokenUtil; +import lombok.extern.slf4j.Slf4j; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +@RestController +@RequestMapping("/api/admin") +@Slf4j +public class AdminController { + //获取日志对象 + Logger logger = LoggerFactory.getLogger(AdminController.class); + + @Resource + private AdminService adminService; + + @Resource + private AdminRepository adminRepository; + + @Resource + private LoginLogService loginLogService; + + @GetMapping("hasInit") + public boolean hasInit() { + return adminRepository.existsAdminByRoles(Role.ROLE_SUPER_ADMIN.getValue()); + } + + @PostMapping("/init") + public Admin init(@RequestBody Admin admin) throws Exception { + admin.setRoles(Role.ROLE_SUPER_ADMIN.getValue()); + return adminService.save(admin); + } + + @GetMapping("") + @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_ADMIN')") + public List findAll() { + return adminService.findAll(); + } + + @DeleteMapping("") + @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_ADMIN')") + public void delete(String id) { + adminService.delete(id); + } + + @PostMapping("") + @PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_ADMIN')") + public Admin save(@RequestBody Admin admin) throws Exception { + return adminService.save(admin); + } + + @PostMapping("/login") + public Map loginByEmail(String type, @RequestBody LoginDto dto, HttpServletRequest request) throws Exception { + Map map = new HashMap<>(); + Admin admin = null; + String token = null; + try { + admin = type.equals("email") ? adminService.loginByEmail(dto) : adminService.loginByPassword(dto); + token = adminService.createToken(admin, + dto.isRemember() ? JwtTokenUtil.REMEMBER_EXPIRATION_TIME : JwtTokenUtil.EXPIRATION_TIME); + }catch (Exception e){ + throw new Exception("邮箱或密码错误"); + }finally { + loginLogService.recordLog(dto,admin,request); + } + map.put("admin", admin); + map.put("token", token); + return map; + } + + @GetMapping("/sendEmail") + public ResponseResult sendEmail(String email) throws Exception { + Boolean flag = adminService.sendEmail(email); + ResponseResult res = new ResponseResult(); + if (flag){ + res.setMsg("发送成功,请登录邮箱查看"); + }else { + res.setMsg("发送验证码失败,请检查邮箱服务"); + } + res.setStatus(flag); + return res; + } + +} diff --git a/IDEA/src/main/java/com/example/api/controller/CommodityController.java b/IDEA/src/main/java/com/example/api/controller/CommodityController.java new file mode 100644 index 00000000..92afa5aa --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/CommodityController.java @@ -0,0 +1,58 @@ +package com.example.api.controller; + +import com.example.api.annotation.Log; +import com.example.api.model.entity.Commodity; +import com.example.api.model.enums.BusincessType; +import com.example.api.service.CommodityService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/api/commodity") +@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN','ROLE_COMMODITY','ROLE_SALE')") +public class CommodityController { + + @Resource + private CommodityService commodityService; + + @Log(moudle = "商品管理",type = BusincessType.INSERT) + @PostMapping("") + public Commodity save(@RequestBody Commodity commodity) { + return commodityService.save(commodity); + } + + @Log(moudle = "商品管理",type = BusincessType.DELETE) + @DeleteMapping("") + public void delete(String id) { + commodityService.delete(id); + } + + @Log(moudle = "商品管理",type = BusincessType.UPDATE) + @PutMapping("") + public void update(@RequestBody Commodity commodity) { + commodityService.update(commodity); + } + + @Log(moudle = "商品管理",type = BusincessType.QUERY) + @GetMapping("") + public List findAll() { + return commodityService.findAll(); + } + + @Log(moudle = "商品管理",type = BusincessType.QUERY) + @GetMapping("/search/{name}") + public List findByLikeName(@PathVariable String name) { + return commodityService.findAllByLikeName(name); + } + + @Log(moudle = "商品管理",type = BusincessType.QUERY) + @GetMapping("/{id}") + public Commodity findById(@PathVariable String id) { + return commodityService.findById(id); + } + + +} diff --git a/IDEA/src/main/java/com/example/api/controller/DistributionController.java b/IDEA/src/main/java/com/example/api/controller/DistributionController.java new file mode 100644 index 00000000..f3de56ab --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/DistributionController.java @@ -0,0 +1,49 @@ +package com.example.api.controller; + +import com.example.api.annotation.Log; +import com.example.api.model.entity.Distribution; +import com.example.api.model.enums.BusincessType; +import com.example.api.repository.DriverRepository; +import com.example.api.repository.VehicleRepository; +import com.example.api.service.DistributionService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api/distribution") +public class DistributionController { + + @Resource + private DistributionService distributionService; + + @Resource + private DriverRepository driverRepository; + + @Resource + private VehicleRepository vehicleRepository; + + @Log(moudle = "配送管理",type = BusincessType.INSERT) + @PostMapping("") + public Distribution save(@RequestBody Distribution distribution) throws Exception { + return distributionService.save(distribution); + } + + @Log(moudle = "配送管理",type = BusincessType.QUERY) + @GetMapping("") + public List findAll() { + return distributionService.findAll(); + } + + @GetMapping("can") + public Map can() { + Map map = new HashMap<>(); + map.put("drivers", driverRepository.findAll()); + map.put("vehicles", vehicleRepository.findAll()); + return map; + } + +} diff --git a/IDEA/src/main/java/com/example/api/controller/DriverController.java b/IDEA/src/main/java/com/example/api/controller/DriverController.java new file mode 100644 index 00000000..b086f690 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/DriverController.java @@ -0,0 +1,43 @@ +package com.example.api.controller; + +import com.example.api.annotation.Log; +import com.example.api.model.entity.Driver; +import com.example.api.model.enums.BusincessType; +import com.example.api.service.DriverService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/api/driver") +public class DriverController { + + @Resource + private DriverService driverService; + + @Log(moudle = "驾驶员管理",type = BusincessType.INSERT) + @PostMapping("") + public Driver save(@RequestBody Driver driver) { + return driverService.save(driver); + } + + @Log(moudle = "驾驶员管理",type = BusincessType.QUERY) + @GetMapping("") + public List findAll() { + return driverService.findAll(); + } + + @Log(moudle = "驾驶员管理",type = BusincessType.QUERY) + @GetMapping("/{id}") + public Driver findById(@PathVariable String id) { + return driverService.findById(id); + } + + @Log(moudle = "驾驶员管理",type = BusincessType.DELETE) + @DeleteMapping("") + public void delete(String id) { + driverService.delete(id); + } + +} diff --git a/IDEA/src/main/java/com/example/api/controller/EmailController.java b/IDEA/src/main/java/com/example/api/controller/EmailController.java new file mode 100644 index 00000000..6ab8709a --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/EmailController.java @@ -0,0 +1,42 @@ +package com.example.api.controller; + +import com.example.api.utils.RandomUtil; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.MailException; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/api/email") +public class EmailController { + + @Resource + private JavaMailSender mailSender; + + @Value("${spring.mail.username}") + private String from; + + @GetMapping("/send") + public String send() { + SimpleMailMessage message = new SimpleMailMessage(); + //发件人 + message.setFrom(from); + //收件人 + message.setTo("1402014577@qq.com"); + message.setSubject("验证码"); + message.setText("你的验证码为: " + RandomUtil.next() + " 十五分钟内有效"); + try { + mailSender.send(message); + return "发送普通邮件成功"; + } catch (MailException e) { + e.printStackTrace(); + return "邮件方失败"; + } + } + +} diff --git a/IDEA/src/main/java/com/example/api/controller/EmployeeController.java b/IDEA/src/main/java/com/example/api/controller/EmployeeController.java new file mode 100644 index 00000000..3a21f917 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/EmployeeController.java @@ -0,0 +1,51 @@ +package com.example.api.controller; + +import com.example.api.annotation.Log; +import com.example.api.model.entity.Employee; +import com.example.api.model.enums.BusincessType; +import com.example.api.service.EmployeeService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/api/employee") +@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_EMPLOYEE')") +public class EmployeeController { + + @Resource + private EmployeeService employeeService; + + @Log(moudle = "员工管理",type = BusincessType.QUERY) + @GetMapping("") + public List findAll() { + return employeeService.findAll(); + } + + @Log(moudle = "员工管理",type = BusincessType.QUERY) + @GetMapping("/{id}") + public Employee findById(@PathVariable String id) { + return employeeService.findById(id); + } + + @Log(moudle = "员工管理",type = BusincessType.INSERT) + @PostMapping("") + public Employee save(@RequestBody Employee employee) { + return employeeService.save(employee); + } + + @Log(moudle = "员工管理",type = BusincessType.UPDATE) + @PutMapping("") + public void update(@RequestBody Employee employee) { + employeeService.update(employee); + } + + @Log(moudle = "员工管理",type = BusincessType.DELETE) + @DeleteMapping("") + public void delete(String id) { + employeeService.delete(id); + } + +} diff --git a/IDEA/src/main/java/com/example/api/controller/InventoryController.java b/IDEA/src/main/java/com/example/api/controller/InventoryController.java new file mode 100644 index 00000000..808bffa6 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/InventoryController.java @@ -0,0 +1,72 @@ +package com.example.api.controller; + +import com.example.api.model.entity.Inventory; +import com.example.api.model.entity.InventoryRecord; +import com.example.api.model.vo.CommodityChartVo; +import com.example.api.service.InventoryRecordService; +import com.example.api.service.InventoryService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/api/inventory") +public class InventoryController { + + @Resource + private InventoryService inventoryService; + + @Resource + private InventoryRecordService recordService; + + @GetMapping("") + public List findAll() { + return inventoryService.findAll(); + } + + @GetMapping("analyze") + public List analyze(Integer type) { + return recordService.analyzeCommodity(type); + } + + //指定仓库id + //查询某个仓库的库存情况 + @GetMapping("/warehouse/{id}") + public List findByWarehouse(@PathVariable String id) { + return inventoryService.findByWarehouseId(id); + } + + //指定商品id + //查询某个商品在所有仓库的库存 + @GetMapping("/commodity/{id}") + public List findByCommodity(@PathVariable String id) { + return inventoryService.findByCommodityId(id); + } + + //指定仓库id + //查询某个仓库库内商品的出库入库记录 + @GetMapping("/record/warehouse/{id}") + public List findRecordByWarehouse(@PathVariable String id) { + return recordService.findAllByWarehouseId(id); + } + + //指定商品id + //查询某个商品在所有仓库出库入库记录 + @GetMapping("/record/commodity/{id}") + public List findRecordByCommodity(@PathVariable String id) { + return recordService.findAllByCommodityId(id); + } + + @PostMapping("/in") + public InventoryRecord in(@RequestBody InventoryRecord record) throws Exception { + return recordService.in(record); + } + + @PostMapping("/out") + public InventoryRecord out(@RequestBody InventoryRecord record) throws Exception { + return recordService.out(record); + } + + +} diff --git a/IDEA/src/main/java/com/example/api/controller/LogController.java b/IDEA/src/main/java/com/example/api/controller/LogController.java new file mode 100644 index 00000000..8d71b96e --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/LogController.java @@ -0,0 +1,54 @@ +package com.example.api.controller; + +import com.example.api.model.entity.LoginLog; +import com.example.api.model.entity.SystemLog; +import com.example.api.model.support.ResponseResult; +import com.example.api.model.vo.SystemLogVo; +import com.example.api.service.LoginLogService; +import com.example.api.service.SystemLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; +import java.util.Map; + +@RestController +@RequestMapping("/api") +public class LogController { + @Autowired + private LoginLogService loginLogService; + + @Autowired + private SystemLogService systemLogService; + + @GetMapping("/loginlog") + public List getLoginLog(){ + List all = loginLogService.getAll(); + return all; + } + + @DeleteMapping("/loginlog") + public void delLoginLog(String id){ + loginLogService.delLoginLog(id); + } + + + @GetMapping("/systemlog") + public List getSystemLog(){ + return systemLogService.getAll(); + } + + @DeleteMapping("/systemlog") + public void deleteSystemLogById(String id){ + systemLogService.delete(id); + } + + @GetMapping("/querySystemlog") + public List querySystemlog(SystemLogVo systemLogVo){ + System.out.println(systemLogVo); + return systemLogService.query(systemLogVo); + } +} diff --git a/IDEA/src/main/java/com/example/api/controller/RoleController.java b/IDEA/src/main/java/com/example/api/controller/RoleController.java new file mode 100644 index 00000000..d6dbebbe --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/RoleController.java @@ -0,0 +1,17 @@ +package com.example.api.controller; + +import com.example.api.model.enums.Role; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/api/role") +public class RoleController { + + @GetMapping("") + public Role[] list() { + return Role.ROLES; + } + +} diff --git a/IDEA/src/main/java/com/example/api/controller/SaleController.java b/IDEA/src/main/java/com/example/api/controller/SaleController.java new file mode 100644 index 00000000..b1ba54d5 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/SaleController.java @@ -0,0 +1,33 @@ +package com.example.api.controller; + +import com.example.api.model.entity.Sale; +import com.example.api.service.SaleService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/api/sale") +@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_SALE')") +public class SaleController { + @Resource + private SaleService saleService; + + @PostMapping("") + public Sale save(@RequestBody Sale sale) { + return saleService.save(sale); + } + + @GetMapping("") + public List findAll() { + return saleService.findAll(); + } + + @GetMapping("/search/{name}") + public List search(@PathVariable String name) { + return saleService.searchByCompany(name); + } + +} diff --git a/IDEA/src/main/java/com/example/api/controller/UserController.java b/IDEA/src/main/java/com/example/api/controller/UserController.java new file mode 100644 index 00000000..b2cce320 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/UserController.java @@ -0,0 +1,18 @@ +package com.example.api.controller; + +import com.example.api.model.entity.User; +import com.example.api.repository.UserRepository; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; + +@RestController +@RequestMapping("/api/user") +public class UserController { + + @Resource + private UserRepository userRepository; + +} diff --git a/IDEA/src/main/java/com/example/api/controller/VehicleController.java b/IDEA/src/main/java/com/example/api/controller/VehicleController.java new file mode 100644 index 00000000..36a83681 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/VehicleController.java @@ -0,0 +1,44 @@ +package com.example.api.controller; + +import com.example.api.annotation.DisableBaseResponse; +import com.example.api.annotation.Log; +import com.example.api.model.entity.Vehicle; +import com.example.api.model.enums.BusincessType; +import com.example.api.service.VehicleService; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/api/vehicle") +public class VehicleController { + + @Resource + private VehicleService vehicleService; + + @Log(moudle = "车辆管理",type = BusincessType.INSERT) + @PostMapping("") + public Vehicle save(@RequestBody Vehicle vehicle) { + return vehicleService.save(vehicle); + } + + @Log(moudle = "车辆管理",type = BusincessType.QUERY) + @GetMapping("") + public List findAll() { + return vehicleService.findAll(); + } + + @Log(moudle = "车辆管理",type = BusincessType.QUERY) + @GetMapping("/{id}") + public Vehicle findById(@PathVariable String id) { + return vehicleService.findById(id); + } + + @Log(moudle = "车辆管理",type = BusincessType.DELETE) + @DeleteMapping("") + public void delete(String id) { + vehicleService.delete(id); + } + +} diff --git a/IDEA/src/main/java/com/example/api/controller/WarehouseController.java b/IDEA/src/main/java/com/example/api/controller/WarehouseController.java new file mode 100644 index 00000000..fa29688a --- /dev/null +++ b/IDEA/src/main/java/com/example/api/controller/WarehouseController.java @@ -0,0 +1,39 @@ +package com.example.api.controller; + +import com.example.api.annotation.Log; +import com.example.api.model.entity.Warehouse; +import com.example.api.model.enums.BusincessType; +import com.example.api.service.WarehouseService; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +@RestController +@RequestMapping("/api/warehouse") +@PreAuthorize("hasAnyRole('ROLE_SUPER_ADMIN' ,'ROLE_WAREHOUSE')") +public class WarehouseController { + + @Resource + private WarehouseService warehouseService; + + @Log(moudle = "仓库管理",type = BusincessType.INSERT) + @PostMapping("") + public Warehouse save(@RequestBody Warehouse warehouse) { + return warehouseService.save(warehouse); + } + + @Log(moudle = "仓库管理",type = BusincessType.QUERY) + @GetMapping("") + public List findAll() { + return warehouseService.findAll(); + } + + @Log(moudle = "仓库管理",type = BusincessType.DELETE) + @DeleteMapping("") + public void delete(String id) { + warehouseService.delete(id); + } + +} diff --git a/IDEA/src/main/java/com/example/api/exception/AccountAndPasswordError.java b/IDEA/src/main/java/com/example/api/exception/AccountAndPasswordError.java new file mode 100644 index 00000000..59d0bba2 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/exception/AccountAndPasswordError.java @@ -0,0 +1,5 @@ +package com.example.api.exception; + +public class AccountAndPasswordError extends Exception{ + +} diff --git a/IDEA/src/main/java/com/example/api/handler/GlobalExceptionHandler.java b/IDEA/src/main/java/com/example/api/handler/GlobalExceptionHandler.java new file mode 100644 index 00000000..07c49bb1 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/handler/GlobalExceptionHandler.java @@ -0,0 +1,35 @@ +package com.example.api.handler; + +import com.example.api.exception.AccountAndPasswordError; +import com.example.api.model.support.ResponseResult; +import com.example.api.service.LoginLogService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.AccessDeniedException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestControllerAdvice; + +/** + * 捕获controller异常 + * controller抛出异常执行下边的函数 + * 返回Response写入ApiResult + */ +@ResponseBody +@RestControllerAdvice +public class GlobalExceptionHandler { + @Autowired + private LoginLogService loginLogService; + private final Logger logger = LoggerFactory.getLogger(getClass()); + + @ExceptionHandler(value = Exception.class) + public Object handleException(Exception e) { + if (e.getClass().equals(AccessDeniedException.class)) { + return new ResponseResult<>(403, "你没有访问权限"); + } + logger.warn(e.getMessage()); + return new ResponseResult<>(400, e.getMessage()); + } + +} diff --git a/IDEA/src/main/java/com/example/api/handler/GlobalResponseHandler.java b/IDEA/src/main/java/com/example/api/handler/GlobalResponseHandler.java new file mode 100644 index 00000000..382e893c --- /dev/null +++ b/IDEA/src/main/java/com/example/api/handler/GlobalResponseHandler.java @@ -0,0 +1,31 @@ +package com.example.api.handler; + +import com.example.api.annotation.DisableBaseResponse; +import com.example.api.model.support.ResponseResult; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +/** + * 统一拦截Controller中所有方法的返回值 + * 封装后返回ResponseResult + */ +@ControllerAdvice(value = "com.example.api.controller") +public class GlobalResponseHandler implements ResponseBodyAdvice { + + + @Override + public boolean supports(MethodParameter methodParameter, Class c) { + return !methodParameter.hasParameterAnnotation(DisableBaseResponse.class); + } + + @Override + public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, + ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { + return o == null ? new ResponseResult<>() : new ResponseResult<>(o); + } + +} diff --git a/IDEA/src/main/java/com/example/api/model/dto/LoginDto.java b/IDEA/src/main/java/com/example/api/model/dto/LoginDto.java new file mode 100644 index 00000000..1bd2bc0b --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/dto/LoginDto.java @@ -0,0 +1,19 @@ +package com.example.api.model.dto; + +import lombok.Data; + +/** + * 登录传输数据 + */ +@Data +public class LoginDto { + + private String email; + + private String password; + + private String code; + + private boolean remember; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Admin.java b/IDEA/src/main/java/com/example/api/model/entity/Admin.java new file mode 100644 index 00000000..77711a26 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Admin.java @@ -0,0 +1,38 @@ +package com.example.api.model.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 管理员 + */ +@Data +@Entity +@NoArgsConstructor +@AllArgsConstructor + +public class Admin { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + @Column(columnDefinition = "varchar(30) default 'LTD' not null") + private String email; + + @Column(columnDefinition = "varchar(30) default 'LTD' not null") + private String password; + + private String roles; + + private String createAt; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Code.java b/IDEA/src/main/java/com/example/api/model/entity/Code.java new file mode 100644 index 00000000..3adad13c --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Code.java @@ -0,0 +1,32 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 验证码 + */ +@Data +@Entity +@NoArgsConstructor +public class Code { + + @Id + private String email; + + private String value; + + private long exp; + + public Code(String email, String value) { + this.email = email; + this.value = value; + this.exp = System.currentTimeMillis() + 1000 * 60 * 15; + } + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Commodity.java b/IDEA/src/main/java/com/example/api/model/entity/Commodity.java new file mode 100644 index 00000000..52b46ab2 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Commodity.java @@ -0,0 +1,36 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 商品 + */ +@Data +@Entity +@NoArgsConstructor +public class Commodity { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + private String name; + + private double price; + + private String description; + + private int count; + + private String createAt; + + private String updateAt; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Company.java b/IDEA/src/main/java/com/example/api/model/entity/Company.java new file mode 100644 index 00000000..b16ec0cb --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Company.java @@ -0,0 +1,24 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 往来公司 + */ +@Data +@Entity +@NoArgsConstructor +public class Company { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Distribution.java b/IDEA/src/main/java/com/example/api/model/entity/Distribution.java new file mode 100644 index 00000000..602084d8 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Distribution.java @@ -0,0 +1,54 @@ +package com.example.api.model.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.time.LocalDateTime; +import java.util.Date; + +/** + * 配送 + */ +@Data +@Entity +@NoArgsConstructor +public class Distribution { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + //司机id + private String did; + + //车辆id + private String vid; + + //司机 + private String driver; + + //车牌号 + private String number; + + //客户电话 + private String phone; + + //客户地址 + private String address; + + //加急处理 + private boolean urgent; + + private String care; + //操作时间 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime time; + + private Integer status; +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Driver.java b/IDEA/src/main/java/com/example/api/model/entity/Driver.java new file mode 100644 index 00000000..ef1bbe1d --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Driver.java @@ -0,0 +1,49 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 驾驶员 + */ +@Data +@Entity +@NoArgsConstructor +public class Driver { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + private String name; + + private String gender; + + private String phone; + + //家庭住址 + private String address; + + //身份证号码 + private String idCard; + + //驾驶证 + private String license; + + //驾驶证分数 12分 + private String score; + + //正在驾驶 + private boolean driving; + + private String createAt; + + private String updateAt; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Employee.java b/IDEA/src/main/java/com/example/api/model/entity/Employee.java new file mode 100644 index 00000000..d3813594 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Employee.java @@ -0,0 +1,40 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 员工 + */ +@Data +@Entity +@NoArgsConstructor +public class Employee { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + //名字 + private String name; + //性别 + private String gender; + //手机号 + private String phone; + //家庭住址 + private String address; + //身份证号码 + private String idCard; + //部门 + private String department; + //创建时间 + private String createAt; + //更新时间 + private String updateAt; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Inventory.java b/IDEA/src/main/java/com/example/api/model/entity/Inventory.java new file mode 100644 index 00000000..37d897e1 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Inventory.java @@ -0,0 +1,39 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 库存 + */ +@Data +@Entity +@NoArgsConstructor +public class Inventory { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + //仓库id + private String wid; + + //商品信息id + private String cid; + + //商品名 + private String name; + + //所在位置区域 + private String location; + + //数量 + private Integer count; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/InventoryRecord.java b/IDEA/src/main/java/com/example/api/model/entity/InventoryRecord.java new file mode 100644 index 00000000..6e263f45 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/InventoryRecord.java @@ -0,0 +1,43 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 库存记录 出库 入库 + */ +@Data +@Entity +@NoArgsConstructor +public class InventoryRecord { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + //商品名 + private String name; + + //仓库id + private String wid; + + //商品信息id + private String cid; + + private Integer count; + + //-1:出库 +1:入库 + private Integer type; + + //描述信息 + private String description; + + private String createAt; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/LoginLog.java b/IDEA/src/main/java/com/example/api/model/entity/LoginLog.java new file mode 100644 index 00000000..a79ff85d --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/LoginLog.java @@ -0,0 +1,43 @@ +package com.example.api.model.entity; + + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; +import org.hibernate.annotations.Table; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.time.LocalDateTime; +import java.util.Date; + +@Entity +@Data +@AllArgsConstructor +@NoArgsConstructor +public class LoginLog { + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + //登录邮箱 + private String email; + + //登录状态 + private Integer status; + + //用户的IP地址 + private String ip; + + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + //登录时间 + private Date date; + + //浏览器 + private String browser; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Sale.java b/IDEA/src/main/java/com/example/api/model/entity/Sale.java new file mode 100644 index 00000000..4c3f29b8 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Sale.java @@ -0,0 +1,42 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 销售 + */ +@Data +@Entity +@NoArgsConstructor +public class Sale { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + private String company; + + private String number; + + private String commodity; + + private String count; + + private double price; + + private String phone; + + private String description; + + private boolean pay; + + private String createAt; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/SystemLog.java b/IDEA/src/main/java/com/example/api/model/entity/SystemLog.java new file mode 100644 index 00000000..ea6d63db --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/SystemLog.java @@ -0,0 +1,46 @@ +package com.example.api.model.entity; + +import com.example.api.model.enums.BusincessType; +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + + +import javax.persistence.Column; +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.time.LocalDateTime; + +@Entity +@Data +@NoArgsConstructor +public class SystemLog { + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + //主键 + private String id; + //账号 + private String account; + //功能模块 + private String module; + + //操作类型 + @Column(columnDefinition = "varchar(30) default 'LTD' not null") + private String busincessType; + + //用户IP + @Column(columnDefinition = "varchar(40) default 'LTD' not null") + private String ip; + + //请求方法 + @Column(columnDefinition = "varchar(100) default 'LTD' not null") + private String method; + //操作时间 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime time; + + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/User.java b/IDEA/src/main/java/com/example/api/model/entity/User.java new file mode 100644 index 00000000..c97498ea --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/User.java @@ -0,0 +1,32 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 用户 + */ +@Data +@Entity +@NoArgsConstructor +public class User { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + private String username; + + private String password; + + private String createAt; + + private String updateAt; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Vehicle.java b/IDEA/src/main/java/com/example/api/model/entity/Vehicle.java new file mode 100644 index 00000000..c8f42768 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Vehicle.java @@ -0,0 +1,35 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 车辆 + */ +@Data +@Entity +@NoArgsConstructor +public class Vehicle { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + //车牌号 + private String number; + + //车辆类型 + private String type; + + //是否正在运输 + private boolean driving; + + private String createAt; + +} diff --git a/IDEA/src/main/java/com/example/api/model/entity/Warehouse.java b/IDEA/src/main/java/com/example/api/model/entity/Warehouse.java new file mode 100644 index 00000000..fca43157 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/entity/Warehouse.java @@ -0,0 +1,32 @@ +package com.example.api.model.entity; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.hibernate.annotations.GenericGenerator; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +/** + * 仓库 + */ +@Data +@Entity +@NoArgsConstructor +public class Warehouse { + + @Id + @GeneratedValue(generator = "uuid2") + @GenericGenerator(name = "uuid2", strategy = "org.hibernate.id.UUIDGenerator") + private String id; + + //仓库名称 + private String name; + + //仓库负责人 + private String principle; + + private String createAt; + +} diff --git a/IDEA/src/main/java/com/example/api/model/enums/BusincessType.java b/IDEA/src/main/java/com/example/api/model/enums/BusincessType.java new file mode 100644 index 00000000..f394f37a --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/enums/BusincessType.java @@ -0,0 +1,31 @@ +package com.example.api.model.enums; +/* + 业务操作类型 + */ +public enum BusincessType { + OTHER("其他"), //其他 + QUERY("查询"), //查询 + INSERT("新增"), //新增 + UPDATE("更新"), //更新 + DELETE("删除"), //删除 + EXPORT("导出"), //导出 + FORCE("退出"); //强制退出 + + private BusincessType(String name){ + this.name=name; + } + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/IDEA/src/main/java/com/example/api/model/enums/DistributionStatus.java b/IDEA/src/main/java/com/example/api/model/enums/DistributionStatus.java new file mode 100644 index 00000000..fa247401 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/enums/DistributionStatus.java @@ -0,0 +1,28 @@ +package com.example.api.model.enums; + +import lombok.Getter; +import lombok.Setter; + +/** + * 配送单状态 + */ +public enum DistributionStatus { + + //正在审核 + REVIEWING(0), + + //审核成功 + REVIEW_SUCCESS(1), + + //订单完成 + END(2); + + @Getter + @Setter + private Integer code; + + DistributionStatus(Integer code) { + this.code = code; + } + +} diff --git a/IDEA/src/main/java/com/example/api/model/enums/Role.java b/IDEA/src/main/java/com/example/api/model/enums/Role.java new file mode 100644 index 00000000..cfb09924 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/enums/Role.java @@ -0,0 +1,40 @@ +package com.example.api.model.enums; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.Getter; + +@Getter +@JsonFormat(shape = JsonFormat.Shape.OBJECT) +public enum Role { + + //超级管理员 不对外提供添加此权限的方法 + ROLE_SUPER_ADMIN("ROLE_SUPER_ADMIN", "超级管理员"), + + ROLE_ADMIN("ROLE_ADMIN", "操作员相关权限"), + + ROLE_COMMODITY("ROLE_COMMODITY", "商品相关权限"), + + ROLE_EMPLOYEE("ROLE_EMPLOYEE", "员工相关权限"), + + ROLE_SALE("ROLE_SALE", "销售相关权限"), + + ROLE_WAREHOUSE("ROLE_WAREHOUSE", "仓库相关权限"); + + private final String value; + + private final String description; + + public static final Role[] ROLES = { + ROLE_ADMIN, + ROLE_COMMODITY, + ROLE_EMPLOYEE, + ROLE_SALE, + ROLE_WAREHOUSE + }; + + Role(String value, String description) { + this.value = value; + this.description = description; + } + +} diff --git a/IDEA/src/main/java/com/example/api/model/enums/Test.java b/IDEA/src/main/java/com/example/api/model/enums/Test.java new file mode 100644 index 00000000..bcf8e990 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/enums/Test.java @@ -0,0 +1,6 @@ +package com.example.api.model.enums; + +public class Test { + public static void main(String[] args) { + } +} diff --git a/IDEA/src/main/java/com/example/api/model/support/ResponseResult.java b/IDEA/src/main/java/com/example/api/model/support/ResponseResult.java new file mode 100644 index 00000000..94f81f91 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/support/ResponseResult.java @@ -0,0 +1,47 @@ +package com.example.api.model.support; + +import lombok.Data; + +@Data +public class ResponseResult { + + private Integer code; + + private boolean status; + + private String msg; + + private T data; + + public ResponseResult() { + this.code = 200; + this.status = true; + this.msg = null; + this.data = null; + } + + //不附带msg返回数据 + public ResponseResult(T data) { + this.code = 200; + this.status = true; + this.msg = null; + this.data = data; + } + + //默认附带msg和data + public ResponseResult(String msg, T data) { + this.code = 200; + this.status = true; + this.msg = msg; + this.data = data; + } + + //默认的错误返回 + public ResponseResult(Integer code, String msg) { + this.code = code; + this.status = false; + this.msg = msg; + this.data = null; + } + +} diff --git a/IDEA/src/main/java/com/example/api/model/vo/CommodityChartVo.java b/IDEA/src/main/java/com/example/api/model/vo/CommodityChartVo.java new file mode 100644 index 00000000..d32833bc --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/vo/CommodityChartVo.java @@ -0,0 +1,16 @@ +package com.example.api.model.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; + +@Data +@AllArgsConstructor +public class CommodityChartVo { + + //商品名 + private Integer value; + + //数量 + private String name; + +} diff --git a/IDEA/src/main/java/com/example/api/model/vo/SystemLogVo.java b/IDEA/src/main/java/com/example/api/model/vo/SystemLogVo.java new file mode 100644 index 00000000..fedb01c0 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/model/vo/SystemLogVo.java @@ -0,0 +1,13 @@ +package com.example.api.model.vo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@NoArgsConstructor +@AllArgsConstructor +public class SystemLogVo { + private String account; + private String moudle; +} diff --git a/IDEA/src/main/java/com/example/api/repository/AdminRepository.java b/IDEA/src/main/java/com/example/api/repository/AdminRepository.java new file mode 100644 index 00000000..f781bca2 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/AdminRepository.java @@ -0,0 +1,16 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Admin; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface AdminRepository extends JpaRepository { + + Admin findAdminByEmailAndPassword(String email, String password); + + Admin findAdminByEmail(String email); + + boolean existsAdminByRoles(String roles); + +} diff --git a/IDEA/src/main/java/com/example/api/repository/CodeRepository.java b/IDEA/src/main/java/com/example/api/repository/CodeRepository.java new file mode 100644 index 00000000..ffa7b0dd --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/CodeRepository.java @@ -0,0 +1,12 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Code; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface CodeRepository extends JpaRepository { + + Code findByEmailAndValue(String email, String value); + +} diff --git a/IDEA/src/main/java/com/example/api/repository/CommodityRepository.java b/IDEA/src/main/java/com/example/api/repository/CommodityRepository.java new file mode 100644 index 00000000..ceedad78 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/CommodityRepository.java @@ -0,0 +1,16 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Commodity; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface CommodityRepository extends JpaRepository { + + Commodity findByName(String name); + + List findByNameLike(String name); + +} diff --git a/IDEA/src/main/java/com/example/api/repository/DistributionRepository.java b/IDEA/src/main/java/com/example/api/repository/DistributionRepository.java new file mode 100644 index 00000000..fc28e95e --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/DistributionRepository.java @@ -0,0 +1,9 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Distribution; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface DistributionRepository extends JpaRepository { +} diff --git a/IDEA/src/main/java/com/example/api/repository/DriverRepository.java b/IDEA/src/main/java/com/example/api/repository/DriverRepository.java new file mode 100644 index 00000000..65a5a66d --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/DriverRepository.java @@ -0,0 +1,22 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Driver; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Repository +public interface DriverRepository extends JpaRepository { + + @Modifying + @Transactional + @Query("update Driver d set d.driving = ?1 where d.id = ?2") + void updateDriving(boolean driving, String id); + + List findAllByDriving(boolean driving); + +} diff --git a/IDEA/src/main/java/com/example/api/repository/EmployeeRepository.java b/IDEA/src/main/java/com/example/api/repository/EmployeeRepository.java new file mode 100644 index 00000000..89f4ae65 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/EmployeeRepository.java @@ -0,0 +1,9 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Employee; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface EmployeeRepository extends JpaRepository { +} diff --git a/IDEA/src/main/java/com/example/api/repository/InventoryRecordRepository.java b/IDEA/src/main/java/com/example/api/repository/InventoryRecordRepository.java new file mode 100644 index 00000000..659f1a79 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/InventoryRecordRepository.java @@ -0,0 +1,18 @@ +package com.example.api.repository; + +import com.example.api.model.entity.InventoryRecord; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface InventoryRecordRepository extends JpaRepository { + + List findAllByWid(String wid); + + List findAllByType(Integer type); + + List findAllByCid(String cid); + +} diff --git a/IDEA/src/main/java/com/example/api/repository/InventoryRepository.java b/IDEA/src/main/java/com/example/api/repository/InventoryRepository.java new file mode 100644 index 00000000..a9712ec6 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/InventoryRepository.java @@ -0,0 +1,18 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Inventory; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface InventoryRepository extends JpaRepository { + + Inventory findByWidAndCid(String wid, String cid); + + List findAllByCid(String cid); + + List findAllByWid(String wid); + +} diff --git a/IDEA/src/main/java/com/example/api/repository/LoginLogRepository.java b/IDEA/src/main/java/com/example/api/repository/LoginLogRepository.java new file mode 100644 index 00000000..7b161267 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/LoginLogRepository.java @@ -0,0 +1,9 @@ +package com.example.api.repository; + +import com.example.api.model.entity.LoginLog; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface LoginLogRepository extends JpaRepository { +} diff --git a/IDEA/src/main/java/com/example/api/repository/SaleRepository.java b/IDEA/src/main/java/com/example/api/repository/SaleRepository.java new file mode 100644 index 00000000..7038d74a --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/SaleRepository.java @@ -0,0 +1,14 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Sale; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SaleRepository extends JpaRepository { + + List findAllByCompanyLike(String name); + +} diff --git a/IDEA/src/main/java/com/example/api/repository/SystemLogRepository.java b/IDEA/src/main/java/com/example/api/repository/SystemLogRepository.java new file mode 100644 index 00000000..f847ba94 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/SystemLogRepository.java @@ -0,0 +1,14 @@ +package com.example.api.repository; + +import com.example.api.model.entity.SystemLog; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.JpaSpecificationExecutor; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public interface SystemLogRepository extends JpaRepository, JpaSpecificationExecutor { +} diff --git a/IDEA/src/main/java/com/example/api/repository/UserRepository.java b/IDEA/src/main/java/com/example/api/repository/UserRepository.java new file mode 100644 index 00000000..2942c52c --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/UserRepository.java @@ -0,0 +1,9 @@ +package com.example.api.repository; + +import com.example.api.model.entity.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository { +} diff --git a/IDEA/src/main/java/com/example/api/repository/VehicleRepository.java b/IDEA/src/main/java/com/example/api/repository/VehicleRepository.java new file mode 100644 index 00000000..f67d596a --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/VehicleRepository.java @@ -0,0 +1,22 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Vehicle; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Modifying; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Repository +public interface VehicleRepository extends JpaRepository { + + @Modifying + @Transactional + @Query("update Vehicle v set v.driving = ?1 where v.id = ?2") + void updateDriving(boolean driving, String id); + + List findAllByDriving(boolean driving); + +} diff --git a/IDEA/src/main/java/com/example/api/repository/WareHouseRepository.java b/IDEA/src/main/java/com/example/api/repository/WareHouseRepository.java new file mode 100644 index 00000000..4e938dde --- /dev/null +++ b/IDEA/src/main/java/com/example/api/repository/WareHouseRepository.java @@ -0,0 +1,9 @@ +package com.example.api.repository; + +import com.example.api.model.entity.Warehouse; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface WareHouseRepository extends JpaRepository { +} diff --git a/IDEA/src/main/java/com/example/api/security/JwtAuthorizationFilter.java b/IDEA/src/main/java/com/example/api/security/JwtAuthorizationFilter.java new file mode 100644 index 00000000..be413c95 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/security/JwtAuthorizationFilter.java @@ -0,0 +1,65 @@ +package com.example.api.security; + +import com.example.api.model.support.ResponseResult; +import com.example.api.utils.JwtTokenUtil; +import com.example.api.utils.ResponseUtil; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; +import org.springframework.security.core.authority.SimpleGrantedAuthority; +import org.springframework.security.core.context.SecurityContextHolder; +import org.springframework.security.web.authentication.www.BasicAuthenticationFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * 从Request的Authorization Header 获取Jwt + * 解析Jwt授权发放token + */ + +public class JwtAuthorizationFilter extends BasicAuthenticationFilter { + + public JwtAuthorizationFilter(AuthenticationManager authenticationManager) { + super(authenticationManager); + } + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) + throws IOException, ServletException { + + //从Request Header 取出Token + String token = request.getHeader(JwtTokenUtil.TOKEN_HEADER); + + //Token为空放行 + //如果接下来进入的URL不是公共的地址SpringSecurity会返回403的错误 + if (!JwtTokenUtil.checkToken(token)){ + chain.doFilter(request, response); + return; + } + + //判断JWT Token是否过期 + if (JwtTokenUtil.isExpiration(token)) { + ResponseUtil.writeJson(response, new ResponseResult<>(403, "令牌已过期, 请重新登录")); + return; + } + + //解析token + String username = JwtTokenUtil.getUsername(token); + List tokenRoles = JwtTokenUtil.getTokenRoles(token); + ArrayList roles = new ArrayList<>(); + for (String role : tokenRoles) { + roles.add(new SimpleGrantedAuthority(role)); + } + //向SpringSecurity的Context中加入认证信息 + SecurityContextHolder.getContext().setAuthentication( + new UsernamePasswordAuthenticationToken(username,null, roles)); + + super.doFilterInternal(request, response, chain); + } + +} diff --git a/IDEA/src/main/java/com/example/api/security/SecurityConfiguration.java b/IDEA/src/main/java/com/example/api/security/SecurityConfiguration.java new file mode 100644 index 00000000..a55449b2 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/security/SecurityConfiguration.java @@ -0,0 +1,61 @@ +package com.example.api.security; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; +import org.springframework.security.config.http.SessionCreationPolicy; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.CorsConfigurationSource; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; + +@Configuration +@EnableGlobalMethodSecurity(prePostEnabled = true) +public class SecurityConfiguration extends WebSecurityConfigurerAdapter { + + @Bean + public BCryptPasswordEncoder bCryptPasswordEncoder() { + return new BCryptPasswordEncoder(); + } + + /** + * HTTP验证规则 + * + * @param http h + * @throws Exception e + */ + @Override + protected void configure(HttpSecurity http) throws Exception { + + //开启跨域 + http.csrf().disable().cors(); + + //禁用session + http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); + + //添加自定义的jwt过滤器 + http.addFilter(new JwtAuthorizationFilter(authenticationManagerBean())); + + } + + /** + * SpringSecurity有默认的跨域配置 会无法放行RequestHeader带有"Authorization"请求 + * 防止前端请求api报出cors error + * + * @return * + */ + @Bean + CorsConfigurationSource corsConfigurationSource() { + final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + final CorsConfiguration corsConfiguration = new CorsConfiguration(); + corsConfiguration.addAllowedHeader("*"); + corsConfiguration.addAllowedHeader("DELETE"); + corsConfiguration.addAllowedMethod("*"); + corsConfiguration.addAllowedOrigin("*"); + source.registerCorsConfiguration("/**", corsConfiguration); + return source; + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/AdminService.java b/IDEA/src/main/java/com/example/api/service/AdminService.java new file mode 100644 index 00000000..4e5c763f --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/AdminService.java @@ -0,0 +1,26 @@ +package com.example.api.service; + +import com.example.api.model.dto.LoginDto; +import com.example.api.model.entity.Admin; + +import java.util.List; + +public interface AdminService { + + Admin save(Admin admin) throws Exception; + + Admin findById(String id); + + boolean sendEmail(String email) throws Exception; + + Admin loginByPassword(LoginDto dto) throws Exception; + + Admin loginByEmail(LoginDto dto) throws Exception; + + List findAll(); + + //生成token + String createToken(Admin admin, long exp); + + void delete(String id); +} diff --git a/IDEA/src/main/java/com/example/api/service/CommodityService.java b/IDEA/src/main/java/com/example/api/service/CommodityService.java new file mode 100644 index 00000000..9975ea40 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/CommodityService.java @@ -0,0 +1,21 @@ +package com.example.api.service; + +import com.example.api.model.entity.Commodity; + +import java.util.List; + +public interface CommodityService { + + Commodity save(Commodity commodity); + + void update(Commodity commodity); + + void delete(String id); + + Commodity findById(String id); + + List findAll(); + + List findAllByLikeName(String name); + +} diff --git a/IDEA/src/main/java/com/example/api/service/DistributionService.java b/IDEA/src/main/java/com/example/api/service/DistributionService.java new file mode 100644 index 00000000..60413991 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/DistributionService.java @@ -0,0 +1,13 @@ +package com.example.api.service; + +import com.example.api.model.entity.Distribution; + +import java.util.List; + +public interface DistributionService { + + Distribution save(Distribution distribution) throws Exception; + + List findAll(); + +} diff --git a/IDEA/src/main/java/com/example/api/service/DriverService.java b/IDEA/src/main/java/com/example/api/service/DriverService.java new file mode 100644 index 00000000..65055d60 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/DriverService.java @@ -0,0 +1,19 @@ +package com.example.api.service; + +import com.example.api.model.entity.Driver; + +import java.util.List; + +public interface DriverService { + + Driver save(Driver driver); + + void update(Driver driver); + + void delete(String id); + + Driver findById(String id); + + List findAll(); + +} diff --git a/IDEA/src/main/java/com/example/api/service/EmailService.java b/IDEA/src/main/java/com/example/api/service/EmailService.java new file mode 100644 index 00000000..bdf85c59 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/EmailService.java @@ -0,0 +1,13 @@ +package com.example.api.service; + +import org.springframework.mail.MailException; + +public interface EmailService { + + //发送验证码 + boolean sendVerificationCode(String email) throws MailException; + + //检验验证码 + boolean checkVerificationCode(String email, String code); + +} diff --git a/IDEA/src/main/java/com/example/api/service/EmployeeService.java b/IDEA/src/main/java/com/example/api/service/EmployeeService.java new file mode 100644 index 00000000..1e9ab3eb --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/EmployeeService.java @@ -0,0 +1,19 @@ +package com.example.api.service; + +import com.example.api.model.entity.Employee; + +import java.util.List; + +public interface EmployeeService { + + Employee save(Employee employee); + + void update(Employee employee); + + void delete(String id); + + Employee findById(String id); + + List findAll(); + +} diff --git a/IDEA/src/main/java/com/example/api/service/InventoryRecordService.java b/IDEA/src/main/java/com/example/api/service/InventoryRecordService.java new file mode 100644 index 00000000..ac83590c --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/InventoryRecordService.java @@ -0,0 +1,23 @@ +package com.example.api.service; + +import com.example.api.model.entity.InventoryRecord; +import com.example.api.model.vo.CommodityChartVo; + +import java.util.List; + +public interface InventoryRecordService { + + //出入库排行统计 + List analyzeCommodity(Integer type); + + List findAllByWarehouseId(String wid); + + List findAllByCommodityId(String cid); + + //出库 + InventoryRecord out(InventoryRecord record) throws Exception; + + //入库 + InventoryRecord in(InventoryRecord record) throws Exception; + +} diff --git a/IDEA/src/main/java/com/example/api/service/InventoryService.java b/IDEA/src/main/java/com/example/api/service/InventoryService.java new file mode 100644 index 00000000..82da57fc --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/InventoryService.java @@ -0,0 +1,17 @@ +package com.example.api.service; + +import com.example.api.model.entity.Inventory; + +import java.util.List; + +public interface InventoryService { + + Inventory save(Inventory inventory); + + List findAll(); + + List findByCommodityId(String cid); + + List findByWarehouseId(String wid); + +} diff --git a/IDEA/src/main/java/com/example/api/service/LoginLogService.java b/IDEA/src/main/java/com/example/api/service/LoginLogService.java new file mode 100644 index 00000000..0132ac8e --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/LoginLogService.java @@ -0,0 +1,14 @@ +package com.example.api.service; + +import com.example.api.model.dto.LoginDto; +import com.example.api.model.entity.Admin; +import com.example.api.model.entity.LoginLog; + +import javax.servlet.http.HttpServletRequest; +import java.util.List; + +public interface LoginLogService { + List getAll(); + void recordLog(LoginDto loginDto, Admin admin, HttpServletRequest request); + void delLoginLog(String id); +} diff --git a/IDEA/src/main/java/com/example/api/service/SaleService.java b/IDEA/src/main/java/com/example/api/service/SaleService.java new file mode 100644 index 00000000..d8cb2b7d --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/SaleService.java @@ -0,0 +1,15 @@ +package com.example.api.service; + +import com.example.api.model.entity.Sale; + +import java.util.List; + +public interface SaleService { + + Sale save(Sale sale); + + List findAll(); + + List searchByCompany(String name); + +} diff --git a/IDEA/src/main/java/com/example/api/service/SystemLogService.java b/IDEA/src/main/java/com/example/api/service/SystemLogService.java new file mode 100644 index 00000000..c07aedf0 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/SystemLogService.java @@ -0,0 +1,14 @@ +package com.example.api.service; + +import com.example.api.model.entity.SystemLog; +import com.example.api.model.vo.SystemLogVo; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; + +public interface SystemLogService { + public void record(SystemLog log); + public List getAll(); + public void delete(String id); + public List query(SystemLogVo systemLogVo); +} diff --git a/IDEA/src/main/java/com/example/api/service/UserService.java b/IDEA/src/main/java/com/example/api/service/UserService.java new file mode 100644 index 00000000..1a531a90 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/UserService.java @@ -0,0 +1,4 @@ +package com.example.api.service; + +public interface UserService { +} diff --git a/IDEA/src/main/java/com/example/api/service/VehicleService.java b/IDEA/src/main/java/com/example/api/service/VehicleService.java new file mode 100644 index 00000000..ae0db45f --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/VehicleService.java @@ -0,0 +1,19 @@ +package com.example.api.service; + +import com.example.api.model.entity.Vehicle; + +import java.util.List; + +public interface VehicleService { + + Vehicle save(Vehicle vehicle); + + void update(Vehicle vehicle); + + void delete(String id); + + Vehicle findById(String id); + + List findAll(); + +} diff --git a/IDEA/src/main/java/com/example/api/service/WarehouseService.java b/IDEA/src/main/java/com/example/api/service/WarehouseService.java new file mode 100644 index 00000000..5791ca42 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/WarehouseService.java @@ -0,0 +1,15 @@ +package com.example.api.service; + +import com.example.api.model.entity.Warehouse; + +import java.util.List; + +public interface WarehouseService { + + Warehouse save(Warehouse warehouse); + + List findAll(); + + void delete(String id); + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/AdminServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/AdminServiceImpl.java new file mode 100644 index 00000000..3fb856b2 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/AdminServiceImpl.java @@ -0,0 +1,80 @@ +package com.example.api.service.impl; + +import com.example.api.exception.AccountAndPasswordError; +import com.example.api.model.dto.LoginDto; +import com.example.api.model.entity.Admin; +import com.example.api.model.entity.LoginLog; +import com.example.api.repository.AdminRepository; +import com.example.api.repository.LoginLogRepository; +import com.example.api.service.AdminService; +import com.example.api.service.EmailService; +import com.example.api.utils.DataTimeUtil; +import com.example.api.utils.JwtTokenUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Service +public class AdminServiceImpl implements AdminService { + + @Resource + private AdminRepository adminRepository; + + @Resource + private EmailService emailService; + + @Override + public Admin save(Admin admin) throws Exception { + if (admin.getEmail().length() < 8 || admin.getPassword().length() < 5) throw new Exception("请求参数异常"); + admin.setCreateAt(DataTimeUtil.getNowTimeString()); + return adminRepository.save(admin); + } + + @Override + public Admin findById(String id) { + return adminRepository.findById(id).orElse(null); + } + + @Override + public boolean sendEmail(String email) throws Exception { + Admin admin = adminRepository.findAdminByEmail(email); + if (admin == null) throw new Exception("不存在的邮箱账户"); + return emailService.sendVerificationCode(email); + } + + @Override + public Admin loginByPassword(LoginDto dto) throws Exception { + Admin one = adminRepository.findAdminByEmailAndPassword(dto.getEmail(), dto.getPassword()); + if (one == null) { + throw new Exception("邮箱或密码错误"); + } + return one; + } + + @Override + public Admin loginByEmail(LoginDto dto) throws Exception { + boolean status = emailService.checkVerificationCode(dto.getEmail(), dto.getCode()); + if (!status) throw new Exception("验证码错误"); + return adminRepository.findAdminByEmail(dto.getEmail()); + } + + @Override + public List findAll() { + return adminRepository.findAll(); + } + + @Override + public String createToken(Admin admin, long exp) { + String rolesString = admin.getRoles(); + String[] roles = rolesString != null ? rolesString.split(";") : null; + return JwtTokenUtil.createToken(admin.getEmail(), roles, exp); + } + + @Override + public void delete(String id) { + adminRepository.deleteById(id); + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/CommodityServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/CommodityServiceImpl.java new file mode 100644 index 00000000..d027c319 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/CommodityServiceImpl.java @@ -0,0 +1,50 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Commodity; +import com.example.api.repository.CommodityRepository; +import com.example.api.service.CommodityService; +import com.example.api.utils.DataTimeUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class CommodityServiceImpl implements CommodityService { + + @Resource + private CommodityRepository commodityRepository; + + @Override + public Commodity save(Commodity commodity) { + commodity.setCreateAt(DataTimeUtil.getNowTimeString()); + return commodityRepository.save(commodity); + } + + @Override + public void update(Commodity commodity) { + commodity.setUpdateAt(DataTimeUtil.getNowTimeString()); + commodityRepository.save(commodity); + } + + @Override + public void delete(String id) { + commodityRepository.deleteById(id); + } + + @Override + public Commodity findById(String id) { + return commodityRepository.findById(id).orElse(null); + } + + @Override + public List findAll() { + return commodityRepository.findAll(); + } + + @Override + public List findAllByLikeName(String name) { + return commodityRepository.findByNameLike("%" + name + "%"); + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/DistributionServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/DistributionServiceImpl.java new file mode 100644 index 00000000..9ae3bb3f --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/DistributionServiceImpl.java @@ -0,0 +1,46 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Distribution; +import com.example.api.model.entity.Driver; +import com.example.api.model.entity.Vehicle; +import com.example.api.repository.DistributionRepository; +import com.example.api.repository.DriverRepository; +import com.example.api.repository.VehicleRepository; +import com.example.api.service.DistributionService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Optional; + +@Service +public class DistributionServiceImpl implements DistributionService { + + @Resource + private DistributionRepository distributionRepository; + + @Resource + private DriverRepository driverRepository; + + @Resource + private VehicleRepository vehicleRepository; + + @Override + public Distribution save(Distribution distribution) throws Exception { + if (distributionRepository.findById(distribution.getId()) == null) { + Optional driver = driverRepository.findById(distribution.getDid()); + Optional vehicle = vehicleRepository.findById(distribution.getVid()); +// if (driver.isEmpty() || vehicle.isEmpty()) throw new Exception("请求参数错误"); + if (driver.get().isDriving() || vehicle.get().isDriving()) throw new Exception("司机或货车状态不可用"); + driverRepository.updateDriving(true, distribution.getDid()); + vehicleRepository.updateDriving(true, distribution.getVid()); + } + return distributionRepository.save(distribution); + } + + @Override + public List findAll() { + return distributionRepository.findAll(); + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/DriverServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/DriverServiceImpl.java new file mode 100644 index 00000000..abdea49d --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/DriverServiceImpl.java @@ -0,0 +1,45 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Driver; +import com.example.api.repository.DriverRepository; +import com.example.api.service.DriverService; +import com.example.api.utils.DataTimeUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class DriverServiceImpl implements DriverService { + + @Resource + private DriverRepository driverRepository; + + @Override + public Driver save(Driver driver) { + driver.setCreateAt(DataTimeUtil.getNowTimeString()); + return driverRepository.save(driver); + } + + @Override + public void update(Driver driver) { + driver.setUpdateAt(DataTimeUtil.getNowTimeString()); + driverRepository.save(driver); + } + + @Override + public void delete(String id) { + driverRepository.deleteById(id); + } + + @Override + public Driver findById(String id) { + return driverRepository.findById(id).orElse(null); + } + + @Override + public List findAll() { + return driverRepository.findAll(); + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/EmailServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/EmailServiceImpl.java new file mode 100644 index 00000000..6ab64da8 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/EmailServiceImpl.java @@ -0,0 +1,61 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Code; +import com.example.api.repository.CodeRepository; +import com.example.api.service.EmailService; +import com.example.api.utils.RandomUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.mail.MailException; +import org.springframework.mail.SimpleMailMessage; +import org.springframework.mail.javamail.JavaMailSender; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class EmailServiceImpl implements EmailService { + + @Resource + private CodeRepository codeRepository; + + @Autowired + private JavaMailSender mailSender; + + @Value("${spring.mail.username}") + private String from; + + @Override + public boolean sendVerificationCode(String email) throws MailException { + SimpleMailMessage message = new SimpleMailMessage(); + message.setFrom(from); + message.setTo(email); + //设置标题 + message.setSubject("验证码"); + String value = "123456"; + message.setText("你的验证码为: " + value + " 十五分钟内有效"); + try { +// mailSender.send(message); + }catch (Exception e){ + e.printStackTrace(); + return false; + } + //保存验证码 + //同一主键的email为update操作 + codeRepository.save(new Code(email, value)); + System.out.println("执行save code"); + return true; + } + + @Override + public boolean checkVerificationCode(String email, String value) { + Code code = codeRepository.findByEmailAndValue(email, value); + if (code != null && code.getExp() > System.currentTimeMillis()) { + //登陆成功删除验证码 + codeRepository.delete(code); + return true; + } + return false; + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/EmployeeServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/EmployeeServiceImpl.java new file mode 100644 index 00000000..553212ad --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/EmployeeServiceImpl.java @@ -0,0 +1,45 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Employee; +import com.example.api.repository.EmployeeRepository; +import com.example.api.service.EmployeeService; +import com.example.api.utils.DataTimeUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class EmployeeServiceImpl implements EmployeeService { + + @Resource + private EmployeeRepository employeeRepository; + + @Override + public Employee save(Employee employee) { + employee.setCreateAt(DataTimeUtil.getNowTimeString()); + return employeeRepository.save(employee); + } + + @Override + public void update(Employee employee) { + employee.setUpdateAt(DataTimeUtil.getNowTimeString()); + employeeRepository.save(employee); + } + + @Override + public void delete(String id) { + employeeRepository.deleteById(id); + } + + @Override + public Employee findById(String id) { + return employeeRepository.findById(id).orElse(null); + } + + @Override + public List findAll() { + return employeeRepository.findAll(); + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/InventoryRecordServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/InventoryRecordServiceImpl.java new file mode 100644 index 00000000..dc456f83 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/InventoryRecordServiceImpl.java @@ -0,0 +1,110 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Commodity; +import com.example.api.model.entity.Inventory; +import com.example.api.model.entity.InventoryRecord; +import com.example.api.model.vo.CommodityChartVo; +import com.example.api.repository.CommodityRepository; +import com.example.api.repository.InventoryRecordRepository; +import com.example.api.repository.InventoryRepository; +import com.example.api.service.InventoryRecordService; +import com.example.api.utils.DataTimeUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.*; + +@Service +public class InventoryRecordServiceImpl implements InventoryRecordService { + + @Resource + private InventoryRepository inventoryRepository; + + @Resource + private CommodityRepository commodityRepository; + + @Resource + private InventoryRecordRepository recordRepository; + + @Override + public List analyzeCommodity(Integer type) { + List result = new ArrayList<>(); + List all = recordRepository.findAllByType(type); + Map map = new HashMap<>(); + for (InventoryRecord r : all) { + if (map.containsKey(r.getName())) { + map.put(r.getName(), map.get(r.getName()) + r.getCount()); + } else { + map.put(r.getName(), r.getCount()); + } + } + for (String key : map.keySet()) { + result.add(new CommodityChartVo(map.get(key), key)); + } + return result; + } + + @Override + public List findAllByWarehouseId(String wid) { + return recordRepository.findAllByWid(wid); + } + + @Override + public List findAllByCommodityId(String cid) { + return recordRepository.findAllByCid(cid); + } + + @Override + public InventoryRecord out(InventoryRecord record) throws Exception { + + //查找当前商品在该仓库的库存 + Inventory inventory = inventoryRepository.findByWidAndCid(record.getWid(), record.getCid()); + //查询结果为空 + if (inventory == null) throw new Exception("仓库内不存在该商品"); + //比较库存 + if (inventory.getCount() < record.getCount()) throw new Exception("出库失败,库存数量不足"); + + Optional optional = commodityRepository.findById(record.getCid()); + if (optional == null) { + throw new Exception("不存在的商品id"); + } + Commodity commodity = optional.get(); + commodity.setCount(commodity.getCount() - record.getCount()); + commodityRepository.save(optional.get()); + inventory.setCount(inventory.getCount() - record.getCount()); + + inventoryRepository.save(inventory); + record.setCreateAt(DataTimeUtil.getNowTimeString()); + record.setType(-1); + return recordRepository.save(record); + } + + @Override + public InventoryRecord in(InventoryRecord record) throws Exception { + Optional optional = commodityRepository.findById(record.getCid()); + if (optional == null) { + throw new Exception("不存在的商品id"); + } + Commodity commodity = optional.get(); + commodity.setCount(commodity.getCount() + record.getCount()); + commodityRepository.save(optional.get()); + + //查找当前商品在该仓库的库存 + Inventory inventory = inventoryRepository.findByWidAndCid(record.getWid(), record.getCid()); + //查询结果为空 + if (inventory == null) { + //新建该商品库存信息 + inventory = new Inventory(); + inventory.setCid(record.getCid()); + inventory.setWid(record.getWid()); + inventory.setCount(0); + inventory.setName(record.getName()); + } + inventory.setCount(inventory.getCount() + record.getCount()); + inventoryRepository.save(inventory); + record.setCreateAt(DataTimeUtil.getNowTimeString()); + record.setType(+1); + return recordRepository.save(record); + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/InventoryServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/InventoryServiceImpl.java new file mode 100644 index 00000000..cdbb2f86 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/InventoryServiceImpl.java @@ -0,0 +1,37 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Inventory; +import com.example.api.repository.InventoryRepository; +import com.example.api.service.InventoryService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class InventoryServiceImpl implements InventoryService { + + @Resource + private InventoryRepository inventoryRepository; + + @Override + public Inventory save(Inventory inventory) { + return inventoryRepository.save(inventory); + } + + @Override + public List findAll() { + return inventoryRepository.findAll(); + } + + @Override + public List findByCommodityId(String cid) { + return inventoryRepository.findAllByCid(cid); + } + + @Override + public List findByWarehouseId(String wid) { + return inventoryRepository.findAllByWid(wid); + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/LoginLogServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/LoginLogServiceImpl.java new file mode 100644 index 00000000..3fb6ac4b --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/LoginLogServiceImpl.java @@ -0,0 +1,50 @@ +package com.example.api.service.impl; + +import com.example.api.model.dto.LoginDto; +import com.example.api.model.entity.Admin; +import com.example.api.model.entity.LoginLog; +import com.example.api.repository.LoginLogRepository; +import com.example.api.service.LoginLogService; +import com.example.api.utils.BrowserUtil; +import com.example.api.utils.IpUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.time.LocalDateTime; +import java.util.Date; +import java.util.List; + +@Service +public class LoginLogServiceImpl implements LoginLogService { + @Resource + private LoginLogRepository loginLogRepository; + + @Override + public List getAll() { + return loginLogRepository.findAll(); + } + + @Override + public void recordLog(LoginDto loginDto, Admin admin, HttpServletRequest request) { + //创建日志对象 + LoginLog loginLog = new LoginLog(); + loginLog.setDate(new Date()); + loginLog.setEmail(loginDto.getEmail()); + //获取浏览器版本 + loginLog.setBrowser(BrowserUtil.getBrower(request)); + loginLog.setIp(IpUtil.getIpAddr(request)); + if (admin == null){ + loginLog.setStatus(0); + }else { + loginLog.setStatus(1); + } + //将日志记录写入数据库 + loginLogRepository.save(loginLog); + } + + @Override + public void delLoginLog(String id) { + loginLogRepository.deleteById(id); + } +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/SaleServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/SaleServiceImpl.java new file mode 100644 index 00000000..55c61a01 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/SaleServiceImpl.java @@ -0,0 +1,34 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Sale; +import com.example.api.repository.SaleRepository; +import com.example.api.service.SaleService; +import com.example.api.utils.DataTimeUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class SaleServiceImpl implements SaleService { + + @Resource + private SaleRepository saleRepository; + + @Override + public Sale save(Sale sale) { + sale.setCreateAt(DataTimeUtil.getNowTimeString()); + return saleRepository.save(sale); + } + + @Override + public List findAll() { + return saleRepository.findAll(); + } + + @Override + public List searchByCompany(String name) { + return saleRepository.findAllByCompanyLike(name); + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/SystemLogServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/SystemLogServiceImpl.java new file mode 100644 index 00000000..6131f8cd --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/SystemLogServiceImpl.java @@ -0,0 +1,65 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.SystemLog; +import com.example.api.model.vo.SystemLogVo; +import com.example.api.repository.SystemLogRepository; +import com.example.api.service.SystemLogService; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.jpa.domain.Specification; +import org.springframework.security.core.parameters.P; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import javax.persistence.criteria.*; +import java.util.ArrayList; +import java.util.List; + +@Service +public class SystemLogServiceImpl implements SystemLogService { + @Autowired + private SystemLogRepository systemLogRepository; + @Override + public void record(SystemLog log) { + systemLogRepository.save(log); + } + + @Override + public List getAll() { + return systemLogRepository.findAll(); + } + + @Override + public void delete(String id) { + systemLogRepository.deleteById(id); + } + + @Override + public List query(SystemLogVo systemLogVo) { + /* + 构造查询条件 + */ + Specification specification = new Specification() { + @Override + public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder criteriaBuilder) { + Path account = root.get("account"); + Path module = root.get("module"); + Predicate res = null; + if (!StringUtils.isEmpty(systemLogVo.getAccount())) { + Predicate like1 = criteriaBuilder.like(account.as(String.class), "%"+systemLogVo.getAccount()+"%"); + if (!StringUtils.isEmpty(systemLogVo.getMoudle())) { + Predicate like2 = criteriaBuilder.like(module.as(String.class), "%"+systemLogVo.getMoudle()+"%"); + res = criteriaBuilder.and(like1, like2); + }else { + res = criteriaBuilder.and(like1); + } + }else if(!StringUtils.isEmpty(systemLogVo.getMoudle())){ + Predicate like2 = criteriaBuilder.like(module.as(String.class), "%"+systemLogVo.getMoudle()+"%"); + res = criteriaBuilder.and(like2); + } + return res; + } + }; + return systemLogRepository.findAll(specification); + } +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/UserServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/UserServiceImpl.java new file mode 100644 index 00000000..64d95a50 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/UserServiceImpl.java @@ -0,0 +1,9 @@ +package com.example.api.service.impl; + +import com.example.api.service.UserService; +import org.springframework.stereotype.Service; + +@Service +public class UserServiceImpl implements UserService { + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/VehicleServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/VehicleServiceImpl.java new file mode 100644 index 00000000..f251d9ac --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/VehicleServiceImpl.java @@ -0,0 +1,44 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Vehicle; +import com.example.api.repository.VehicleRepository; +import com.example.api.service.VehicleService; +import com.example.api.utils.DataTimeUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class VehicleServiceImpl implements VehicleService { + + @Resource + private VehicleRepository vehicleRepository; + + @Override + public Vehicle save(Vehicle vehicle) { + vehicle.setCreateAt(DataTimeUtil.getNowTimeString()); + return vehicleRepository.save(vehicle); + } + + @Override + public void update(Vehicle vehicle) { + vehicleRepository.save(vehicle); + } + + @Override + public void delete(String id) { + vehicleRepository.deleteById(id); + } + + @Override + public Vehicle findById(String id) { + return vehicleRepository.findById(id).orElse(null); + } + + @Override + public List findAll() { + return vehicleRepository.findAll(); + } + +} diff --git a/IDEA/src/main/java/com/example/api/service/impl/WarehouseServiceImpl.java b/IDEA/src/main/java/com/example/api/service/impl/WarehouseServiceImpl.java new file mode 100644 index 00000000..c6029c60 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/service/impl/WarehouseServiceImpl.java @@ -0,0 +1,34 @@ +package com.example.api.service.impl; + +import com.example.api.model.entity.Warehouse; +import com.example.api.repository.WareHouseRepository; +import com.example.api.service.WarehouseService; +import com.example.api.utils.DataTimeUtil; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.List; + +@Service +public class WarehouseServiceImpl implements WarehouseService { + + @Resource + private WareHouseRepository wareHouseRepository; + + @Override + public Warehouse save(Warehouse warehouse) { + warehouse.setCreateAt(DataTimeUtil.getNowTimeString()); + return wareHouseRepository.save(warehouse); + } + + @Override + public List findAll() { + return wareHouseRepository.findAll(); + } + + @Override + public void delete(String id) { + wareHouseRepository.deleteById(id); + } + +} diff --git a/IDEA/src/main/java/com/example/api/task/ConsumeMqTask.java b/IDEA/src/main/java/com/example/api/task/ConsumeMqTask.java new file mode 100644 index 00000000..b04ff01d --- /dev/null +++ b/IDEA/src/main/java/com/example/api/task/ConsumeMqTask.java @@ -0,0 +1,49 @@ +package com.example.api.task; + +import com.example.api.model.entity.Admin; +import com.example.api.repository.AdminRepository; +import com.example.api.repository.UserRepository; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.boot.CommandLineRunner; +import org.springframework.core.annotation.Order; +import org.springframework.stereotype.Component; + +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; + +//项目启动就执行的任务 +@Component +@Order(1) +public class ConsumeMqTask implements ApplicationRunner { + @Autowired + private AdminRepository adminRepository; + + /** + * 日志 + */ + private static final Logger LOGGER = LoggerFactory.getLogger(ConsumeMqTask.class); + + @Override + public void run(ApplicationArguments args) throws Exception { + LOGGER.info("start to run ConsumeMqTask."); +// System.out.println("执行方法"); +// Admin admin = new Admin(); +// admin.setRoles("ROLE_SUPER_ADMIN"); +// admin.setEmail("admin@qq.com"); +// admin.setPassword("123456"); +// Date date = new Date(); +// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// String time = sdf.format(date); +// admin.setCreateAt(time); +// adminRepository.save(admin); + LOGGER.info("end to run ConsumeMqTask."); + } +} + diff --git a/IDEA/src/main/java/com/example/api/task/Test.java b/IDEA/src/main/java/com/example/api/task/Test.java new file mode 100644 index 00000000..f07830c2 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/task/Test.java @@ -0,0 +1,22 @@ +package com.example.api.task; + +import java.util.HashMap; + +/** + * @description + * @className Test + * @package com.example.api.task.Test + * @Author zhoutianyong@yuntai.com + * @date 2023/2/23 0023 + * @copyright 版权归 HSYUNTAI 所有 + * @Path yt-plat-hospital + * @module + */ +public class Test { + public static void main(String[] args) { + + HashMap objectObjectHashMap = new HashMap<>(); + objectObjectHashMap.put(null,null); + + } +} diff --git a/IDEA/src/main/java/com/example/api/task/TestThread.java b/IDEA/src/main/java/com/example/api/task/TestThread.java new file mode 100644 index 00000000..7098b450 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/task/TestThread.java @@ -0,0 +1,15 @@ +package com.example.api.task; + +/** + * @description + * @className TestThread + * @package com.example.api.task.TestThread + * @Author zhoutianyong@yuntai.com + * @date 2023/2/23 0023 + * @copyright 版权归 HSYUNTAI 所有 + * @Path yt-plat-hospital + * @module + */ +public class TestThread extends Thread{ + +} diff --git a/IDEA/src/main/java/com/example/api/utils/BrowserUtil.java b/IDEA/src/main/java/com/example/api/utils/BrowserUtil.java new file mode 100644 index 00000000..e19d2699 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/utils/BrowserUtil.java @@ -0,0 +1,102 @@ +package com.example.api.utils; + +import javax.servlet.http.HttpServletRequest; + +public class BrowserUtil { + /** + * 获取浏览器版本 + * + * @param request + * @return + */ + public static String getBrower(HttpServletRequest request) { + String browserVersion = null; + String header = request.getHeader("User-Agent"); + if (header.equals("") || header == null)// 为空就默认为谷歌 + { + browserVersion = "谷歌浏览器"; + return browserVersion; + } + + if (header.indexOf("Chrome") > 0)// 谷歌 + { + browserVersion = "Chrome"; + } + else if (header.indexOf("Safari") > 0)// safari + { + browserVersion = "safari浏览器"; + } + if (header.indexOf("MSIE") > 0)// ie浏览器 + { + browserVersion = "IE浏览器"; + } + if (header.indexOf("Firefox") > 0)// 火狐浏览器 + { + browserVersion = "火狐浏览器"; + } + if (header.indexOf("Camino") > 0)// + { + browserVersion = "camino浏览器"; + } + if (header.indexOf("Konqueror") > 0)// + { + browserVersion = "konqueror浏览器"; + } + if (header.indexOf("Quark") > 0)// 夸克浏览器 + { + browserVersion = "quark浏览器"; + } + if (header.indexOf("baidu") > 0)// 百度浏览器 + { + browserVersion = "百度浏览器"; + } + if (header.indexOf("Edge") > 0)// edge浏览器 + { + browserVersion = "edge"; + } + if (header.indexOf("TheWorld") > 0)// theworld浏览器 + { + browserVersion = "theworld浏览器"; + } + if (header.indexOf("QQBrowser") > 0 || header.indexOf("TencentTraveler") > 0 || header.indexOf("QQTheme") > 0)// qq浏览器 + { + browserVersion = "qq浏览器"; + } + if (header.indexOf("Avast") > 0)// Avast Secure Browser浏览器 + { + browserVersion = "avast浏览器"; + } + if (header.indexOf("OPR") > 0)// opera浏览器 + { + browserVersion = "opera浏览器"; + } + if (header.indexOf("360") > 0)// 360浏览器 + { + browserVersion = "360浏览器"; + } + if (header.indexOf("LBBROWSER") > 0)// 猎豹浏览器 + { + browserVersion = "猎豹浏览器"; + } + if (header.indexOf("Maxthon") > 0)// 遨游浏览器 + { + browserVersion = "遨游浏览器"; + } + if (header.indexOf("MetaSr") > 0 || header.indexOf("Sogou") > 0)// 搜狗浏览器 + { + browserVersion = "搜狗浏览器"; + } + if (header.indexOf("UCWEB") > 0 || header.indexOf("UCBrowser") > 0)// uc浏览器 + { + browserVersion = "uc浏览器"; + } + if (browserVersion == null)// 没找到的都默认谷歌浏览器 + { + browserVersion = "谷歌浏览器"; + } + System.out.println(browserVersion); + return browserVersion; + + } + +} diff --git a/IDEA/src/main/java/com/example/api/utils/DataTimeUtil.java b/IDEA/src/main/java/com/example/api/utils/DataTimeUtil.java new file mode 100644 index 00000000..4aaea2bb --- /dev/null +++ b/IDEA/src/main/java/com/example/api/utils/DataTimeUtil.java @@ -0,0 +1,35 @@ +package com.example.api.utils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; + +public final class DataTimeUtil { + + public static String getNowTimeString() { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return df.format(System.currentTimeMillis()); + } + + public static long parseTimeStamp(String s) { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + long t = 0; + try { + t = df.parse(s).getTime(); + } catch (ParseException e) { + e.printStackTrace(); + } + return t; + } + + public static boolean isAfterNow(String time) { + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); + long t = 0; + try { + t = df.parse(time).getTime(); + } catch (ParseException e) { + e.printStackTrace(); + } + return t > System.currentTimeMillis(); + } + +} diff --git a/IDEA/src/main/java/com/example/api/utils/IpUtil.java b/IDEA/src/main/java/com/example/api/utils/IpUtil.java new file mode 100644 index 00000000..b119ef15 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/utils/IpUtil.java @@ -0,0 +1,41 @@ +package com.example.api.utils; + +import javax.servlet.http.HttpServletRequest; + +public class IpUtil { + + private static final String LOOPBACK_ADDRESS = "127.0.0.1"; + private static final String IPV6_ADDRESS = "0:0:0:0:0:0:0:1"; + + /** + * 通过HttpServletRequest返回客户端真实IP地址(通过多级代理后也能获取到真实ip) + */ + public static String getIpAddr(HttpServletRequest request) { + try { + String ip = request.getHeader("x-forwarded-for"); + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + //如果使用localhost访问,对于windows IPv6会返回0:0:0:0:0:0:0:1,将其转为127.0.0.1 + if (IPV6_ADDRESS.equals(ip)) { + ip = LOOPBACK_ADDRESS; + } + return ip; + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } +} diff --git a/IDEA/src/main/java/com/example/api/utils/JwtTokenUtil.java b/IDEA/src/main/java/com/example/api/utils/JwtTokenUtil.java new file mode 100644 index 00000000..a34d14ec --- /dev/null +++ b/IDEA/src/main/java/com/example/api/utils/JwtTokenUtil.java @@ -0,0 +1,108 @@ +package com.example.api.utils; + +import io.jsonwebtoken.Claims; +import io.jsonwebtoken.ExpiredJwtException; +import io.jsonwebtoken.Jwts; +import io.jsonwebtoken.SignatureAlgorithm; + +import java.util.*; +import java.util.logging.Logger; + +public final class JwtTokenUtil { + //在request的header中的名字 + public final static String TOKEN_HEADER = "Authorization"; + + //一个星期过期 + public final static long REMEMBER_EXPIRATION_TIME = 1000 * 60 * 60 * 24 * 7; + + //一天过期 + public final static long EXPIRATION_TIME = 1000 * 60 * 60 * 24; + + // 应用密钥 + private static final String APP_SECRET = "logisticapi"; + + private static final String PREFIX = "logistics:"; + + // 角色权限声明 + private static final String ROLE_CLAIMS = "roles"; + + //检验token是否合法 + public static boolean checkToken(String token) { + if ("null".equals(token) || token == null || "".equals(token)){ + System.out.println("token为空"); + return false; + } + return token.startsWith(PREFIX); + } + + /** + * 生成Token + */ + public static String createToken(String username, String[] roles, long expiration) { + System.out.println("---------------------------"); + System.out.println("username:"+username); + System.out.println("-----------------------"); + Map map = new HashMap<>(); + map.put(ROLE_CLAIMS, roles); + return PREFIX + Jwts.builder() + .setClaims(map) + .setIssuedAt(new Date()) + .setExpiration(new Date(System.currentTimeMillis() + expiration)) + .signWith(SignatureAlgorithm.HS256, APP_SECRET) + .setSubject(username) + .compact(); + } + + /** + * 获取token body + */ + private static Claims getTokenClaims(String token) { + token = token.substring(PREFIX.length()); + Claims claims = null; + try { + claims = Jwts.parser() + .setSigningKey(APP_SECRET) + .parseClaimsJws(token) + .getBody(); + } catch (ExpiredJwtException e) { + e.printStackTrace(); + } + return claims; + } + + /** 从Token中获取username */ + public static String getUsername(String token) { + System.out.println("----gettoken----"); + System.out.println(getTokenClaims(token)); + System.out.println("-------------"); + System.out.println(getTokenClaims(token).getSubject()); + System.out.println("-------------"); + return getTokenClaims(token).getSubject(); + } + + /** + * 从Token中获取用户角色 + */ + public static List getTokenRoles(String token) { + List roles = new ArrayList<>(); + Object object = getTokenClaims(token).get(ROLE_CLAIMS); + if (object instanceof ArrayList) { + for (Object o : (List) object) { + roles.add((String) o); + } + } + for (String role : roles) { + System.out.println(role); + } + return roles; + } + + /** + * 校验Token是否过期 + */ + public static boolean isExpiration(String token) { + return getTokenClaims(token).getExpiration().before(new Date()); + } + +} + diff --git a/IDEA/src/main/java/com/example/api/utils/RandomUtil.java b/IDEA/src/main/java/com/example/api/utils/RandomUtil.java new file mode 100644 index 00000000..9f07ada5 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/utils/RandomUtil.java @@ -0,0 +1,16 @@ +package com.example.api.utils; + +import java.util.Random; + +public final class RandomUtil { + + public static String next() { + StringBuilder builder = new StringBuilder(); + Random random = new Random(); + for (int i = 0; i < 6; i++) { + builder.append(random.nextInt(10)); + } + return builder.toString(); + } + +} diff --git a/IDEA/src/main/java/com/example/api/utils/ResponseUtil.java b/IDEA/src/main/java/com/example/api/utils/ResponseUtil.java new file mode 100644 index 00000000..7b003af6 --- /dev/null +++ b/IDEA/src/main/java/com/example/api/utils/ResponseUtil.java @@ -0,0 +1,29 @@ +package com.example.api.utils; + +import com.alibaba.fastjson.JSON; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +public final class ResponseUtil { + + public static void writeJson(HttpServletResponse response, Object o) { + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, PATCH, DELETE, PUT"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); + response.setContentType("application/json;charset=utf-8"); + response.setStatus(200); + try{ + PrintWriter writer = response.getWriter(); + writer.write(JSON.toJSONString(o)); + writer.flush(); + writer.close(); + }catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/IDEA/src/main/resources/application.yaml b/IDEA/src/main/resources/application.yaml new file mode 100644 index 00000000..06a726c1 --- /dev/null +++ b/IDEA/src/main/resources/application.yaml @@ -0,0 +1,32 @@ +server: + port: 8088 + +spring: + datasource: + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/logistics?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serverTimezone=GMT%2b8&allowPublicKeyRetrieval=true + username: root + password: 123456 + jpa: + hibernate: + ddl-auto: update + open-in-view: false + show-sql: true + mail: + host: smtp.qq.com + protocol: smtp + default-encoding: UTF-8 + port: 465 + username: abc@qq.com + password: hmps234234 + properties: + mail: + debug: true + smtp: + ssl: + enable: true + +# 设置日志级别会给root根节点设置,代表整体应用的级别 +logging: + level: + root: info \ No newline at end of file diff --git a/IDEA/sys/create_synonym_db.sql b/IDEA/sys/create_synonym_db.sql new file mode 100644 index 00000000..6bd20512 --- /dev/null +++ b/IDEA/sys/create_synonym_db.sql @@ -0,0 +1,137 @@ +create + definer = `mysql.sys`@localhost procedure sys.create_synonym_db(IN in_db_name varchar(64), IN in_synonym varchar(64)) + comment ' +Description +----------- + +Takes a source database name and synonym name, and then creates the +synonym database with views that point to all of the tables within +the source database. + +Useful for creating a "ps" synonym for "performance_schema", +or "is" instead of "information_schema", for example. + +Parameters +----------- + +in_db_name (VARCHAR(64)): + The database name that you would like to create a synonym for. +in_synonym (VARCHAR(64)): + The database synonym name. + +Example +----------- + +mysql> SHOW DATABASES; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| sys | +| test | ++--------------------+ +5 rows in set (0.00 sec) + +mysql> CALL sys.create_synonym_db(''performance_schema'', ''ps''); ++---------------------------------------+ +| summary | ++---------------------------------------+ +| Created 74 views in the `ps` database | ++---------------------------------------+ +1 row in set (8.57 sec) + +Query OK, 0 rows affected (8.57 sec) + +mysql> SHOW DATABASES; ++--------------------+ +| Database | ++--------------------+ +| information_schema | +| mysql | +| performance_schema | +| ps | +| sys | +| test | ++--------------------+ +6 rows in set (0.00 sec) + +mysql> SHOW FULL TABLES FROM ps; ++------------------------------------------------------+------------+ +| Tables_in_ps | Table_type | ++------------------------------------------------------+------------+ +| accounts | VIEW | +| cond_instances | VIEW | +| events_stages_current | VIEW | +| events_stages_history | VIEW | +... +' + sql security invoker + modifies sql data +BEGIN + DECLARE v_done bool DEFAULT FALSE; + DECLARE v_db_name_check VARCHAR(64); + DECLARE v_db_err_msg TEXT; + DECLARE v_table VARCHAR(64); + DECLARE v_views_created INT DEFAULT 0; + DECLARE db_doesnt_exist CONDITION FOR SQLSTATE '42000'; + DECLARE db_name_exists CONDITION FOR SQLSTATE 'HY000'; + DECLARE c_table_names CURSOR FOR + SELECT TABLE_NAME + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = in_db_name; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; + -- Check if the source database exists + SELECT SCHEMA_NAME INTO v_db_name_check + FROM INFORMATION_SCHEMA.SCHEMATA + WHERE SCHEMA_NAME = in_db_name; + IF v_db_name_check IS NULL THEN + SET v_db_err_msg = CONCAT('Unknown database ', in_db_name); + SIGNAL SQLSTATE 'HY000' + SET MESSAGE_TEXT = v_db_err_msg; + END IF; + -- Check if a database of the synonym name already exists + SELECT SCHEMA_NAME INTO v_db_name_check + FROM INFORMATION_SCHEMA.SCHEMATA + WHERE SCHEMA_NAME = in_synonym; + IF v_db_name_check = in_synonym THEN + SET v_db_err_msg = CONCAT('Can\'t create database ', in_synonym, '; database exists'); + SIGNAL SQLSTATE 'HY000' + SET MESSAGE_TEXT = v_db_err_msg; + END IF; + -- All good, create the database and views + SET @create_db_stmt := CONCAT('CREATE DATABASE ', sys.quote_identifier(in_synonym)); + PREPARE create_db_stmt FROM @create_db_stmt; + EXECUTE create_db_stmt; + DEALLOCATE PREPARE create_db_stmt; + SET v_done = FALSE; + OPEN c_table_names; + c_table_names: LOOP + FETCH c_table_names INTO v_table; + IF v_done THEN + LEAVE c_table_names; + END IF; + SET @create_view_stmt = CONCAT( + 'CREATE SQL SECURITY INVOKER VIEW ', + sys.quote_identifier(in_synonym), + '.', + sys.quote_identifier(v_table), + ' AS SELECT * FROM ', + sys.quote_identifier(in_db_name), + '.', + sys.quote_identifier(v_table) + ); + PREPARE create_view_stmt FROM @create_view_stmt; + EXECUTE create_view_stmt; + DEALLOCATE PREPARE create_view_stmt; + SET v_views_created = v_views_created + 1; + END LOOP; + CLOSE c_table_names; + SELECT CONCAT( + 'Created ', v_views_created, ' view', + IF(v_views_created != 1, 's', ''), ' in the ', + sys.quote_identifier(in_synonym), ' database' + ) AS summary; +END; + diff --git a/IDEA/sys/diagnostics.sql b/IDEA/sys/diagnostics.sql new file mode 100644 index 00000000..c4fe0a0f --- /dev/null +++ b/IDEA/sys/diagnostics.sql @@ -0,0 +1,925 @@ +create + definer = `mysql.sys`@localhost procedure sys.diagnostics(IN in_max_runtime int unsigned, + IN in_interval int unsigned, + IN in_auto_config enum ('current', 'medium', 'full')) + comment ' +Description +----------- + +Create a report of the current status of the server for diagnostics purposes. Data collected includes (some items depends on versions and settings): + + * The GLOBAL VARIABLES + * Several sys schema views including metrics or equivalent (depending on version and settings) + * Queries in the 95th percentile + * Several ndbinfo views for MySQL Cluster + * Replication (both master and slave) information. + +Some of the sys schema views are calculated as initial (optional), overall, delta: + + * The initial view is the content of the view at the start of this procedure. + This output will be the same as the the start values used for the delta view. + The initial view is included if @sys.diagnostics.include_raw = ''ON''. + * The overall view is the content of the view at the end of this procedure. + This output is the same as the end values used for the delta view. + The overall view is always included. + * The delta view is the difference from the beginning to the end. Note that for min and max values + they are simply the min or max value from the end view respectively, so does not necessarily reflect + the minimum/maximum value in the monitored period. + Note: except for the metrics views the delta is only calculation between the first and last outputs. + +Requires the SUPER privilege for "SET sql_log_bin = 0;". + +Parameters +----------- + +in_max_runtime (INT UNSIGNED): + The maximum time to keep collecting data. + Use NULL to get the default which is 60 seconds, otherwise enter a value greater than 0. +in_interval (INT UNSIGNED): + How long to sleep between data collections. + Use NULL to get the default which is 30 seconds, otherwise enter a value greater than 0. +in_auto_config (ENUM(''current'', ''medium'', ''full'')) + Automatically enable Performance Schema instruments and consumers. + NOTE: The more that are enabled, the more impact on the performance. + Supported values are: + * current - use the current settings. + * medium - enable some settings. This requires the SUPER privilege. + * full - enables all settings. This will have a big impact on the + performance - be careful using this option. This requires + the SUPER privilege. + If another setting the ''current'' is chosen, the current settings + are restored at the end of the procedure. + + +Configuration Options +---------------------- + +sys.diagnostics.allow_i_s_tables + Specifies whether it is allowed to do table scan queries on information_schema.TABLES. This can be expensive if there + are many tables. Set to ''ON'' to allow, ''OFF'' to not allow. + Default is ''OFF''. + +sys.diagnostics.include_raw + Set to ''ON'' to include the raw data (e.g. the original output of "SELECT * FROM sys.metrics"). + Use this to get the initial values of the various views. + Default is ''OFF''. + +sys.statement_truncate_len + How much of queries in the process list output to include. + Default is 64. + +sys.debug + Whether to provide debugging output. + Default is ''OFF''. Set to ''ON'' to include. + + +Example +-------- + +To create a report and append it to the file diag.out: + +mysql> TEE diag.out; +mysql> CALL sys.diagnostics(120, 30, ''current''); +... +mysql> NOTEE; +' + sql security invoker + reads sql data +BEGIN + DECLARE v_start, v_runtime, v_iter_start, v_sleep DECIMAL(20,2) DEFAULT 0.0; + DECLARE v_has_innodb, v_has_ndb, v_has_ps, v_has_replication, v_has_ps_replication VARCHAR(8) CHARSET utf8mb4 DEFAULT 'NO'; + DECLARE v_this_thread_enabled ENUM('YES', 'NO'); + DECLARE v_table_name, v_banner VARCHAR(64) CHARSET utf8mb4; + DECLARE v_sql_status_summary_select, v_sql_status_summary_delta, v_sql_status_summary_from, v_no_delta_names TEXT; + DECLARE v_output_time, v_output_time_prev DECIMAL(20,3) UNSIGNED; + DECLARE v_output_count, v_count, v_old_group_concat_max_len INT UNSIGNED DEFAULT 0; + -- The width of each of the status outputs in the summery + DECLARE v_status_summary_width TINYINT UNSIGNED DEFAULT 50; + DECLARE v_done BOOLEAN DEFAULT FALSE; + -- Do not include the following ndbinfo views: + -- 'blocks' Static + -- 'config_params' Static + -- 'dict_obj_types' Static + -- 'disk_write_speed_base' Can generate lots of output - only include aggregate views here + -- 'memory_per_fragment' Can generate lots of output + -- 'memoryusage' Handled separately + -- 'operations_per_fragment' Can generate lots of output + -- 'threadblocks' Only needed once + DECLARE c_ndbinfo CURSOR FOR + SELECT TABLE_NAME + FROM information_schema.TABLES + WHERE TABLE_SCHEMA = 'ndbinfo' + AND TABLE_NAME NOT IN ( + 'blocks', + 'config_params', + 'dict_obj_types', + 'disk_write_speed_base', + 'memory_per_fragment', + 'memoryusage', + 'operations_per_fragment', + 'threadblocks' + ); + DECLARE c_sysviews_w_delta CURSOR FOR + SELECT table_name + FROM tmp_sys_views_delta + ORDER BY table_name; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; + -- Do not track the current thread - no reason to clutter the output + SELECT INSTRUMENTED INTO v_this_thread_enabled FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID(); + IF (v_this_thread_enabled = 'YES') THEN + CALL sys.ps_setup_disable_thread(CONNECTION_ID()); + END IF; + -- Check options are sane + IF (in_max_runtime < in_interval) THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'in_max_runtime must be greater than or equal to in_interval'; + END IF; + IF (in_max_runtime = 0) THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'in_max_runtime must be greater than 0'; + END IF; + IF (in_interval = 0) THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'in_interval must be greater than 0'; + END IF; + -- Set configuration options + IF (@sys.diagnostics.allow_i_s_tables IS NULL) THEN + SET @sys.diagnostics.allow_i_s_tables = sys.sys_get_config('diagnostics.allow_i_s_tables', 'OFF'); + END IF; + IF (@sys.diagnostics.include_raw IS NULL) THEN + SET @sys.diagnostics.include_raw = sys.sys_get_config('diagnostics.include_raw' , 'OFF'); + END IF; + IF (@sys.debug IS NULL) THEN + SET @sys.debug = sys.sys_get_config('debug' , 'OFF'); + END IF; + IF (@sys.statement_truncate_len IS NULL) THEN + SET @sys.statement_truncate_len = sys.sys_get_config('statement_truncate_len' , '64' ); + END IF; + -- Temporary table are used - disable sql_log_bin if necessary to prevent them replicating + SET @log_bin := @@sql_log_bin; + IF ((@log_bin = 1) AND (@@binlog_format = 'STATEMENT')) THEN + SET sql_log_bin = 0; + END IF; + -- Some metrics variables doesn't make sense in delta and rate calculations even if they are numeric + -- as they really are more like settings or "current" status. + SET v_no_delta_names = CONCAT('s%{COUNT}.Variable_name NOT IN (', + '''innodb_buffer_pool_pages_total'', ', + '''innodb_page_size'', ', + '''last_query_cost'', ', + '''last_query_partial_plans'', ', + '''qcache_total_blocks'', ', + '''slave_last_heartbeat'', ', + '''ssl_ctx_verify_depth'', ', + '''ssl_ctx_verify_mode'', ', + '''ssl_session_cache_size'', ', + '''ssl_verify_depth'', ', + '''ssl_verify_mode'', ', + '''ssl_version'', ', + '''buffer_flush_lsn_avg_rate'', ', + '''buffer_flush_pct_for_dirty'', ', + '''buffer_flush_pct_for_lsn'', ', + '''buffer_pool_pages_total'', ', + '''lock_row_lock_time_avg'', ', + '''lock_row_lock_time_max'', ', + '''innodb_page_size''', + ')'); + IF (in_auto_config <> 'current') THEN + IF (@sys.debug = 'ON') THEN + SELECT CONCAT('Updating Performance Schema configuration to ', in_auto_config) AS 'Debug'; + END IF; + CALL sys.ps_setup_save(0); + IF (in_auto_config = 'medium') THEN + -- Enable all consumers except %history and %history_long + UPDATE performance_schema.setup_consumers + SET ENABLED = 'YES' + WHERE NAME NOT LIKE '%\_history%'; + -- Enable all instruments except wait/synch/% + UPDATE performance_schema.setup_instruments + SET ENABLED = 'YES', + TIMED = 'YES' + WHERE NAME NOT LIKE 'wait/synch/%'; + ELSEIF (in_auto_config = 'full') THEN + UPDATE performance_schema.setup_consumers + SET ENABLED = 'YES'; + UPDATE performance_schema.setup_instruments + SET ENABLED = 'YES', + TIMED = 'YES'; + END IF; + -- Enable all threads except this one + UPDATE performance_schema.threads + SET INSTRUMENTED = 'YES' + WHERE PROCESSLIST_ID <> CONNECTION_ID(); + END IF; + SET v_start = UNIX_TIMESTAMP(NOW(2)), + in_interval = IFNULL(in_interval, 30), + in_max_runtime = IFNULL(in_max_runtime, 60); + -- Get a quick ref with hostname, server UUID, and the time for the report. + SET v_banner = REPEAT( + '-', + LEAST( + GREATEST( + 36, + CHAR_LENGTH(VERSION()), + CHAR_LENGTH(@@global.version_comment), + CHAR_LENGTH(@@global.version_compile_os), + CHAR_LENGTH(@@global.version_compile_machine), + CHAR_LENGTH(@@global.socket), + CHAR_LENGTH(@@global.datadir) + ), + 64 + ) + ); + SELECT 'Hostname' AS 'Name', @@global.hostname AS 'Value' + UNION ALL + SELECT 'Port' AS 'Name', @@global.port AS 'Value' + UNION ALL + SELECT 'Socket' AS 'Name', @@global.socket AS 'Value' + UNION ALL + SELECT 'Datadir' AS 'Name', @@global.datadir AS 'Value' + UNION ALL + SELECT 'Server UUID' AS 'Name', @@global.server_uuid AS 'Value' + UNION ALL + SELECT REPEAT('-', 23) AS 'Name', v_banner AS 'Value' + UNION ALL + SELECT 'MySQL Version' AS 'Name', VERSION() AS 'Value' + UNION ALL + SELECT 'Sys Schema Version' AS 'Name', (SELECT sys_version FROM sys.version) AS 'Value' + UNION ALL + SELECT 'Version Comment' AS 'Name', @@global.version_comment AS 'Value' + UNION ALL + SELECT 'Version Compile OS' AS 'Name', @@global.version_compile_os AS 'Value' + UNION ALL + SELECT 'Version Compile Machine' AS 'Name', @@global.version_compile_machine AS 'Value' + UNION ALL + SELECT REPEAT('-', 23) AS 'Name', v_banner AS 'Value' + UNION ALL + SELECT 'UTC Time' AS 'Name', UTC_TIMESTAMP() AS 'Value' + UNION ALL + SELECT 'Local Time' AS 'Name', NOW() AS 'Value' + UNION ALL + SELECT 'Time Zone' AS 'Name', @@global.time_zone AS 'Value' + UNION ALL + SELECT 'System Time Zone' AS 'Name', @@global.system_time_zone AS 'Value' + UNION ALL + SELECT 'Time Zone Offset' AS 'Name', TIMEDIFF(NOW(), UTC_TIMESTAMP()) AS 'Value'; + -- Are the InnoDB, NDBCluster, and Performance Schema storage engines present? + SET v_has_innodb = IFNULL((SELECT SUPPORT FROM information_schema.ENGINES WHERE ENGINE = 'InnoDB'), 'NO'), + v_has_ndb = IFNULL((SELECT SUPPORT FROM information_schema.ENGINES WHERE ENGINE = 'NDBCluster'), 'NO'), + v_has_ps = IFNULL((SELECT SUPPORT FROM information_schema.ENGINES WHERE ENGINE = 'PERFORMANCE_SCHEMA'), 'NO'), + v_has_ps_replication = v_has_ps, + v_has_replication = IF(v_has_ps_replication = 'YES', IF((SELECT COUNT(*) FROM performance_schema.replication_connection_status) > 0, 'YES', 'NO'), + IF(@@master_info_repository = 'TABLE', IF((SELECT COUNT(*) FROM mysql.slave_master_info) > 0, 'YES', 'NO'), + IF(@@relay_log_info_repository = 'TABLE', IF((SELECT COUNT(*) FROM mysql.slave_relay_log_info) > 0, 'YES', 'NO'), + 'MAYBE'))); + IF (@sys.debug = 'ON') THEN + SELECT v_has_innodb AS 'Has_InnoDB', v_has_ndb AS 'Has_NDBCluster', + v_has_ps AS 'Has_Performance_Schema', + v_has_ps_replication 'AS Has_P_S_Replication', v_has_replication AS 'Has_Replication'; + END IF; + IF (v_has_innodb IN ('DEFAULT', 'YES')) THEN + -- Need to use prepared statement as just having the query as a plain command + -- will generate an error if the InnoDB storage engine is not present + SET @sys.diagnostics.sql = 'SHOW ENGINE InnoDB STATUS'; + PREPARE stmt_innodb_status FROM @sys.diagnostics.sql; + END IF; + IF (v_has_ps = 'YES') THEN + -- Need to use prepared statement as just having the query as a plain command + -- will generate an error if the InnoDB storage engine is not present + SET @sys.diagnostics.sql = 'SHOW ENGINE PERFORMANCE_SCHEMA STATUS'; + PREPARE stmt_ps_status FROM @sys.diagnostics.sql; + END IF; + IF (v_has_ndb IN ('DEFAULT', 'YES')) THEN + -- Need to use prepared statement as just having the query as a plain command + -- will generate an error if the NDBCluster storage engine is not present + SET @sys.diagnostics.sql = 'SHOW ENGINE NDBCLUSTER STATUS'; + PREPARE stmt_ndbcluster_status FROM @sys.diagnostics.sql; + END IF; + SET @sys.diagnostics.sql_gen_query_template = 'SELECT CONCAT( + ''SELECT '', + GROUP_CONCAT( + CASE WHEN (SUBSTRING(TABLE_NAME, 3), COLUMN_NAME) IN ( + (''io_global_by_file_by_bytes'', ''total''), + (''io_global_by_wait_by_bytes'', ''total_requested'') + ) + THEN CONCAT(''format_bytes('', COLUMN_NAME, '') AS '', COLUMN_NAME) + WHEN COLUMN_NAME LIKE ''%latency'' + THEN CONCAT(''format_pico_time('', COLUMN_NAME, '') AS '', COLUMN_NAME) + WHEN SUBSTRING(COLUMN_NAME, -7) = ''_memory'' OR SUBSTRING(COLUMN_NAME, -17) = ''_memory_allocated'' + OR ((SUBSTRING(COLUMN_NAME, -5) = ''_read'' OR SUBSTRING(COLUMN_NAME, -8) = ''_written'' OR SUBSTRING(COLUMN_NAME, -6) = ''_write'') AND SUBSTRING(COLUMN_NAME, 1, 6) <> ''COUNT_'') + THEN CONCAT(''format_bytes('', COLUMN_NAME, '') AS '', COLUMN_NAME) + ELSE COLUMN_NAME + END + ORDER BY ORDINAL_POSITION + SEPARATOR '',\n '' + ), + ''\n FROM tmp_'', SUBSTRING(TABLE_NAME FROM 3), ''_%{OUTPUT}'' + ) AS Query INTO @sys.diagnostics.sql_select + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = ''sys'' AND TABLE_NAME = ? + GROUP BY TABLE_NAME'; + SET @sys.diagnostics.sql_gen_query_delta = 'SELECT CONCAT( + ''SELECT '', + GROUP_CONCAT( + CASE WHEN FIND_IN_SET(COLUMN_NAME COLLATE utf8mb3_general_ci, diag.pk) + THEN COLUMN_NAME + WHEN diag.TABLE_NAME = ''io_global_by_file_by_bytes'' AND COLUMN_NAME COLLATE utf8mb3_general_ci = ''write_pct'' + THEN CONCAT(''IFNULL(ROUND(100-(((e.total_read-IFNULL(s.total_read, 0))'', + ''/NULLIF(((e.total_read-IFNULL(s.total_read, 0))+(e.total_written-IFNULL(s.total_written, 0))), 0))*100), 2), 0.00) AS '', + COLUMN_NAME) + WHEN (diag.TABLE_NAME, COLUMN_NAME) IN ( + (''io_global_by_file_by_bytes'', ''total''), + (''io_global_by_wait_by_bytes'', ''total_requested'') + ) + THEN CONCAT(''format_bytes(e.'', COLUMN_NAME, ''-IFNULL(s.'', COLUMN_NAME, '', 0)) AS '', COLUMN_NAME) + WHEN SUBSTRING(COLUMN_NAME, 1, 4) IN (''max_'', ''min_'') AND SUBSTRING(COLUMN_NAME, -8) = ''_latency'' + THEN CONCAT(''format_pico_time(e.'', COLUMN_NAME, '') AS '', COLUMN_NAME) + WHEN COLUMN_NAME COLLATE utf8mb3_general_ci = ''avg_latency'' + THEN CONCAT(''format_pico_time((e.total_latency - IFNULL(s.total_latency, 0))'', + ''/NULLIF(e.total - IFNULL(s.total, 0), 0)) AS '', COLUMN_NAME) + WHEN SUBSTRING(COLUMN_NAME, -12) = ''_avg_latency'' + THEN CONCAT(''format_pico_time((e.'', SUBSTRING(COLUMN_NAME FROM 1 FOR CHAR_LENGTH(COLUMN_NAME)-12), ''_latency - IFNULL(s.'', SUBSTRING(COLUMN_NAME FROM 1 FOR CHAR_LENGTH(COLUMN_NAME)-12), ''_latency, 0))'', + ''/NULLIF(e.'', SUBSTRING(COLUMN_NAME FROM 1 FOR CHAR_LENGTH(COLUMN_NAME)-12), ''s - IFNULL(s.'', SUBSTRING(COLUMN_NAME FROM 1 FOR CHAR_LENGTH(COLUMN_NAME)-12), ''s, 0), 0)) AS '', COLUMN_NAME) + WHEN COLUMN_NAME LIKE ''%latency'' + THEN CONCAT(''format_pico_time(e.'', COLUMN_NAME, '' - IFNULL(s.'', COLUMN_NAME, '', 0)) AS '', COLUMN_NAME) + WHEN COLUMN_NAME IN (''avg_read'', ''avg_write'', ''avg_written'') + THEN CONCAT(''format_bytes(IFNULL((e.total_'', IF(COLUMN_NAME = ''avg_read'', ''read'', ''written''), ''-IFNULL(s.total_'', IF(COLUMN_NAME = ''avg_read'', ''read'', ''written''), '', 0))'', + ''/NULLIF(e.count_'', IF(COLUMN_NAME = ''avg_read'', ''read'', ''write''), ''-IFNULL(s.count_'', IF(COLUMN_NAME = ''avg_read'', ''read'', ''write''), '', 0), 0), 0)) AS '', + COLUMN_NAME) + WHEN SUBSTRING(COLUMN_NAME, -7) = ''_memory'' OR SUBSTRING(COLUMN_NAME, -17) = ''_memory_allocated'' + OR ((SUBSTRING(COLUMN_NAME, -5) = ''_read'' OR SUBSTRING(COLUMN_NAME, -8) = ''_written'' OR SUBSTRING(COLUMN_NAME, -6) = ''_write'') AND SUBSTRING(COLUMN_NAME, 1, 6) <> ''COUNT_'') + THEN CONCAT(''format_bytes(e.'', COLUMN_NAME, '' - IFNULL(s.'', COLUMN_NAME, '', 0)) AS '', COLUMN_NAME) + ELSE CONCAT(''(e.'', COLUMN_NAME, '' - IFNULL(s.'', COLUMN_NAME, '', 0)) AS '', COLUMN_NAME) + END + ORDER BY ORDINAL_POSITION + SEPARATOR '',\n '' + ), + ''\n FROM tmp_'', diag.TABLE_NAME, ''_end e + LEFT OUTER JOIN tmp_'', diag.TABLE_NAME, ''_start s USING ('', diag.pk, '')'' + ) AS Query INTO @sys.diagnostics.sql_select + FROM tmp_sys_views_delta diag + INNER JOIN information_schema.COLUMNS c ON c.TABLE_NAME COLLATE utf8mb3_general_ci = CONCAT(''x$'', diag.TABLE_NAME) + WHERE c.TABLE_SCHEMA = ''sys'' AND diag.TABLE_NAME = ? + GROUP BY diag.TABLE_NAME'; + IF (v_has_ps = 'YES') THEN + -- Create temporary table with the ORDER BY clauses. Will be required both for the initial (if included) and end queries + DROP TEMPORARY TABLE IF EXISTS tmp_sys_views_delta; + CREATE TEMPORARY TABLE tmp_sys_views_delta ( + TABLE_NAME varchar(64) NOT NULL, + order_by text COMMENT 'ORDER BY clause for the initial and overall views', + order_by_delta text COMMENT 'ORDER BY clause for the delta views', + where_delta text COMMENT 'WHERE clause to use for delta views to only include rows with a "count" > 0', + limit_rows int unsigned COMMENT 'The maximum number of rows to include for the view', + pk varchar(128) COMMENT 'Used with the FIND_IN_SET() function so use comma separated list without whitespace', + PRIMARY KEY (TABLE_NAME) + ); + -- %{OUTPUT} will be replace by the suffix used for the output. + IF (@sys.debug = 'ON') THEN + SELECT 'Populating tmp_sys_views_delta' AS 'Debug'; + END IF; + INSERT INTO tmp_sys_views_delta + VALUES ('host_summary' , '%{TABLE}.statement_latency DESC', + '(e.statement_latency-IFNULL(s.statement_latency, 0)) DESC', + '(e.statements - IFNULL(s.statements, 0)) > 0', NULL, 'host'), + ('host_summary_by_file_io' , '%{TABLE}.io_latency DESC', + '(e.io_latency-IFNULL(s.io_latency, 0)) DESC', + '(e.ios - IFNULL(s.ios, 0)) > 0', NULL, 'host'), + ('host_summary_by_file_io_type' , '%{TABLE}.host, %{TABLE}.total_latency DESC', + 'e.host, (e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'host,event_name'), + ('host_summary_by_stages' , '%{TABLE}.host, %{TABLE}.total_latency DESC', + 'e.host, (e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'host,event_name'), + ('host_summary_by_statement_latency' , '%{TABLE}.total_latency DESC', + '(e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'host'), + ('host_summary_by_statement_type' , '%{TABLE}.host, %{TABLE}.total_latency DESC', + 'e.host, (e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'host,statement'), + ('io_by_thread_by_latency' , '%{TABLE}.total_latency DESC', + '(e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'user,thread_id,processlist_id'), + ('io_global_by_file_by_bytes' , '%{TABLE}.total DESC', + '(e.total-IFNULL(s.total, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', 100, 'file'), + ('io_global_by_file_by_latency' , '%{TABLE}.total_latency DESC', + '(e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', 100, 'file'), + ('io_global_by_wait_by_bytes' , '%{TABLE}.total_requested DESC', + '(e.total_requested-IFNULL(s.total_requested, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'event_name'), + ('io_global_by_wait_by_latency' , '%{TABLE}.total_latency DESC', + '(e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'event_name'), + ('schema_index_statistics' , '(%{TABLE}.select_latency+%{TABLE}.insert_latency+%{TABLE}.update_latency+%{TABLE}.delete_latency) DESC', + '((e.select_latency+e.insert_latency+e.update_latency+e.delete_latency)-IFNULL(s.select_latency+s.insert_latency+s.update_latency+s.delete_latency, 0)) DESC', + '((e.rows_selected+e.insert_latency+e.rows_updated+e.rows_deleted)-IFNULL(s.rows_selected+s.rows_inserted+s.rows_updated+s.rows_deleted, 0)) > 0', + 100, 'table_schema,table_name,index_name'), + ('schema_table_statistics' , '%{TABLE}.total_latency DESC', + '(e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total_latency-IFNULL(s.total_latency, 0)) > 0', 100, 'table_schema,table_name'), + ('schema_tables_with_full_table_scans', '%{TABLE}.rows_full_scanned DESC', + '(e.rows_full_scanned-IFNULL(s.rows_full_scanned, 0)) DESC', + '(e.rows_full_scanned-IFNULL(s.rows_full_scanned, 0)) > 0', 100, 'object_schema,object_name'), + ('user_summary' , '%{TABLE}.statement_latency DESC', + '(e.statement_latency-IFNULL(s.statement_latency, 0)) DESC', + '(e.statements - IFNULL(s.statements, 0)) > 0', NULL, 'user'), + ('user_summary_by_file_io' , '%{TABLE}.io_latency DESC', + '(e.io_latency-IFNULL(s.io_latency, 0)) DESC', + '(e.ios - IFNULL(s.ios, 0)) > 0', NULL, 'user'), + ('user_summary_by_file_io_type' , '%{TABLE}.user, %{TABLE}.latency DESC', + 'e.user, (e.latency-IFNULL(s.latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'user,event_name'), + ('user_summary_by_stages' , '%{TABLE}.user, %{TABLE}.total_latency DESC', + 'e.user, (e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'user,event_name'), + ('user_summary_by_statement_latency' , '%{TABLE}.total_latency DESC', + '(e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'user'), + ('user_summary_by_statement_type' , '%{TABLE}.user, %{TABLE}.total_latency DESC', + 'e.user, (e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'user,statement'), + ('wait_classes_global_by_avg_latency' , 'IFNULL(%{TABLE}.total_latency / NULLIF(%{TABLE}.total, 0), 0) DESC', + 'IFNULL((e.total_latency-IFNULL(s.total_latency, 0)) / NULLIF((e.total - IFNULL(s.total, 0)), 0), 0) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'event_class'), + ('wait_classes_global_by_latency' , '%{TABLE}.total_latency DESC', + '(e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'event_class'), + ('waits_by_host_by_latency' , '%{TABLE}.host, %{TABLE}.total_latency DESC', + 'e.host, (e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'host,event'), + ('waits_by_user_by_latency' , '%{TABLE}.user, %{TABLE}.total_latency DESC', + 'e.user, (e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'user,event'), + ('waits_global_by_latency' , '%{TABLE}.total_latency DESC', + '(e.total_latency-IFNULL(s.total_latency, 0)) DESC', + '(e.total - IFNULL(s.total, 0)) > 0', NULL, 'events') + ; + END IF; + SELECT ' + +======================= + + Configuration + +======================= + +' AS ''; + -- Get the configuration. + SELECT 'GLOBAL VARIABLES' AS 'The following output is:'; + SELECT LOWER(VARIABLE_NAME) AS Variable_name, VARIABLE_VALUE AS Variable_value FROM performance_schema.global_variables ORDER BY VARIABLE_NAME; + IF (v_has_ps = 'YES') THEN + -- Overview of the Performance Schema dynamic settings used for this report. + SELECT 'Performance Schema Setup - Actors' AS 'The following output is:'; + SELECT * FROM performance_schema.setup_actors; + SELECT 'Performance Schema Setup - Consumers' AS 'The following output is:'; + SELECT NAME AS Consumer, ENABLED, sys.ps_is_consumer_enabled(NAME) AS COLLECTS + FROM performance_schema.setup_consumers; + SELECT 'Performance Schema Setup - Instruments' AS 'The following output is:'; + SELECT SUBSTRING_INDEX(NAME, '/', 2) AS 'InstrumentClass', + ROUND(100*SUM(IF(ENABLED = 'YES', 1, 0))/COUNT(*), 2) AS 'EnabledPct', + ROUND(100*SUM(IF(TIMED = 'YES', 1, 0))/COUNT(*), 2) AS 'TimedPct' + FROM performance_schema.setup_instruments + GROUP BY SUBSTRING_INDEX(NAME, '/', 2) + ORDER BY SUBSTRING_INDEX(NAME, '/', 2); + SELECT 'Performance Schema Setup - Objects' AS 'The following output is:'; + SELECT * FROM performance_schema.setup_objects; + SELECT 'Performance Schema Setup - Threads' AS 'The following output is:'; + SELECT `TYPE` AS ThreadType, COUNT(*) AS 'Total', ROUND(100*SUM(IF(INSTRUMENTED = 'YES', 1, 0))/COUNT(*), 2) AS 'InstrumentedPct' + FROM performance_schema.threads + GROUP BY TYPE; + END IF; + IF (v_has_replication = 'NO') THEN + SELECT 'No Replication Configured' AS 'Replication Status'; + ELSE + -- No guarantee that replication is actually configured, but we can't really know + SELECT CONCAT('Replication Configured: ', v_has_replication, ' - Performance Schema Replication Tables: ', v_has_ps_replication) AS 'Replication Status'; + IF (v_has_ps_replication = 'YES') THEN + SELECT 'Replication - Connection Configuration' AS 'The following output is:'; + SELECT * FROM performance_schema.replication_connection_configuration ORDER BY CHANNEL_NAME; + END IF; + IF (v_has_ps_replication = 'YES') THEN + SELECT 'Replication - Applier Configuration' AS 'The following output is:'; + SELECT * FROM performance_schema.replication_applier_configuration ORDER BY CHANNEL_NAME; + END IF; + IF (@@master_info_repository = 'TABLE') THEN + SELECT 'Replication - Master Info Repository Configuration' AS 'The following output is:'; + -- Can't just do SELECT * as the password may be present in plain text + -- Don't include binary log file and position as that will be determined in each iteration as well + SELECT Channel_name, Host, User_name, Port, Connect_retry, + Enabled_ssl, Ssl_ca, Ssl_capath, Ssl_cert, Ssl_cipher, Ssl_key, Ssl_verify_server_cert, + Heartbeat, Bind, Ignored_server_ids, Uuid, Retry_count, Ssl_crl, Ssl_crlpath, + Tls_version, Enabled_auto_position + FROM mysql.slave_master_info ORDER BY Channel_name; + END IF; + IF (@@relay_log_info_repository = 'TABLE') THEN + SELECT 'Replication - Relay Log Repository Configuration' AS 'The following output is:'; + SELECT Channel_name, Sql_delay, Number_of_workers, Id + FROM mysql.slave_relay_log_info ORDER BY Channel_name; + END IF; + END IF; + IF (v_has_ndb IN ('DEFAULT', 'YES')) THEN + SELECT 'Cluster Thread Blocks' AS 'The following output is:'; + SELECT * FROM ndbinfo.threadblocks; + END IF; + -- For a number of sys views as well as events_statements_summary_by_digest, + -- just get the start data and then at the end output the overall and delta values + IF (v_has_ps = 'YES') THEN + IF (@sys.diagnostics.include_raw = 'ON') THEN + SELECT ' + +======================== + + Initial Status + +======================== + +' AS ''; + END IF; + DROP TEMPORARY TABLE IF EXISTS tmp_digests_start; + CALL sys.statement_performance_analyzer('create_tmp', 'tmp_digests_start', NULL); + CALL sys.statement_performance_analyzer('snapshot', NULL, NULL); + CALL sys.statement_performance_analyzer('save', 'tmp_digests_start', NULL); + -- Loop over the sys views where deltas should be calculated. + IF (@sys.diagnostics.include_raw = 'ON') THEN + SET @sys.diagnostics.sql = REPLACE(@sys.diagnostics.sql_gen_query_template, '%{OUTPUT}', 'start'); + IF (@sys.debug = 'ON') THEN + SELECT 'The following query will be used to generate the query for each sys view' AS 'Debug'; + SELECT @sys.diagnostics.sql AS 'Debug'; + END IF; + PREPARE stmt_gen_query FROM @sys.diagnostics.sql; + END IF; + SET v_done = FALSE; + OPEN c_sysviews_w_delta; + c_sysviews_w_delta_loop: LOOP + FETCH c_sysviews_w_delta INTO v_table_name; + IF v_done THEN + LEAVE c_sysviews_w_delta_loop; + END IF; + IF (@sys.debug = 'ON') THEN + SELECT CONCAT('The following queries are for storing the initial content of ', v_table_name) AS 'Debug'; + END IF; + CALL sys.execute_prepared_stmt(CONCAT('DROP TEMPORARY TABLE IF EXISTS `tmp_', v_table_name, '_start`')); + CALL sys.execute_prepared_stmt(CONCAT('CREATE TEMPORARY TABLE `tmp_', v_table_name, '_start` SELECT * FROM `sys`.`x$', v_table_name, '`')); + IF (@sys.diagnostics.include_raw = 'ON') THEN + SET @sys.diagnostics.table_name = CONCAT('x$', v_table_name); + EXECUTE stmt_gen_query USING @sys.diagnostics.table_name; + -- If necessary add ORDER BY and LIMIT + SELECT CONCAT(@sys.diagnostics.sql_select, + IF(order_by IS NOT NULL, CONCAT('\n ORDER BY ', REPLACE(order_by, '%{TABLE}', CONCAT('tmp_', v_table_name, '_start'))), ''), + IF(limit_rows IS NOT NULL, CONCAT('\n LIMIT ', limit_rows), '') + ) + INTO @sys.diagnostics.sql_select + FROM tmp_sys_views_delta + WHERE TABLE_NAME COLLATE utf8mb4_0900_as_ci = v_table_name; + SELECT CONCAT('Initial ', v_table_name) AS 'The following output is:'; + CALL sys.execute_prepared_stmt(@sys.diagnostics.sql_select); + END IF; + END LOOP; + CLOSE c_sysviews_w_delta; + IF (@sys.diagnostics.include_raw = 'ON') THEN + DEALLOCATE PREPARE stmt_gen_query; + END IF; + END IF; + -- If in_include_status_summary is TRUE then a temporary table is required to store the data + SET v_sql_status_summary_select = 'SELECT Variable_name', + v_sql_status_summary_delta = '', + v_sql_status_summary_from = ''; + -- Start the loop + REPEAT + SET v_output_count = v_output_count + 1; + IF (v_output_count > 1) THEN + -- Don't sleep on the first execution + SET v_sleep = in_interval-(UNIX_TIMESTAMP(NOW(2))-v_iter_start); + SELECT NOW() AS 'Time', CONCAT('Going to sleep for ', v_sleep, ' seconds. Please do not interrupt') AS 'The following output is:'; + DO SLEEP(in_interval); + END IF; + SET v_iter_start = UNIX_TIMESTAMP(NOW(2)); + SELECT NOW(), CONCAT('Iteration Number ', IFNULL(v_output_count, 'NULL')) AS 'The following output is:'; + -- Even in 5.7 there is no way to get all the info from SHOW MASTER|SLAVE STATUS using the Performance Schema or + -- other tables, so include them even though they are no longer optimal solutions and if present get the additional + -- information from the other tables available. + IF (@@log_bin = 1) THEN + SELECT 'SHOW MASTER STATUS' AS 'The following output is:'; + SHOW MASTER STATUS; + END IF; + IF (v_has_replication <> 'NO') THEN + SELECT 'SHOW SLAVE STATUS' AS 'The following output is:'; + SHOW SLAVE STATUS; + IF (v_has_ps_replication = 'YES') THEN + SELECT 'Replication Connection Status' AS 'The following output is:'; + SELECT * FROM performance_schema.replication_connection_status; + SELECT 'Replication Applier Status' AS 'The following output is:'; + SELECT * FROM performance_schema.replication_applier_status ORDER BY CHANNEL_NAME; + SELECT 'Replication Applier Status - Coordinator' AS 'The following output is:'; + SELECT * FROM performance_schema.replication_applier_status_by_coordinator ORDER BY CHANNEL_NAME; + SELECT 'Replication Applier Status - Worker' AS 'The following output is:'; + SELECT * FROM performance_schema.replication_applier_status_by_worker ORDER BY CHANNEL_NAME, WORKER_ID; + END IF; + IF (@@master_info_repository = 'TABLE') THEN + SELECT 'Replication - Master Log Status' AS 'The following output is:'; + SELECT Master_log_name, Master_log_pos FROM mysql.slave_master_info; + END IF; + IF (@@relay_log_info_repository = 'TABLE') THEN + SELECT 'Replication - Relay Log Status' AS 'The following output is:'; + SELECT sys.format_path(Relay_log_name) AS Relay_log_name, Relay_log_pos, Master_log_name, Master_log_pos FROM mysql.slave_relay_log_info; + SELECT 'Replication - Worker Status' AS 'The following output is:'; + SELECT Id, sys.format_path(Relay_log_name) AS Relay_log_name, Relay_log_pos, Master_log_name, Master_log_pos, + sys.format_path(Checkpoint_relay_log_name) AS Checkpoint_relay_log_name, Checkpoint_relay_log_pos, + Checkpoint_master_log_name, Checkpoint_master_log_pos, Checkpoint_seqno, Checkpoint_group_size, + HEX(Checkpoint_group_bitmap) AS Checkpoint_group_bitmap, Channel_name + FROM mysql.slave_worker_info + ORDER BY Channel_name, Id; + END IF; + END IF; + -- We need one table per output as a temporary table cannot be opened twice in the same query, and we need to + -- join the outputs in the summary at the end. + SET v_table_name = CONCAT('tmp_metrics_', v_output_count); + CALL sys.execute_prepared_stmt(CONCAT('DROP TEMPORARY TABLE IF EXISTS ', v_table_name)); + -- Currently information_schema.GLOBAL_STATUS has VARIABLE_VALUE as varchar(1024) + CALL sys.execute_prepared_stmt(CONCAT('CREATE TEMPORARY TABLE ', v_table_name, ' ( + Variable_name VARCHAR(193) NOT NULL, + Variable_value VARCHAR(1024), + Type VARCHAR(225) NOT NULL, + Enabled ENUM(''YES'', ''NO'', ''PARTIAL'') NOT NULL, + PRIMARY KEY (Type, Variable_name) +) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4')); + SET @sys.diagnostics.sql = CONCAT( + 'INSERT INTO ', v_table_name, + ' SELECT Variable_name, REPLACE(Variable_value, ''\n'', ''\\\\n'') AS Variable_value, Type, Enabled FROM sys.metrics' + ); + CALL sys.execute_prepared_stmt(@sys.diagnostics.sql); + -- Prepare the query to retrieve the summary + CALL sys.execute_prepared_stmt( + CONCAT('(SELECT Variable_value INTO @sys.diagnostics.output_time FROM ', v_table_name, ' WHERE Type = ''System Time'' AND Variable_name = ''UNIX_TIMESTAMP()'')') + ); + SET v_output_time = @sys.diagnostics.output_time; + -- Limit each value to v_status_summary_width chars (when v_has_ndb = TRUE the values can be very wide - refer to the output here for the full values) + -- v_sql_status_summary_select, v_sql_status_summary_delta, v_sql_status_summary_from + SET v_sql_status_summary_select = CONCAT(v_sql_status_summary_select, ', + CONCAT( + LEFT(s', v_output_count, '.Variable_value, ', v_status_summary_width, '), + IF(', REPLACE(v_no_delta_names, '%{COUNT}', v_output_count), ' AND s', v_output_count, '.Variable_value REGEXP ''^[0-9]+(\\\\.[0-9]+)?$'', CONCAT('' ('', ROUND(s', v_output_count, '.Variable_value/', v_output_time, ', 2), ''/sec)''), '''') + ) AS ''Output ', v_output_count, ''''), + v_sql_status_summary_from = CONCAT(v_sql_status_summary_from, ' +', + IF(v_output_count = 1, ' FROM ', ' INNER JOIN '), + v_table_name, ' s', v_output_count, + IF (v_output_count = 1, '', ' USING (Type, Variable_name)')); + IF (v_output_count > 1) THEN + SET v_sql_status_summary_delta = CONCAT(v_sql_status_summary_delta, ', + IF(', REPLACE(v_no_delta_names, '%{COUNT}', v_output_count), ' AND s', (v_output_count-1), '.Variable_value REGEXP ''^[0-9]+(\\\\.[0-9]+)?$'' AND s', v_output_count, '.Variable_value REGEXP ''^[0-9]+(\\\\.[0-9]+)?$'', + CONCAT(IF(s', (v_output_count-1), '.Variable_value REGEXP ''^[0-9]+\\\\.[0-9]+$'' OR s', v_output_count, '.Variable_value REGEXP ''^[0-9]+\\\\.[0-9]+$'', + ROUND((s', v_output_count, '.Variable_value-s', (v_output_count-1), '.Variable_value), 2), + (s', v_output_count, '.Variable_value-s', (v_output_count-1), '.Variable_value) + ), + '' ('', ROUND((s', v_output_count, '.Variable_value-s', (v_output_count-1), '.Variable_value)/(', v_output_time, '-', v_output_time_prev, '), 2), ''/sec)'' + ), + '''' + ) AS ''Delta (', (v_output_count-1), ' -> ', v_output_count, ')'''); + END IF; + SET v_output_time_prev = v_output_time; + IF (@sys.diagnostics.include_raw = 'ON') THEN + SELECT 'SELECT * FROM sys.metrics' AS 'The following output is:'; + -- Ensures that the output here is the same as the one used in the status summary at the end + CALL sys.execute_prepared_stmt(CONCAT('SELECT Type, Variable_name, Enabled, Variable_value FROM ', v_table_name, ' ORDER BY Type, Variable_name')); + END IF; + -- InnoDB + IF (v_has_innodb IN ('DEFAULT', 'YES')) THEN + SELECT 'SHOW ENGINE INNODB STATUS' AS 'The following output is:'; + EXECUTE stmt_innodb_status; + SELECT 'InnoDB - Transactions' AS 'The following output is:'; + SELECT * FROM information_schema.INNODB_TRX; + END IF; + -- NDBCluster + IF (v_has_ndb IN ('DEFAULT', 'YES')) THEN + SELECT 'SHOW ENGINE NDBCLUSTER STATUS' AS 'The following output is:'; + EXECUTE stmt_ndbcluster_status; + SELECT 'ndbinfo.memoryusage' AS 'The following output is:'; + SELECT node_id, memory_type, format_bytes(used) AS used, used_pages, format_bytes(total) AS total, total_pages, + ROUND(100*(used/total), 2) AS 'Used %' + FROM ndbinfo.memoryusage; + -- Loop over the ndbinfo tables (except memoryusage which was handled separately above). + -- The exact tables available are version dependent, so get the list from the Information Schema. + SET v_done = FALSE; + OPEN c_ndbinfo; + c_ndbinfo_loop: LOOP + FETCH c_ndbinfo INTO v_table_name; + IF v_done THEN + LEAVE c_ndbinfo_loop; + END IF; + SELECT CONCAT('SELECT * FROM ndbinfo.', v_table_name) AS 'The following output is:'; + CALL sys.execute_prepared_stmt(CONCAT('SELECT * FROM `ndbinfo`.`', v_table_name, '`')); + END LOOP; + CLOSE c_ndbinfo; + SELECT * FROM information_schema.FILES; + END IF; + SELECT 'SELECT * FROM sys.processlist' AS 'The following output is:'; + SELECT processlist.* FROM sys.processlist; + IF (v_has_ps = 'YES') THEN + -- latest_file_io + IF (sys.ps_is_consumer_enabled('events_waits_history_long') = 'YES') THEN + SELECT 'SELECT * FROM sys.latest_file_io' AS 'The following output is:'; + SELECT * FROM sys.latest_file_io; + END IF; + -- current memory usage + IF (EXISTS(SELECT 1 FROM performance_schema.setup_instruments WHERE NAME LIKE 'memory/%' AND ENABLED = 'YES')) THEN + SELECT 'SELECT * FROM sys.memory_by_host_by_current_bytes' AS 'The following output is:'; + SELECT * FROM sys.memory_by_host_by_current_bytes; + SELECT 'SELECT * FROM sys.memory_by_thread_by_current_bytes' AS 'The following output is:'; + SELECT * FROM sys.memory_by_thread_by_current_bytes; + SELECT 'SELECT * FROM sys.memory_by_user_by_current_bytes' AS 'The following output is:'; + SELECT * FROM sys.memory_by_user_by_current_bytes; + SELECT 'SELECT * FROM sys.memory_global_by_current_bytes' AS 'The following output is:'; + SELECT * FROM sys.memory_global_by_current_bytes; + END IF; + END IF; + SET v_runtime = (UNIX_TIMESTAMP(NOW(2)) - v_start); + UNTIL (v_runtime + in_interval >= in_max_runtime) END REPEAT; + -- Get Performance Schema status + IF (v_has_ps = 'YES') THEN + SELECT 'SHOW ENGINE PERFORMANCE_SCHEMA STATUS' AS 'The following output is:'; + EXECUTE stmt_ps_status; + END IF; + -- Deallocate prepared statements + IF (v_has_innodb IN ('DEFAULT', 'YES')) THEN + DEALLOCATE PREPARE stmt_innodb_status; + END IF; + IF (v_has_ps = 'YES') THEN + DEALLOCATE PREPARE stmt_ps_status; + END IF; + IF (v_has_ndb IN ('DEFAULT', 'YES')) THEN + DEALLOCATE PREPARE stmt_ndbcluster_status; + END IF; + SELECT ' + +============================ + + Schema Information + +============================ + +' AS ''; + SELECT COUNT(*) AS 'Total Number of Tables' FROM information_schema.TABLES; + -- The cost of information_schema.TABLES.DATA_LENGTH depends mostly on the number of tables + IF (@sys.diagnostics.allow_i_s_tables = 'ON') THEN + SELECT 'Storage Engine Usage' AS 'The following output is:'; + SELECT ENGINE, COUNT(*) AS NUM_TABLES, + format_bytes(SUM(DATA_LENGTH)) AS DATA_LENGTH, + format_bytes(SUM(INDEX_LENGTH)) AS INDEX_LENGTH, + format_bytes(SUM(DATA_LENGTH+INDEX_LENGTH)) AS TOTAL + FROM information_schema.TABLES + GROUP BY ENGINE; + SELECT 'Schema Object Overview' AS 'The following output is:'; + SELECT * FROM sys.schema_object_overview; + SELECT 'Tables without a PRIMARY KEY' AS 'The following output is:'; + SELECT TABLES.TABLE_SCHEMA, ENGINE, COUNT(*) AS NumTables + FROM information_schema.TABLES + LEFT OUTER JOIN information_schema.STATISTICS ON STATISTICS.TABLE_SCHEMA = TABLES.TABLE_SCHEMA + AND STATISTICS.TABLE_NAME = TABLES.TABLE_NAME + AND STATISTICS.INDEX_NAME = 'PRIMARY' + WHERE STATISTICS.TABLE_NAME IS NULL + AND TABLES.TABLE_SCHEMA NOT IN ('mysql', 'information_schema', 'performance_schema', 'sys') + AND TABLES.TABLE_TYPE = 'BASE TABLE' + GROUP BY TABLES.TABLE_SCHEMA, ENGINE; + END IF; + IF (v_has_ps = 'YES') THEN + SELECT 'Unused Indexes' AS 'The following output is:'; + SELECT object_schema, COUNT(*) AS NumUnusedIndexes + FROM performance_schema.table_io_waits_summary_by_index_usage + WHERE index_name IS NOT NULL + AND count_star = 0 + AND object_schema NOT IN ('mysql', 'sys') + AND index_name != 'PRIMARY' + GROUP BY object_schema; + END IF; + IF (v_has_ps = 'YES') THEN + SELECT ' + +========================= + + Overall Status + +========================= + +' AS ''; + SELECT 'CALL sys.ps_statement_avg_latency_histogram()' AS 'The following output is:'; + CALL sys.ps_statement_avg_latency_histogram(); + CALL sys.statement_performance_analyzer('snapshot', NULL, NULL); + CALL sys.statement_performance_analyzer('overall', NULL, 'with_runtimes_in_95th_percentile'); + SET @sys.diagnostics.sql = REPLACE(@sys.diagnostics.sql_gen_query_template, '%{OUTPUT}', 'end'); + IF (@sys.debug = 'ON') THEN + SELECT 'The following query will be used to generate the query for each sys view' AS 'Debug'; + SELECT @sys.diagnostics.sql AS 'Debug'; + END IF; + PREPARE stmt_gen_query FROM @sys.diagnostics.sql; + SET v_done = FALSE; + OPEN c_sysviews_w_delta; + c_sysviews_w_delta_loop: LOOP + FETCH c_sysviews_w_delta INTO v_table_name; + IF v_done THEN + LEAVE c_sysviews_w_delta_loop; + END IF; + IF (@sys.debug = 'ON') THEN + SELECT CONCAT('The following queries are for storing the final content of ', v_table_name) AS 'Debug'; + END IF; + CALL sys.execute_prepared_stmt(CONCAT('DROP TEMPORARY TABLE IF EXISTS `tmp_', v_table_name, '_end`')); + CALL sys.execute_prepared_stmt(CONCAT('CREATE TEMPORARY TABLE `tmp_', v_table_name, '_end` SELECT * FROM `sys`.`x$', v_table_name, '`')); + SET @sys.diagnostics.table_name = CONCAT('x$', v_table_name); + EXECUTE stmt_gen_query USING @sys.diagnostics.table_name; + -- If necessary add ORDER BY and LIMIT + SELECT CONCAT(@sys.diagnostics.sql_select, + IF(order_by IS NOT NULL, CONCAT('\n ORDER BY ', REPLACE(order_by, '%{TABLE}', CONCAT('tmp_', v_table_name, '_end'))), ''), + IF(limit_rows IS NOT NULL, CONCAT('\n LIMIT ', limit_rows), '') + ) + INTO @sys.diagnostics.sql_select + FROM tmp_sys_views_delta + WHERE TABLE_NAME COLLATE utf8mb4_0900_as_ci = v_table_name; + SELECT CONCAT('Overall ', v_table_name) AS 'The following output is:'; + CALL sys.execute_prepared_stmt(@sys.diagnostics.sql_select); + END LOOP; + CLOSE c_sysviews_w_delta; + DEALLOCATE PREPARE stmt_gen_query; + SELECT ' + +====================== + + Delta Status + +====================== + +' AS ''; + CALL sys.statement_performance_analyzer('delta', 'tmp_digests_start', 'with_runtimes_in_95th_percentile'); + CALL sys.statement_performance_analyzer('cleanup', NULL, NULL); + DROP TEMPORARY TABLE tmp_digests_start; + -- @sys.diagnostics.sql_gen_query_delta is defined near the to together with @sys.diagnostics.sql_gen_query_template + IF (@sys.debug = 'ON') THEN + SELECT 'The following query will be used to generate the query for each sys view delta' AS 'Debug'; + SELECT @sys.diagnostics.sql_gen_query_delta AS 'Debug'; + END IF; + PREPARE stmt_gen_query_delta FROM @sys.diagnostics.sql_gen_query_delta; + SET v_old_group_concat_max_len = @@session.group_concat_max_len; + SET @@session.group_concat_max_len = 2048; + SET v_done = FALSE; + OPEN c_sysviews_w_delta; + c_sysviews_w_delta_loop: LOOP + FETCH c_sysviews_w_delta INTO v_table_name; + IF v_done THEN + LEAVE c_sysviews_w_delta_loop; + END IF; + SET @sys.diagnostics.table_name = v_table_name; + EXECUTE stmt_gen_query_delta USING @sys.diagnostics.table_name; + -- If necessary add WHERE, ORDER BY, and LIMIT + SELECT CONCAT(@sys.diagnostics.sql_select, + IF(where_delta IS NOT NULL, CONCAT('\n WHERE ', where_delta), ''), + IF(order_by_delta IS NOT NULL, CONCAT('\n ORDER BY ', order_by_delta), ''), + IF(limit_rows IS NOT NULL, CONCAT('\n LIMIT ', limit_rows), '') + ) + INTO @sys.diagnostics.sql_select + FROM tmp_sys_views_delta + WHERE TABLE_NAME COLLATE utf8mb4_0900_as_ci = v_table_name; + SELECT CONCAT('Delta ', v_table_name) AS 'The following output is:'; + CALL sys.execute_prepared_stmt(@sys.diagnostics.sql_select); + CALL sys.execute_prepared_stmt(CONCAT('DROP TEMPORARY TABLE `tmp_', v_table_name, '_end`')); + CALL sys.execute_prepared_stmt(CONCAT('DROP TEMPORARY TABLE `tmp_', v_table_name, '_start`')); + END LOOP; + CLOSE c_sysviews_w_delta; + SET @@session.group_concat_max_len = v_old_group_concat_max_len; + DEALLOCATE PREPARE stmt_gen_query_delta; + DROP TEMPORARY TABLE tmp_sys_views_delta; + END IF; + SELECT 'SELECT * FROM sys.metrics' AS 'The following output is:'; + CALL sys.execute_prepared_stmt( + CONCAT(v_sql_status_summary_select, v_sql_status_summary_delta, ', Type, s1.Enabled', v_sql_status_summary_from, + ' + ORDER BY Type, Variable_name' + ) + ); + -- Remove all the metrics temporary tables again + SET v_count = 0; + WHILE (v_count < v_output_count) DO + SET v_count = v_count + 1; + SET v_table_name = CONCAT('tmp_metrics_', v_count); + CALL sys.execute_prepared_stmt(CONCAT('DROP TEMPORARY TABLE IF EXISTS ', v_table_name)); + END WHILE; + IF (in_auto_config <> 'current') THEN + CALL sys.ps_setup_reload_saved(); + IF ((@log_bin = 1) AND (@@binlog_format = 'STATEMENT')) THEN + SET sql_log_bin = @log_bin; + END IF; + END IF; + -- Reset the @sys.diagnostics.% user variables internal to this procedure + SET @sys.diagnostics.output_time = NULL, + @sys.diagnostics.sql = NULL, + @sys.diagnostics.sql_gen_query_delta = NULL, + @sys.diagnostics.sql_gen_query_template = NULL, + @sys.diagnostics.sql_select = NULL, + @sys.diagnostics.table_name = NULL; + -- Restore INSTRUMENTED for this thread + IF (v_this_thread_enabled = 'YES') THEN + CALL sys.ps_setup_enable_thread(CONNECTION_ID()); + END IF; + IF ((@log_bin = 1) AND (@@binlog_format = 'STATEMENT')) THEN + SET sql_log_bin = @log_bin; + END IF; +END; + diff --git a/IDEA/sys/execute_prepared_stmt.sql b/IDEA/sys/execute_prepared_stmt.sql new file mode 100644 index 00000000..c8922be8 --- /dev/null +++ b/IDEA/sys/execute_prepared_stmt.sql @@ -0,0 +1,60 @@ +create + definer = `mysql.sys`@localhost procedure sys.execute_prepared_stmt(IN in_query longtext) comment ' +Description +----------- + +Takes the query in the argument and executes it using a prepared statement. The prepared statement is deallocated, +so the procedure is mainly useful for executing one off dynamically created queries. + +The sys_execute_prepared_stmt prepared statement name is used for the query and is required not to exist. + + +Parameters +----------- + +in_query (longtext CHARACTER SET UTF8MB4): + The query to execute. + + +Configuration Options +---------------------- + +sys.debug + Whether to provide debugging output. + Default is ''OFF''. Set to ''ON'' to include. + + +Example +-------- + +mysql> CALL sys.execute_prepared_stmt(''SELECT * FROM sys.sys_config''); ++------------------------+-------+---------------------+--------+ +| variable | value | set_time | set_by | ++------------------------+-------+---------------------+--------+ +| statement_truncate_len | 64 | 2015-06-30 13:06:00 | NULL | ++------------------------+-------+---------------------+--------+ +1 row in set (0.00 sec) + +Query OK, 0 rows affected (0.00 sec) +' sql security invoker reads sql data +BEGIN + -- Set configuration options + IF (@sys.debug IS NULL) THEN + SET @sys.debug = sys.sys_get_config('debug', 'OFF'); + END IF; + -- Verify the query exists + -- The shortest possible query is "DO 1" + IF (in_query IS NULL OR LENGTH(in_query) < 4) THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = "The @sys.execute_prepared_stmt.sql must contain a query"; + END IF; + SET @sys.execute_prepared_stmt.sql = in_query; + IF (@sys.debug = 'ON') THEN + SELECT @sys.execute_prepared_stmt.sql AS 'Debug'; + END IF; + PREPARE sys_execute_prepared_stmt FROM @sys.execute_prepared_stmt.sql; + EXECUTE sys_execute_prepared_stmt; + DEALLOCATE PREPARE sys_execute_prepared_stmt; + SET @sys.execute_prepared_stmt.sql = NULL; +END; + diff --git a/IDEA/sys/extract_schema_from_file_name.sql b/IDEA/sys/extract_schema_from_file_name.sql new file mode 100644 index 00000000..24b72739 --- /dev/null +++ b/IDEA/sys/extract_schema_from_file_name.sql @@ -0,0 +1,44 @@ +create + definer = `mysql.sys`@localhost function sys.extract_schema_from_file_name(path varchar(512)) returns varchar(64) + comment ' +Description +----------- + +Takes a raw file path, and attempts to extract the schema name from it. + +Useful for when interacting with Performance Schema data +concerning IO statistics, for example. + +Currently relies on the fact that a table data file will be within a +specified database directory (will not work with partitions or tables +that specify an individual DATA_DIRECTORY). + +Parameters +----------- + +path (VARCHAR(512)): + The full file path to a data file to extract the schema name from. + +Returns +----------- + +VARCHAR(64) + +Example +----------- + +mysql> SELECT sys.extract_schema_from_file_name(''/var/lib/mysql/employees/employee.ibd''); ++----------------------------------------------------------------------------+ +| sys.extract_schema_from_file_name(''/var/lib/mysql/employees/employee.ibd'') | ++----------------------------------------------------------------------------+ +| employees | ++----------------------------------------------------------------------------+ +1 row in set (0.00 sec) +' + deterministic + sql security invoker + no sql +BEGIN + RETURN LEFT(SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(path, '\\', '/'), '/', -2), '/', 1), 64); +END; + diff --git a/IDEA/sys/extract_table_from_file_name.sql b/IDEA/sys/extract_table_from_file_name.sql new file mode 100644 index 00000000..25645e40 --- /dev/null +++ b/IDEA/sys/extract_table_from_file_name.sql @@ -0,0 +1,40 @@ +create + definer = `mysql.sys`@localhost function sys.extract_table_from_file_name(path varchar(512)) returns varchar(64) + comment ' +Description +----------- + +Takes a raw file path, and extracts the table name from it. + +Useful for when interacting with Performance Schema data +concerning IO statistics, for example. + +Parameters +----------- + +path (VARCHAR(512)): + The full file path to a data file to extract the table name from. + +Returns +----------- + +VARCHAR(64) + +Example +----------- + +mysql> SELECT sys.extract_table_from_file_name(''/var/lib/mysql/employees/employee.ibd''); ++---------------------------------------------------------------------------+ +| sys.extract_table_from_file_name(''/var/lib/mysql/employees/employee.ibd'') | ++---------------------------------------------------------------------------+ +| employee | ++---------------------------------------------------------------------------+ +1 row in set (0.02 sec) +' + deterministic + sql security invoker + no sql +BEGIN + RETURN LEFT(SUBSTRING_INDEX(REPLACE(SUBSTRING_INDEX(REPLACE(path, '\\', '/'), '/', -1), '@0024', '$'), '.', 1), 64); +END; + diff --git a/IDEA/sys/format_bytes.sql b/IDEA/sys/format_bytes.sql new file mode 100644 index 00000000..eeed6db2 --- /dev/null +++ b/IDEA/sys/format_bytes.sql @@ -0,0 +1,53 @@ +create + definer = `mysql.sys`@localhost function sys.format_bytes(bytes text) returns text comment ' +Description +----------- + +Takes a raw bytes value, and converts it to a human readable format. + +Parameters +----------- + +bytes (TEXT): + A raw bytes value. + +Returns +----------- + +TEXT + +Example +----------- + +mysql> SELECT sys.format_bytes(2348723492723746) AS size; ++----------+ +| size | ++----------+ +| 2.09 PiB | ++----------+ +1 row in set (0.00 sec) + +mysql> SELECT sys.format_bytes(2348723492723) AS size; ++----------+ +| size | ++----------+ +| 2.14 TiB | ++----------+ +1 row in set (0.00 sec) + +mysql> SELECT sys.format_bytes(23487234) AS size; ++-----------+ +| size | ++-----------+ +| 22.40 MiB | ++-----------+ +1 row in set (0.00 sec) +' deterministic sql security invoker no sql +BEGIN + IF (bytes IS NULL) THEN + RETURN NULL; + ELSE + RETURN format_bytes(bytes); + END IF; +END; + diff --git a/IDEA/sys/format_path.sql b/IDEA/sys/format_path.sql new file mode 100644 index 00000000..e6c3024d --- /dev/null +++ b/IDEA/sys/format_path.sql @@ -0,0 +1,76 @@ +create + definer = `mysql.sys`@localhost function sys.format_path(in_path varchar(512)) returns varchar(512) comment ' +Description +----------- + +Takes a raw path value, and strips out the datadir or tmpdir +replacing with @@datadir and @@tmpdir respectively. + +Also normalizes the paths across operating systems, so backslashes +on Windows are converted to forward slashes + +Parameters +----------- + +path (VARCHAR(512)): + The raw file path value to format. + +Returns +----------- + +VARCHAR(512) CHARSET UTF8MB4 + +Example +----------- + +mysql> select @@datadir; ++-----------------------------------------------+ +| @@datadir | ++-----------------------------------------------+ +| /Users/mark/sandboxes/SmallTree/AMaster/data/ | ++-----------------------------------------------+ +1 row in set (0.06 sec) + +mysql> select format_path(''/Users/mark/sandboxes/SmallTree/AMaster/data/mysql/proc.MYD'') AS path; ++--------------------------+ +| path | ++--------------------------+ +| @@datadir/mysql/proc.MYD | ++--------------------------+ +1 row in set (0.03 sec) +' deterministic sql security invoker no sql +BEGIN + DECLARE v_path VARCHAR(512); + DECLARE v_undo_dir VARCHAR(1024); + DECLARE path_separator CHAR(1) DEFAULT '/'; + IF @@global.version_compile_os LIKE 'win%' THEN + SET path_separator = '\\'; + END IF; + -- OSX hides /private/ in variables, but Performance Schema does not + IF in_path LIKE '/private/%' THEN + SET v_path = REPLACE(in_path, '/private', ''); + ELSE + SET v_path = in_path; + END IF; + -- @@global.innodb_undo_directory is only set when separate undo logs are used + SET v_undo_dir = IFNULL((SELECT VARIABLE_VALUE FROM performance_schema.global_variables WHERE VARIABLE_NAME = 'innodb_undo_directory'), ''); + IF v_path IS NULL THEN + RETURN NULL; + ELSEIF v_path LIKE CONCAT(@@global.datadir, IF(SUBSTRING(@@global.datadir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN + SET v_path = REPLACE(v_path, @@global.datadir, CONCAT('@@datadir', IF(SUBSTRING(@@global.datadir, -1) = path_separator, path_separator, ''))); + ELSEIF v_path LIKE CONCAT(@@global.tmpdir, IF(SUBSTRING(@@global.tmpdir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN + SET v_path = REPLACE(v_path, @@global.tmpdir, CONCAT('@@tmpdir', IF(SUBSTRING(@@global.tmpdir, -1) = path_separator, path_separator, ''))); + ELSEIF v_path LIKE CONCAT(@@global.replica_load_tmpdir, IF(SUBSTRING(@@global.replica_load_tmpdir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN + SET v_path = REPLACE(v_path, @@global.replica_load_tmpdir, CONCAT('@@replica_load_tmpdir', IF(SUBSTRING(@@global.replica_load_tmpdir, -1) = path_separator, path_separator, ''))); + ELSEIF v_path LIKE CONCAT(@@global.innodb_data_home_dir, IF(SUBSTRING(@@global.innodb_data_home_dir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN + SET v_path = REPLACE(v_path, @@global.innodb_data_home_dir, CONCAT('@@innodb_data_home_dir', IF(SUBSTRING(@@global.innodb_data_home_dir, -1) = path_separator, path_separator, ''))); + ELSEIF v_path LIKE CONCAT(@@global.innodb_log_group_home_dir, IF(SUBSTRING(@@global.innodb_log_group_home_dir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN + SET v_path = REPLACE(v_path, @@global.innodb_log_group_home_dir, CONCAT('@@innodb_log_group_home_dir', IF(SUBSTRING(@@global.innodb_log_group_home_dir, -1) = path_separator, path_separator, ''))); + ELSEIF v_path LIKE CONCAT(v_undo_dir, IF(SUBSTRING(v_undo_dir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN + SET v_path = REPLACE(v_path, v_undo_dir, CONCAT('@@innodb_undo_directory', IF(SUBSTRING(v_undo_dir, -1) = path_separator, path_separator, ''))); + ELSEIF v_path LIKE CONCAT(@@global.basedir, IF(SUBSTRING(@@global.basedir, -1) = path_separator, '%', CONCAT(path_separator, '%'))) ESCAPE '|' THEN + SET v_path = REPLACE(v_path, @@global.basedir, CONCAT('@@basedir', IF(SUBSTRING(@@global.basedir, -1) = path_separator, path_separator, ''))); + END IF; + RETURN v_path; +END; + diff --git a/IDEA/sys/format_statement.sql b/IDEA/sys/format_statement.sql new file mode 100644 index 00000000..e3166409 --- /dev/null +++ b/IDEA/sys/format_statement.sql @@ -0,0 +1,54 @@ +create + definer = `mysql.sys`@localhost function sys.format_statement(statement longtext) returns longtext comment ' +Description +----------- + +Formats a normalized statement, truncating it if it is > 64 characters long by default. + +To configure the length to truncate the statement to by default, update the `statement_truncate_len` +variable with `sys_config` table to a different value. Alternatively, to change it just for just +your particular session, use `SET @sys.statement_truncate_len := `. + +Useful for printing statement related data from Performance Schema from +the command line. + +Parameters +----------- + +statement (LONGTEXT): + The statement to format. + +Returns +----------- + +LONGTEXT + +Example +----------- + +mysql> SELECT sys.format_statement(digest_text) + -> FROM performance_schema.events_statements_summary_by_digest + -> ORDER by sum_timer_wait DESC limit 5; ++-------------------------------------------------------------------+ +| sys.format_statement(digest_text) | ++-------------------------------------------------------------------+ +| CREATE SQL SECURITY INVOKER VI ... KE ? AND `variable_value` > ? | +| CREATE SQL SECURITY INVOKER VI ... ait` IS NOT NULL , `esc` . ... | +| CREATE SQL SECURITY INVOKER VI ... ait` IS NOT NULL , `sys` . ... | +| CREATE SQL SECURITY INVOKER VI ... , `compressed_size` ) ) DESC | +| CREATE SQL SECURITY INVOKER VI ... LIKE ? ORDER BY `timer_start` | ++-------------------------------------------------------------------+ +5 rows in set (0.00 sec) +' deterministic sql security invoker no sql +BEGIN + -- Check if we have the configured length, if not, init it + IF @sys.statement_truncate_len IS NULL THEN + SET @sys.statement_truncate_len = sys_get_config('statement_truncate_len', 64); + END IF; + IF CHAR_LENGTH(statement) > @sys.statement_truncate_len THEN + RETURN REPLACE(CONCAT(LEFT(statement, (@sys.statement_truncate_len/2)-2), ' ... ', RIGHT(statement, (@sys.statement_truncate_len/2)-2)), '\n', ' '); + ELSE + RETURN REPLACE(statement, '\n', ' '); + END IF; +END; + diff --git a/IDEA/sys/format_time.sql b/IDEA/sys/format_time.sql new file mode 100644 index 00000000..1c5c1a8b --- /dev/null +++ b/IDEA/sys/format_time.sql @@ -0,0 +1,63 @@ +create + definer = `mysql.sys`@localhost function sys.format_time(picoseconds text) returns text comment ' +Description +----------- + +Takes a raw picoseconds value, and converts it to a human readable form. + +Picoseconds are the precision that all latency values are printed in +within Performance Schema, however are not user friendly when wanting +to scan output from the command line. + +Parameters +----------- + +picoseconds (TEXT): + The raw picoseconds value to convert. + +Returns +----------- + +TEXT CHARSET UTF8MB4 + +Example +----------- + +mysql> select format_time(342342342342345); ++------------------------------+ +| format_time(342342342342345) | ++------------------------------+ +| 00:05:42 | ++------------------------------+ +1 row in set (0.00 sec) + +mysql> select format_time(342342342); ++------------------------+ +| format_time(342342342) | ++------------------------+ +| 342.34 us | ++------------------------+ +1 row in set (0.00 sec) + +mysql> select format_time(34234); ++--------------------+ +| format_time(34234) | ++--------------------+ +| 34.23 ns | ++--------------------+ +1 row in set (0.00 sec) +' deterministic sql security invoker no sql +BEGIN + IF picoseconds IS NULL THEN RETURN NULL; + ELSEIF picoseconds >= 604800000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 604800000000000000, 2), ' w'); + ELSEIF picoseconds >= 86400000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 86400000000000000, 2), ' d'); + ELSEIF picoseconds >= 3600000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 3600000000000000, 2), ' h'); + ELSEIF picoseconds >= 60000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 60000000000000, 2), ' m'); + ELSEIF picoseconds >= 1000000000000 THEN RETURN CONCAT(ROUND(picoseconds / 1000000000000, 2), ' s'); + ELSEIF picoseconds >= 1000000000 THEN RETURN CONCAT(ROUND(picoseconds / 1000000000, 2), ' ms'); + ELSEIF picoseconds >= 1000000 THEN RETURN CONCAT(ROUND(picoseconds / 1000000, 2), ' us'); + ELSEIF picoseconds >= 1000 THEN RETURN CONCAT(ROUND(picoseconds / 1000, 2), ' ns'); + ELSE RETURN CONCAT(picoseconds, ' ps'); + END IF; +END; + diff --git a/IDEA/sys/host_summary.sql b/IDEA/sys/host_summary.sql new file mode 100644 index 00000000..0068371a --- /dev/null +++ b/IDEA/sys/host_summary.sql @@ -0,0 +1,21 @@ +create definer = `mysql.sys`@localhost view sys.host_summary as +select if((`performance_schema`.`accounts`.`HOST` is null), 'background', + `performance_schema`.`accounts`.`HOST`) AS `host`, + sum(`sys`.`stmt`.`total`) AS `statements`, + format_pico_time(sum(`sys`.`stmt`.`total_latency`)) AS `statement_latency`, + format_pico_time(ifnull((sum(`sys`.`stmt`.`total_latency`) / nullif(sum(`sys`.`stmt`.`total`), 0)), + 0)) AS `statement_avg_latency`, + sum(`sys`.`stmt`.`full_scans`) AS `table_scans`, + sum(`sys`.`io`.`ios`) AS `file_ios`, + format_pico_time(sum(`sys`.`io`.`io_latency`)) AS `file_io_latency`, + sum(`performance_schema`.`accounts`.`CURRENT_CONNECTIONS`) AS `current_connections`, + sum(`performance_schema`.`accounts`.`TOTAL_CONNECTIONS`) AS `total_connections`, + count(distinct `performance_schema`.`accounts`.`USER`) AS `unique_users`, + format_bytes(sum(`sys`.`mem`.`current_allocated`)) AS `current_memory`, + format_bytes(sum(`sys`.`mem`.`total_allocated`)) AS `total_memory_allocated` +from (((`performance_schema`.`accounts` join `sys`.`x$host_summary_by_statement_latency` `stmt` + on ((`performance_schema`.`accounts`.`HOST` = `sys`.`stmt`.`host`))) join `sys`.`x$host_summary_by_file_io` `io` + on ((`performance_schema`.`accounts`.`HOST` = `sys`.`io`.`host`))) join `sys`.`x$memory_by_host_by_current_bytes` `mem` + on ((`performance_schema`.`accounts`.`HOST` = `sys`.`mem`.`host`))) +group by if((`performance_schema`.`accounts`.`HOST` is null), 'background', `performance_schema`.`accounts`.`HOST`); + diff --git a/IDEA/sys/host_summary_by_file_io.sql b/IDEA/sys/host_summary_by_file_io.sql new file mode 100644 index 00000000..b3294885 --- /dev/null +++ b/IDEA/sys/host_summary_by_file_io.sql @@ -0,0 +1,11 @@ +create definer = `mysql.sys`@localhost view sys.host_summary_by_file_io as +select if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`) AS `host`, + sum(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`COUNT_STAR`) AS `ios`, + format_pico_time(sum(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`)) AS `io_latency` +from `performance_schema`.`events_waits_summary_by_host_by_event_name` +where (`performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') +group by if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`) +order by sum(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/host_summary_by_file_io_type.sql b/IDEA/sys/host_summary_by_file_io_type.sql new file mode 100644 index 00000000..88c23f66 --- /dev/null +++ b/IDEA/sys/host_summary_by_file_io_type.sql @@ -0,0 +1,14 @@ +create definer = `mysql.sys`@localhost view sys.host_summary_by_file_io_type as +select if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`) AS `host`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency` +from `performance_schema`.`events_waits_summary_by_host_by_event_name` +where ((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` like 'wait/io/file%') and + (`performance_schema`.`events_waits_summary_by_host_by_event_name`.`COUNT_STAR` > 0)) +order by if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`), + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/host_summary_by_stages.sql b/IDEA/sys/host_summary_by_stages.sql new file mode 100644 index 00000000..6db1fa2b --- /dev/null +++ b/IDEA/sys/host_summary_by_stages.sql @@ -0,0 +1,13 @@ +create definer = `mysql.sys`@localhost view sys.host_summary_by_stages as +select if((`performance_schema`.`events_stages_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`HOST`) AS `host`, + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`events_stages_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`events_stages_summary_by_host_by_event_name`.`AVG_TIMER_WAIT`) AS `avg_latency` +from `performance_schema`.`events_stages_summary_by_host_by_event_name` +where (`performance_schema`.`events_stages_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` <> 0) +order by if((`performance_schema`.`events_stages_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`HOST`), + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/host_summary_by_statement_latency.sql b/IDEA/sys/host_summary_by_statement_latency.sql new file mode 100644 index 00000000..7f08928f --- /dev/null +++ b/IDEA/sys/host_summary_by_statement_latency.sql @@ -0,0 +1,18 @@ +create definer = `mysql.sys`@localhost view sys.host_summary_by_statement_latency as +select if((`performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST`) AS `host`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`COUNT_STAR`) AS `total`, + format_pico_time(sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`)) AS `total_latency`, + format_pico_time(max(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`MAX_TIMER_WAIT`)) AS `max_latency`, + format_pico_time(sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_LOCK_TIME`)) AS `lock_latency`, + format_pico_time(sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_CPU_TIME`)) AS `cpu_latency`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_SENT`) AS `rows_sent`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_EXAMINED`) AS `rows_examined`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_AFFECTED`) AS `rows_affected`, + (sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_NO_INDEX_USED`) + + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_NO_GOOD_INDEX_USED`)) AS `full_scans` +from `performance_schema`.`events_statements_summary_by_host_by_event_name` +group by if((`performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST`) +order by sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/host_summary_by_statement_type.sql b/IDEA/sys/host_summary_by_statement_type.sql new file mode 100644 index 00000000..553c0691 --- /dev/null +++ b/IDEA/sys/host_summary_by_statement_type.sql @@ -0,0 +1,21 @@ +create definer = `mysql.sys`@localhost view sys.host_summary_by_statement_type as +select if((`performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST`) AS `host`, + substring_index(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`EVENT_NAME`, '/', + -(1)) AS `statement`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_LOCK_TIME`) AS `lock_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_CPU_TIME`) AS `cpu_latency`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_SENT` AS `rows_sent`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_AFFECTED` AS `rows_affected`, + (`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_NO_INDEX_USED` + + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_NO_GOOD_INDEX_USED`) AS `full_scans` +from `performance_schema`.`events_statements_summary_by_host_by_event_name` +where (`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` <> 0) +order by if((`performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST`), + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/innodb_buffer_stats_by_schema.sql b/IDEA/sys/innodb_buffer_stats_by_schema.sql new file mode 100644 index 00000000..256ad276 --- /dev/null +++ b/IDEA/sys/innodb_buffer_stats_by_schema.sql @@ -0,0 +1,14 @@ +create definer = `mysql.sys`@localhost view sys.innodb_buffer_stats_by_schema as +select if((locate('.', `ibp`.`TABLE_NAME`) = 0), 'InnoDB System', + replace(substring_index(`ibp`.`TABLE_NAME`, '.', 1), '`', '')) AS `object_schema`, + format_bytes(sum(if((`ibp`.`COMPRESSED_SIZE` = 0), 16384, `ibp`.`COMPRESSED_SIZE`))) AS `allocated`, + format_bytes(sum(`ibp`.`DATA_SIZE`)) AS `data`, + count(`ibp`.`PAGE_NUMBER`) AS `pages`, + count(if((`ibp`.`IS_HASHED` = 'YES'), 1, NULL)) AS `pages_hashed`, + count(if((`ibp`.`IS_OLD` = 'YES'), 1, NULL)) AS `pages_old`, + round((sum(`ibp`.`NUMBER_RECORDS`) / count(distinct `ibp`.`INDEX_NAME`)), 0) AS `rows_cached` +from `information_schema`.`INNODB_BUFFER_PAGE` `ibp` +where (`ibp`.`TABLE_NAME` is not null) +group by `object_schema` +order by sum(if((`ibp`.`COMPRESSED_SIZE` = 0), 16384, `ibp`.`COMPRESSED_SIZE`)) desc; + diff --git a/IDEA/sys/innodb_buffer_stats_by_table.sql b/IDEA/sys/innodb_buffer_stats_by_table.sql new file mode 100644 index 00000000..cc8ecf39 --- /dev/null +++ b/IDEA/sys/innodb_buffer_stats_by_table.sql @@ -0,0 +1,15 @@ +create definer = `mysql.sys`@localhost view sys.innodb_buffer_stats_by_table as +select if((locate('.', `ibp`.`TABLE_NAME`) = 0), 'InnoDB System', + replace(substring_index(`ibp`.`TABLE_NAME`, '.', 1), '`', '')) AS `object_schema`, + replace(substring_index(`ibp`.`TABLE_NAME`, '.', -(1)), '`', '') AS `object_name`, + format_bytes(sum(if((`ibp`.`COMPRESSED_SIZE` = 0), 16384, `ibp`.`COMPRESSED_SIZE`))) AS `allocated`, + format_bytes(sum(`ibp`.`DATA_SIZE`)) AS `data`, + count(`ibp`.`PAGE_NUMBER`) AS `pages`, + count(if((`ibp`.`IS_HASHED` = 'YES'), 1, NULL)) AS `pages_hashed`, + count(if((`ibp`.`IS_OLD` = 'YES'), 1, NULL)) AS `pages_old`, + round((sum(`ibp`.`NUMBER_RECORDS`) / count(distinct `ibp`.`INDEX_NAME`)), 0) AS `rows_cached` +from `information_schema`.`INNODB_BUFFER_PAGE` `ibp` +where (`ibp`.`TABLE_NAME` is not null) +group by `object_schema`, `object_name` +order by sum(if((`ibp`.`COMPRESSED_SIZE` = 0), 16384, `ibp`.`COMPRESSED_SIZE`)) desc; + diff --git a/IDEA/sys/innodb_lock_waits.sql b/IDEA/sys/innodb_lock_waits.sql new file mode 100644 index 00000000..227bc308 --- /dev/null +++ b/IDEA/sys/innodb_lock_waits.sql @@ -0,0 +1,41 @@ +create definer = `mysql.sys`@localhost view sys.innodb_lock_waits as +select `r`.`trx_wait_started` AS `wait_started`, + timediff(now(), `r`.`trx_wait_started`) AS `wait_age`, + timestampdiff(SECOND, `r`.`trx_wait_started`, now()) AS `wait_age_secs`, + concat(`sys`.`quote_identifier`(`rl`.`OBJECT_SCHEMA`), '.', + `sys`.`quote_identifier`(`rl`.`OBJECT_NAME`)) AS `locked_table`, + `rl`.`OBJECT_SCHEMA` AS `locked_table_schema`, + `rl`.`OBJECT_NAME` AS `locked_table_name`, + `rl`.`PARTITION_NAME` AS `locked_table_partition`, + `rl`.`SUBPARTITION_NAME` AS `locked_table_subpartition`, + `rl`.`INDEX_NAME` AS `locked_index`, + `rl`.`LOCK_TYPE` AS `locked_type`, + `r`.`trx_id` AS `waiting_trx_id`, + `r`.`trx_started` AS `waiting_trx_started`, + timediff(now(), `r`.`trx_started`) AS `waiting_trx_age`, + `r`.`trx_rows_locked` AS `waiting_trx_rows_locked`, + `r`.`trx_rows_modified` AS `waiting_trx_rows_modified`, + `r`.`trx_mysql_thread_id` AS `waiting_pid`, + `sys`.`format_statement`(`r`.`trx_query`) AS `waiting_query`, + `rl`.`ENGINE_LOCK_ID` AS `waiting_lock_id`, + `rl`.`LOCK_MODE` AS `waiting_lock_mode`, + `b`.`trx_id` AS `blocking_trx_id`, + `b`.`trx_mysql_thread_id` AS `blocking_pid`, + `sys`.`format_statement`(`b`.`trx_query`) AS `blocking_query`, + `bl`.`ENGINE_LOCK_ID` AS `blocking_lock_id`, + `bl`.`LOCK_MODE` AS `blocking_lock_mode`, + `b`.`trx_started` AS `blocking_trx_started`, + timediff(now(), `b`.`trx_started`) AS `blocking_trx_age`, + `b`.`trx_rows_locked` AS `blocking_trx_rows_locked`, + `b`.`trx_rows_modified` AS `blocking_trx_rows_modified`, + concat('KILL QUERY ', `b`.`trx_mysql_thread_id`) AS `sql_kill_blocking_query`, + concat('KILL ', `b`.`trx_mysql_thread_id`) AS `sql_kill_blocking_connection` +from ((((`performance_schema`.`data_lock_waits` `w` join `information_schema`.`INNODB_TRX` `b` on ((`b`.`trx_id` = + cast(`w`.`BLOCKING_ENGINE_TRANSACTION_ID` as char charset utf8mb4)))) join `information_schema`.`INNODB_TRX` `r` + on ((`r`.`trx_id` = + cast(`w`.`REQUESTING_ENGINE_TRANSACTION_ID` as char charset utf8mb4)))) join `performance_schema`.`data_locks` `bl` + on (((`bl`.`ENGINE_LOCK_ID` = `w`.`BLOCKING_ENGINE_LOCK_ID`) and + (`bl`.`ENGINE` = `w`.`ENGINE`)))) join `performance_schema`.`data_locks` `rl` + on (((`rl`.`ENGINE_LOCK_ID` = `w`.`REQUESTING_ENGINE_LOCK_ID`) and (`rl`.`ENGINE` = `w`.`ENGINE`)))) +order by `r`.`trx_wait_started`; + diff --git a/IDEA/sys/io_by_thread_by_latency.sql b/IDEA/sys/io_by_thread_by_latency.sql new file mode 100644 index 00000000..a8a48a2d --- /dev/null +++ b/IDEA/sys/io_by_thread_by_latency.sql @@ -0,0 +1,21 @@ +create definer = `mysql.sys`@localhost view sys.io_by_thread_by_latency as +select if((`performance_schema`.`threads`.`PROCESSLIST_ID` is null), + substring_index(`performance_schema`.`threads`.`NAME`, '/', -(1)), + concat(`performance_schema`.`threads`.`PROCESSLIST_USER`, '@', + convert(`performance_schema`.`threads`.`PROCESSLIST_HOST` using utf8mb4))) AS `user`, + sum(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`COUNT_STAR`) AS `total`, + format_pico_time(sum(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`SUM_TIMER_WAIT`)) AS `total_latency`, + format_pico_time(min(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`MIN_TIMER_WAIT`)) AS `min_latency`, + format_pico_time(avg(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`AVG_TIMER_WAIT`)) AS `avg_latency`, + format_pico_time(max(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`MAX_TIMER_WAIT`)) AS `max_latency`, + `performance_schema`.`events_waits_summary_by_thread_by_event_name`.`THREAD_ID` AS `thread_id`, + `performance_schema`.`threads`.`PROCESSLIST_ID` AS `processlist_id` +from (`performance_schema`.`events_waits_summary_by_thread_by_event_name` left join `performance_schema`.`threads` + on ((`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`THREAD_ID` = + `performance_schema`.`threads`.`THREAD_ID`))) +where ((`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') and + (`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`SUM_TIMER_WAIT` > 0)) +group by `performance_schema`.`events_waits_summary_by_thread_by_event_name`.`THREAD_ID`, + `performance_schema`.`threads`.`PROCESSLIST_ID`, `user` +order by sum(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/io_global_by_file_by_bytes.sql b/IDEA/sys/io_global_by_file_by_bytes.sql new file mode 100644 index 00000000..757aef47 --- /dev/null +++ b/IDEA/sys/io_global_by_file_by_bytes.sql @@ -0,0 +1,22 @@ +create definer = `mysql.sys`@localhost view sys.io_global_by_file_by_bytes as +select `sys`.`format_path`(`performance_schema`.`file_summary_by_instance`.`FILE_NAME`) AS `file`, + `performance_schema`.`file_summary_by_instance`.`COUNT_READ` AS `count_read`, + format_bytes(`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ`) AS `total_read`, + format_bytes(ifnull((`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` / + nullif(`performance_schema`.`file_summary_by_instance`.`COUNT_READ`, 0)), + 0)) AS `avg_read`, + `performance_schema`.`file_summary_by_instance`.`COUNT_WRITE` AS `count_write`, + format_bytes(`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE`) AS `total_written`, + format_bytes(ifnull((`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE` / + nullif(`performance_schema`.`file_summary_by_instance`.`COUNT_WRITE`, 0)), + 0.00)) AS `avg_write`, + format_bytes((`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` + + `performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE`)) AS `total`, + ifnull(round((100 - ((`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` / nullif( + (`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` + + `performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE`), 0)) * 100)), 2), + 0.00) AS `write_pct` +from `performance_schema`.`file_summary_by_instance` +order by (`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` + + `performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE`) desc; + diff --git a/IDEA/sys/io_global_by_file_by_latency.sql b/IDEA/sys/io_global_by_file_by_latency.sql new file mode 100644 index 00000000..98055f1a --- /dev/null +++ b/IDEA/sys/io_global_by_file_by_latency.sql @@ -0,0 +1,13 @@ +create definer = `mysql.sys`@localhost view sys.io_global_by_file_by_latency as +select `sys`.`format_path`(`performance_schema`.`file_summary_by_instance`.`FILE_NAME`) AS `file`, + `performance_schema`.`file_summary_by_instance`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`file_summary_by_instance`.`SUM_TIMER_WAIT`) AS `total_latency`, + `performance_schema`.`file_summary_by_instance`.`COUNT_READ` AS `count_read`, + format_pico_time(`performance_schema`.`file_summary_by_instance`.`SUM_TIMER_READ`) AS `read_latency`, + `performance_schema`.`file_summary_by_instance`.`COUNT_WRITE` AS `count_write`, + format_pico_time(`performance_schema`.`file_summary_by_instance`.`SUM_TIMER_WRITE`) AS `write_latency`, + `performance_schema`.`file_summary_by_instance`.`COUNT_MISC` AS `count_misc`, + format_pico_time(`performance_schema`.`file_summary_by_instance`.`SUM_TIMER_MISC`) AS `misc_latency` +from `performance_schema`.`file_summary_by_instance` +order by `performance_schema`.`file_summary_by_instance`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/io_global_by_wait_by_bytes.sql b/IDEA/sys/io_global_by_wait_by_bytes.sql new file mode 100644 index 00000000..06cb72e4 --- /dev/null +++ b/IDEA/sys/io_global_by_wait_by_bytes.sql @@ -0,0 +1,25 @@ +create definer = `mysql.sys`@localhost view sys.io_global_by_wait_by_bytes as +select substring_index(`performance_schema`.`file_summary_by_event_name`.`EVENT_NAME`, '/', -(2)) AS `event_name`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`MIN_TIMER_WAIT`) AS `min_latency`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`AVG_TIMER_WAIT`) AS `avg_latency`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_READ` AS `count_read`, + format_bytes(`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ`) AS `total_read`, + format_bytes(ifnull((`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ` / + nullif(`performance_schema`.`file_summary_by_event_name`.`COUNT_READ`, 0)), + 0)) AS `avg_read`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_WRITE` AS `count_write`, + format_bytes(`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE`) AS `total_written`, + format_bytes(ifnull((`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` / + nullif(`performance_schema`.`file_summary_by_event_name`.`COUNT_WRITE`, 0)), + 0)) AS `avg_written`, + format_bytes((`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` + + `performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ`)) AS `total_requested` +from `performance_schema`.`file_summary_by_event_name` +where ((`performance_schema`.`file_summary_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') and + (`performance_schema`.`file_summary_by_event_name`.`COUNT_STAR` > 0)) +order by (`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` + + `performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ`) desc; + diff --git a/IDEA/sys/io_global_by_wait_by_latency.sql b/IDEA/sys/io_global_by_wait_by_latency.sql new file mode 100644 index 00000000..81672439 --- /dev/null +++ b/IDEA/sys/io_global_by_wait_by_latency.sql @@ -0,0 +1,24 @@ +create definer = `mysql.sys`@localhost view sys.io_global_by_wait_by_latency as +select substring_index(`performance_schema`.`file_summary_by_event_name`.`EVENT_NAME`, '/', -(2)) AS `event_name`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`AVG_TIMER_WAIT`) AS `avg_latency`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_READ`) AS `read_latency`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_WRITE`) AS `write_latency`, + format_pico_time(`performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_MISC`) AS `misc_latency`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_READ` AS `count_read`, + format_bytes(`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ`) AS `total_read`, + format_bytes(ifnull((`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ` / + nullif(`performance_schema`.`file_summary_by_event_name`.`COUNT_READ`, 0)), + 0)) AS `avg_read`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_WRITE` AS `count_write`, + format_bytes(`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE`) AS `total_written`, + format_bytes(ifnull((`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` / + nullif(`performance_schema`.`file_summary_by_event_name`.`COUNT_WRITE`, 0)), + 0)) AS `avg_written` +from `performance_schema`.`file_summary_by_event_name` +where ((`performance_schema`.`file_summary_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') and + (`performance_schema`.`file_summary_by_event_name`.`COUNT_STAR` > 0)) +order by `performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/latest_file_io.sql b/IDEA/sys/latest_file_io.sql new file mode 100644 index 00000000..2aa4f8ae --- /dev/null +++ b/IDEA/sys/latest_file_io.sql @@ -0,0 +1,18 @@ +create definer = `mysql.sys`@localhost view sys.latest_file_io as +select if((`information_schema`.`processlist`.`ID` is null), + concat(substring_index(`performance_schema`.`threads`.`NAME`, '/', -(1)), ':', + `performance_schema`.`events_waits_history_long`.`THREAD_ID`), convert( + concat(`information_schema`.`processlist`.`USER`, '@', `information_schema`.`processlist`.`HOST`, ':', + `information_schema`.`processlist`.`ID`) using utf8mb4)) AS `thread`, + `sys`.`format_path`(`performance_schema`.`events_waits_history_long`.`OBJECT_NAME`) AS `file`, + format_pico_time(`performance_schema`.`events_waits_history_long`.`TIMER_WAIT`) AS `latency`, + `performance_schema`.`events_waits_history_long`.`OPERATION` AS `operation`, + format_bytes(`performance_schema`.`events_waits_history_long`.`NUMBER_OF_BYTES`) AS `requested` +from ((`performance_schema`.`events_waits_history_long` join `performance_schema`.`threads` + on ((`performance_schema`.`events_waits_history_long`.`THREAD_ID` = + `performance_schema`.`threads`.`THREAD_ID`))) left join `information_schema`.`PROCESSLIST` + on ((`performance_schema`.`threads`.`PROCESSLIST_ID` = `information_schema`.`processlist`.`ID`))) +where ((`performance_schema`.`events_waits_history_long`.`OBJECT_NAME` is not null) and + (`performance_schema`.`events_waits_history_long`.`EVENT_NAME` like 'wait/io/file/%')) +order by `performance_schema`.`events_waits_history_long`.`TIMER_START`; + diff --git a/IDEA/sys/list_add.sql b/IDEA/sys/list_add.sql new file mode 100644 index 00000000..63714040 --- /dev/null +++ b/IDEA/sys/list_add.sql @@ -0,0 +1,59 @@ +create + definer = `mysql.sys`@localhost function sys.list_add(in_list text, in_add_value text) returns text comment ' +Description +----------- + +Takes a list, and a value to add to the list, and returns the resulting list. + +Useful for altering certain session variables, like sql_mode or optimizer_switch for instance. + +Parameters +----------- + +in_list (TEXT): + The comma separated list to add a value to + +in_add_value (TEXT): + The value to add to the input list + +Returns +----------- + +TEXT + +Example +-------- + +mysql> select @@sql_mode; ++-----------------------------------------------------------------------------------+ +| @@sql_mode | ++-----------------------------------------------------------------------------------+ +| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | ++-----------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> set sql_mode = sys.list_add(@@sql_mode, ''ANSI_QUOTES''); +Query OK, 0 rows affected (0.06 sec) + +mysql> select @@sql_mode; ++-----------------------------------------------------------------------------------------------+ +| @@sql_mode | ++-----------------------------------------------------------------------------------------------+ +| ANSI_QUOTES,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | ++-----------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +' deterministic sql security invoker +BEGIN + IF (in_add_value IS NULL) THEN + SIGNAL SQLSTATE '02200' + SET MESSAGE_TEXT = 'Function sys.list_add: in_add_value input variable should not be NULL', + MYSQL_ERRNO = 1138; + END IF; + IF (in_list IS NULL OR LENGTH(in_list) = 0) THEN + -- return the new value as a single value list + RETURN in_add_value; + END IF; + RETURN (SELECT CONCAT(TRIM(BOTH ',' FROM TRIM(in_list)), ',', in_add_value)); +END; + diff --git a/IDEA/sys/list_drop.sql b/IDEA/sys/list_drop.sql new file mode 100644 index 00000000..d0fb8f57 --- /dev/null +++ b/IDEA/sys/list_drop.sql @@ -0,0 +1,60 @@ +create + definer = `mysql.sys`@localhost function sys.list_drop(in_list text, in_drop_value text) returns text comment ' +Description +----------- + +Takes a list, and a value to attempt to remove from the list, and returns the resulting list. + +Useful for altering certain session variables, like sql_mode or optimizer_switch for instance. + +Parameters +----------- + +in_list (TEXT): + The comma separated list to drop a value from + +in_drop_value (TEXT): + The value to drop from the input list + +Returns +----------- + +TEXT + +Example +-------- + +mysql> select @@sql_mode; ++-----------------------------------------------------------------------------------------------+ +| @@sql_mode | ++-----------------------------------------------------------------------------------------------+ +| ANSI_QUOTES,ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | ++-----------------------------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +mysql> set sql_mode = sys.list_drop(@@sql_mode, ''ONLY_FULL_GROUP_BY''); +Query OK, 0 rows affected (0.03 sec) + +mysql> select @@sql_mode; ++----------------------------------------------------------------------------+ +| @@sql_mode | ++----------------------------------------------------------------------------+ +| ANSI_QUOTES,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | ++----------------------------------------------------------------------------+ +1 row in set (0.00 sec) + +' deterministic sql security invoker +BEGIN + IF (in_drop_value IS NULL) THEN + SIGNAL SQLSTATE '02200' + SET MESSAGE_TEXT = 'Function sys.list_drop: in_drop_value input variable should not be NULL', + MYSQL_ERRNO = 1138; + END IF; + IF (in_list IS NULL OR LENGTH(in_list) = 0) THEN + -- return the list as it was passed in + RETURN in_list; + END IF; + -- ensure that leading / trailing commas are remove, support values with either spaces or not between commas + RETURN (SELECT TRIM(BOTH ',' FROM REPLACE(REPLACE(CONCAT(',', in_list), CONCAT(',', in_drop_value), ''), CONCAT(', ', in_drop_value), ''))); +END; + diff --git a/IDEA/sys/memory_by_host_by_current_bytes.sql b/IDEA/sys/memory_by_host_by_current_bytes.sql new file mode 100644 index 00000000..f7caea66 --- /dev/null +++ b/IDEA/sys/memory_by_host_by_current_bytes.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.memory_by_host_by_current_bytes as +select if((`performance_schema`.`memory_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`memory_summary_by_host_by_event_name`.`HOST`) AS `host`, + sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_COUNT_USED`) AS `current_count_used`, + format_bytes(sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`)) AS `current_allocated`, + format_bytes(ifnull( + (sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) / + nullif(sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_COUNT_USED`), 0)), + 0)) AS `current_avg_alloc`, + format_bytes(max(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`)) AS `current_max_alloc`, + format_bytes(sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`SUM_NUMBER_OF_BYTES_ALLOC`)) AS `total_allocated` +from `performance_schema`.`memory_summary_by_host_by_event_name` +group by if((`performance_schema`.`memory_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`memory_summary_by_host_by_event_name`.`HOST`) +order by sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) desc; + diff --git a/IDEA/sys/memory_by_thread_by_current_bytes.sql b/IDEA/sys/memory_by_thread_by_current_bytes.sql new file mode 100644 index 00000000..4214da8b --- /dev/null +++ b/IDEA/sys/memory_by_thread_by_current_bytes.sql @@ -0,0 +1,19 @@ +create definer = `mysql.sys`@localhost view sys.memory_by_thread_by_current_bytes as +select `mt`.`THREAD_ID` AS `thread_id`, + if((`t`.`NAME` = 'thread/sql/one_connection'), + concat(`t`.`PROCESSLIST_USER`, '@', convert(`t`.`PROCESSLIST_HOST` using utf8mb4)), + replace(`t`.`NAME`, 'thread/', '')) AS `user`, + sum(`mt`.`CURRENT_COUNT_USED`) AS `current_count_used`, + format_bytes(sum(`mt`.`CURRENT_NUMBER_OF_BYTES_USED`)) AS `current_allocated`, + format_bytes(ifnull((sum(`mt`.`CURRENT_NUMBER_OF_BYTES_USED`) / nullif(sum(`mt`.`CURRENT_COUNT_USED`), 0)), + 0)) AS `current_avg_alloc`, + format_bytes(max(`mt`.`CURRENT_NUMBER_OF_BYTES_USED`)) AS `current_max_alloc`, + format_bytes(sum(`mt`.`SUM_NUMBER_OF_BYTES_ALLOC`)) AS `total_allocated` +from (`performance_schema`.`memory_summary_by_thread_by_event_name` `mt` join `performance_schema`.`threads` `t` + on ((`mt`.`THREAD_ID` = `t`.`THREAD_ID`))) +group by `mt`.`THREAD_ID`, + if((`t`.`NAME` = 'thread/sql/one_connection'), + concat(`t`.`PROCESSLIST_USER`, '@', convert(`t`.`PROCESSLIST_HOST` using utf8mb4)), + replace(`t`.`NAME`, 'thread/', '')) +order by sum(`mt`.`CURRENT_NUMBER_OF_BYTES_USED`) desc; + diff --git a/IDEA/sys/memory_by_user_by_current_bytes.sql b/IDEA/sys/memory_by_user_by_current_bytes.sql new file mode 100644 index 00000000..5d7867df --- /dev/null +++ b/IDEA/sys/memory_by_user_by_current_bytes.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.memory_by_user_by_current_bytes as +select if((`performance_schema`.`memory_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`memory_summary_by_user_by_event_name`.`USER`) AS `user`, + sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_COUNT_USED`) AS `current_count_used`, + format_bytes(sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`)) AS `current_allocated`, + format_bytes(ifnull( + (sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) / + nullif(sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_COUNT_USED`), 0)), + 0)) AS `current_avg_alloc`, + format_bytes(max(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`)) AS `current_max_alloc`, + format_bytes(sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`SUM_NUMBER_OF_BYTES_ALLOC`)) AS `total_allocated` +from `performance_schema`.`memory_summary_by_user_by_event_name` +group by if((`performance_schema`.`memory_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`memory_summary_by_user_by_event_name`.`USER`) +order by sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) desc; + diff --git a/IDEA/sys/memory_global_by_current_bytes.sql b/IDEA/sys/memory_global_by_current_bytes.sql new file mode 100644 index 00000000..fa2c7dfe --- /dev/null +++ b/IDEA/sys/memory_global_by_current_bytes.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.memory_global_by_current_bytes as +select `performance_schema`.`memory_summary_global_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_COUNT_USED` AS `current_count`, + format_bytes(`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) AS `current_alloc`, + format_bytes(ifnull((`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` / + nullif(`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_COUNT_USED`, 0)), + 0)) AS `current_avg_alloc`, + `performance_schema`.`memory_summary_global_by_event_name`.`HIGH_COUNT_USED` AS `high_count`, + format_bytes(`performance_schema`.`memory_summary_global_by_event_name`.`HIGH_NUMBER_OF_BYTES_USED`) AS `high_alloc`, + format_bytes(ifnull((`performance_schema`.`memory_summary_global_by_event_name`.`HIGH_NUMBER_OF_BYTES_USED` / + nullif(`performance_schema`.`memory_summary_global_by_event_name`.`HIGH_COUNT_USED`, 0)), + 0)) AS `high_avg_alloc` +from `performance_schema`.`memory_summary_global_by_event_name` +where (`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` > 0) +order by `performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` desc; + diff --git a/IDEA/sys/memory_global_total.sql b/IDEA/sys/memory_global_total.sql new file mode 100644 index 00000000..5bc3a3e5 --- /dev/null +++ b/IDEA/sys/memory_global_total.sql @@ -0,0 +1,4 @@ +create definer = `mysql.sys`@localhost view sys.memory_global_total as +select format_bytes(sum(`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`)) AS `total_allocated` +from `performance_schema`.`memory_summary_global_by_event_name`; + diff --git a/IDEA/sys/metrics.sql b/IDEA/sys/metrics.sql new file mode 100644 index 00000000..ff5c6f72 --- /dev/null +++ b/IDEA/sys/metrics.sql @@ -0,0 +1,58 @@ +create definer = `mysql.sys`@localhost view sys.metrics as +select lower(`performance_schema`.`global_status`.`VARIABLE_NAME`) AS `Variable_name`, + `performance_schema`.`global_status`.`VARIABLE_VALUE` AS `Variable_value`, + 'Global Status' AS `Type`, + 'YES' AS `Enabled` +from `performance_schema`.`global_status` +union all +select `information_schema`.`innodb_metrics`.`NAME` AS `Variable_name`, + `information_schema`.`innodb_metrics`.`COUNT` AS `Variable_value`, + concat('InnoDB Metrics - ', `information_schema`.`innodb_metrics`.`SUBSYSTEM`) AS `Type`, + if((`information_schema`.`innodb_metrics`.`STATUS` = 'enabled'), 'YES', 'NO') AS `Enabled` +from `information_schema`.`INNODB_METRICS` +where (`information_schema`.`innodb_metrics`.`NAME` not in + ('lock_row_lock_time', 'lock_row_lock_time_avg', 'lock_row_lock_time_max', 'lock_row_lock_waits', + 'buffer_pool_reads', 'buffer_pool_read_requests', 'buffer_pool_write_requests', 'buffer_pool_wait_free', + 'buffer_pool_read_ahead', 'buffer_pool_read_ahead_evicted', 'buffer_pool_pages_total', 'buffer_pool_pages_misc', + 'buffer_pool_pages_data', 'buffer_pool_bytes_data', 'buffer_pool_pages_dirty', 'buffer_pool_bytes_dirty', + 'buffer_pool_pages_free', 'buffer_pages_created', 'buffer_pages_written', 'buffer_pages_read', + 'buffer_data_reads', 'buffer_data_written', 'file_num_open_files', 'os_log_bytes_written', 'os_log_fsyncs', + 'os_log_pending_fsyncs', 'os_log_pending_writes', 'log_waits', 'log_write_requests', 'log_writes', + 'innodb_dblwr_writes', 'innodb_dblwr_pages_written', 'innodb_page_size')) +union all +select 'memory_current_allocated' AS `Variable_name`, + sum(`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) AS `Variable_value`, + 'Performance Schema' AS `Type`, + if(((select count(0) + from `performance_schema`.`setup_instruments` + where ((`performance_schema`.`setup_instruments`.`NAME` like 'memory/%') and + (`performance_schema`.`setup_instruments`.`ENABLED` = 'YES'))) = 0), 'NO', if(((select count(0) + from `performance_schema`.`setup_instruments` + where ((`performance_schema`.`setup_instruments`.`NAME` like 'memory/%') and + (`performance_schema`.`setup_instruments`.`ENABLED` = 'NO'))) = + 0), 'YES', + 'PARTIAL')) AS `Enabled` +from `performance_schema`.`memory_summary_global_by_event_name` +union all +select 'memory_total_allocated' AS `Variable_name`, + sum(`performance_schema`.`memory_summary_global_by_event_name`.`SUM_NUMBER_OF_BYTES_ALLOC`) AS `Variable_value`, + 'Performance Schema' AS `Type`, + if(((select count(0) + from `performance_schema`.`setup_instruments` + where ((`performance_schema`.`setup_instruments`.`NAME` like 'memory/%') and + (`performance_schema`.`setup_instruments`.`ENABLED` = 'YES'))) = 0), 'NO', if(((select count(0) + from `performance_schema`.`setup_instruments` + where ((`performance_schema`.`setup_instruments`.`NAME` like 'memory/%') and + (`performance_schema`.`setup_instruments`.`ENABLED` = 'NO'))) = + 0), 'YES', + 'PARTIAL')) AS `Enabled` +from `performance_schema`.`memory_summary_global_by_event_name` +union all +select 'NOW()' AS `Variable_name`, now(3) AS `Variable_value`, 'System Time' AS `Type`, 'YES' AS `Enabled` +union all +select 'UNIX_TIMESTAMP()' AS `Variable_name`, + round(unix_timestamp(now(3)), 3) AS `Variable_value`, + 'System Time' AS `Type`, + 'YES' AS `Enabled` +order by `Type`, `Variable_name`; + diff --git a/IDEA/sys/processlist.sql b/IDEA/sys/processlist.sql new file mode 100644 index 00000000..6a3c65a5 --- /dev/null +++ b/IDEA/sys/processlist.sql @@ -0,0 +1,48 @@ +create definer = `mysql.sys`@localhost view sys.processlist as +select `pps`.`THREAD_ID` AS `thd_id`, + `pps`.`PROCESSLIST_ID` AS `conn_id`, + if((`pps`.`NAME` in ('thread/sql/one_connection', 'thread/thread_pool/tp_one_connection')), + concat(`pps`.`PROCESSLIST_USER`, '@', convert(`pps`.`PROCESSLIST_HOST` using utf8mb4)), + replace(`pps`.`NAME`, 'thread/', '')) AS `user`, + `pps`.`PROCESSLIST_DB` AS `db`, + `pps`.`PROCESSLIST_COMMAND` AS `command`, + `pps`.`PROCESSLIST_STATE` AS `state`, + `pps`.`PROCESSLIST_TIME` AS `time`, + `sys`.`format_statement`(`pps`.`PROCESSLIST_INFO`) AS `current_statement`, + `pps`.`EXECUTION_ENGINE` AS `execution_engine`, + if((`esc`.`END_EVENT_ID` is null), format_pico_time(`esc`.`TIMER_WAIT`), NULL) AS `statement_latency`, + if((`esc`.`END_EVENT_ID` is null), round((100 * (`estc`.`WORK_COMPLETED` / `estc`.`WORK_ESTIMATED`)), 2), + NULL) AS `progress`, + format_pico_time(`esc`.`LOCK_TIME`) AS `lock_latency`, + format_pico_time(`esc`.`CPU_TIME`) AS `cpu_latency`, + `esc`.`ROWS_EXAMINED` AS `rows_examined`, + `esc`.`ROWS_SENT` AS `rows_sent`, + `esc`.`ROWS_AFFECTED` AS `rows_affected`, + `esc`.`CREATED_TMP_TABLES` AS `tmp_tables`, + `esc`.`CREATED_TMP_DISK_TABLES` AS `tmp_disk_tables`, + if(((`esc`.`NO_GOOD_INDEX_USED` > 0) or (`esc`.`NO_INDEX_USED` > 0)), 'YES', 'NO') AS `full_scan`, + if((`esc`.`END_EVENT_ID` is not null), `sys`.`format_statement`(`esc`.`SQL_TEXT`), NULL) AS `last_statement`, + if((`esc`.`END_EVENT_ID` is not null), format_pico_time(`esc`.`TIMER_WAIT`), + NULL) AS `last_statement_latency`, + format_bytes(`sys`.`mem`.`current_allocated`) AS `current_memory`, + `ewc`.`EVENT_NAME` AS `last_wait`, + if(((`ewc`.`END_EVENT_ID` is null) and (`ewc`.`EVENT_NAME` is not null)), 'Still Waiting', + convert(format_pico_time(`ewc`.`TIMER_WAIT`) using utf8mb4)) AS `last_wait_latency`, + `ewc`.`SOURCE` AS `source`, + format_pico_time(`etc`.`TIMER_WAIT`) AS `trx_latency`, + `etc`.`STATE` AS `trx_state`, + `etc`.`AUTOCOMMIT` AS `trx_autocommit`, + `conattr_pid`.`ATTR_VALUE` AS `pid`, + `conattr_progname`.`ATTR_VALUE` AS `program_name` +from (((((((`performance_schema`.`threads` `pps` left join `performance_schema`.`events_waits_current` `ewc` + on ((`pps`.`THREAD_ID` = `ewc`.`THREAD_ID`))) left join `performance_schema`.`events_stages_current` `estc` + on ((`pps`.`THREAD_ID` = `estc`.`THREAD_ID`))) left join `performance_schema`.`events_statements_current` `esc` + on ((`pps`.`THREAD_ID` = `esc`.`THREAD_ID`))) left join `performance_schema`.`events_transactions_current` `etc` + on ((`pps`.`THREAD_ID` = `etc`.`THREAD_ID`))) left join `sys`.`x$memory_by_thread_by_current_bytes` `mem` + on ((`pps`.`THREAD_ID` = `sys`.`mem`.`thread_id`))) left join `performance_schema`.`session_connect_attrs` `conattr_pid` + on (((`conattr_pid`.`PROCESSLIST_ID` = `pps`.`PROCESSLIST_ID`) and + (`conattr_pid`.`ATTR_NAME` = '_pid')))) left join `performance_schema`.`session_connect_attrs` `conattr_progname` + on (((`conattr_progname`.`PROCESSLIST_ID` = `pps`.`PROCESSLIST_ID`) and + (`conattr_progname`.`ATTR_NAME` = 'program_name')))) +order by `pps`.`PROCESSLIST_TIME` desc, `last_wait_latency` desc; + diff --git a/IDEA/sys/ps_check_lost_instrumentation.sql b/IDEA/sys/ps_check_lost_instrumentation.sql new file mode 100644 index 00000000..18f384b0 --- /dev/null +++ b/IDEA/sys/ps_check_lost_instrumentation.sql @@ -0,0 +1,7 @@ +create definer = `mysql.sys`@localhost view sys.ps_check_lost_instrumentation as +select `performance_schema`.`global_status`.`VARIABLE_NAME` AS `variable_name`, + `performance_schema`.`global_status`.`VARIABLE_VALUE` AS `variable_value` +from `performance_schema`.`global_status` +where ((`performance_schema`.`global_status`.`VARIABLE_NAME` like 'perf%lost') and + (`performance_schema`.`global_status`.`VARIABLE_VALUE` > 0)); + diff --git a/IDEA/sys/ps_is_account_enabled.sql b/IDEA/sys/ps_is_account_enabled.sql new file mode 100644 index 00000000..a6c7b3f5 --- /dev/null +++ b/IDEA/sys/ps_is_account_enabled.sql @@ -0,0 +1,47 @@ +create + definer = `mysql.sys`@localhost function sys.ps_is_account_enabled(in_host varchar(255), in_user varchar(32)) returns enum ('YES', 'NO') + comment ' +Description +----------- + +Determines whether instrumentation of an account is enabled +within Performance Schema. + +Parameters +----------- + +in_host VARCHAR(255): + The hostname of the account to check. +in_user VARCHAR(32): + The username of the account to check. + +Returns +----------- + +ENUM(''YES'', ''NO'', ''PARTIAL'') + +Example +----------- + +mysql> SELECT sys.ps_is_account_enabled(''localhost'', ''root''); ++------------------------------------------------+ +| sys.ps_is_account_enabled(''localhost'', ''root'') | ++------------------------------------------------+ +| YES | ++------------------------------------------------+ +1 row in set (0.01 sec) +' + deterministic + sql security invoker + reads sql data +BEGIN + RETURN IF(EXISTS(SELECT 1 + FROM performance_schema.setup_actors + WHERE (`HOST` = '%' OR in_host LIKE `HOST`) + AND (`USER` = '%' OR `USER` = in_user) + AND (`ENABLED` = 'YES') + ), + 'YES', 'NO' + ); +END; + diff --git a/IDEA/sys/ps_is_consumer_enabled.sql b/IDEA/sys/ps_is_consumer_enabled.sql new file mode 100644 index 00000000..dc076f8b --- /dev/null +++ b/IDEA/sys/ps_is_consumer_enabled.sql @@ -0,0 +1,73 @@ +create + definer = `mysql.sys`@localhost function sys.ps_is_consumer_enabled(in_consumer varchar(64)) returns enum ('YES', 'NO') + comment ' +Description +----------- + +Determines whether a consumer is enabled (taking the consumer hierarchy into consideration) +within the Performance Schema. + +An exception with errno 3047 is thrown if an unknown consumer name is passed to the function. +A consumer name of NULL returns NULL. + +Parameters +----------- + +in_consumer VARCHAR(64): + The name of the consumer to check. + +Returns +----------- + +ENUM(''YES'', ''NO'') + +Example +----------- + +mysql> SELECT sys.ps_is_consumer_enabled(''events_stages_history''); ++-----------------------------------------------------+ +| sys.ps_is_consumer_enabled(''events_stages_history'') | ++-----------------------------------------------------+ +| NO | ++-----------------------------------------------------+ +1 row in set (0.00 sec) +' + deterministic + sql security invoker + reads sql data +BEGIN + DECLARE v_is_enabled ENUM('YES', 'NO') DEFAULT NULL; + DECLARE v_error_msg VARCHAR(128); + -- Return NULL for a NULL argument. + IF (in_consumer IS NULL) THEN + RETURN NULL; + END IF; + SET v_is_enabled = ( + SELECT (CASE + WHEN c.NAME = 'global_instrumentation' THEN c.ENABLED + WHEN c.NAME = 'thread_instrumentation' THEN IF(cg.ENABLED = 'YES' AND c.ENABLED = 'YES', 'YES', 'NO') + WHEN c.NAME LIKE '%\_digest' THEN IF(cg.ENABLED = 'YES' AND c.ENABLED = 'YES', 'YES', 'NO') + WHEN c.NAME LIKE '%\_current' THEN IF(cg.ENABLED = 'YES' AND ct.ENABLED = 'YES' AND c.ENABLED = 'YES', 'YES', 'NO') + ELSE IF(cg.ENABLED = 'YES' AND ct.ENABLED = 'YES' AND c.ENABLED = 'YES' + AND ( SELECT cc.ENABLED FROM performance_schema.setup_consumers cc WHERE NAME = CONCAT(SUBSTRING_INDEX(c.NAME, '_', 2), '_current') + ) = 'YES', 'YES', 'NO') + END) AS IsEnabled + FROM performance_schema.setup_consumers c + INNER JOIN performance_schema.setup_consumers cg + INNER JOIN performance_schema.setup_consumers ct + WHERE cg.NAME = 'global_instrumentation' + AND ct.NAME = 'thread_instrumentation' + AND c.NAME = in_consumer + ); + IF (v_is_enabled IS NOT NULL) THEN + RETURN v_is_enabled; + ELSE + -- A value of NULL here means it is an unknown consumer name that was passed as an argument. + -- Only an input value of NULL is allowed to return a NULL result value, to throw a signal instead. + SET v_error_msg = CONCAT('Invalid argument error: ', in_consumer, ' in function sys.ps_is_consumer_enabled.'); + SIGNAL SQLSTATE 'HY000' + SET MESSAGE_TEXT = v_error_msg, + MYSQL_ERRNO = 3047; + END IF; +END; + diff --git a/IDEA/sys/ps_is_instrument_default_enabled.sql b/IDEA/sys/ps_is_instrument_default_enabled.sql new file mode 100644 index 00000000..a990e515 --- /dev/null +++ b/IDEA/sys/ps_is_instrument_default_enabled.sql @@ -0,0 +1,55 @@ +create + definer = `mysql.sys`@localhost function sys.ps_is_instrument_default_enabled(in_instrument varchar(128)) returns enum ('YES', 'NO') + comment ' +Description +----------- + +Returns whether an instrument is enabled by default in this version of MySQL. + +Parameters +----------- + +in_instrument VARCHAR(128): + The instrument to check. + +Returns +----------- + +ENUM(''YES'', ''NO'') + +Example +----------- + +mysql> SELECT sys.ps_is_instrument_default_enabled(''statement/sql/select''); ++--------------------------------------------------------------+ +| sys.ps_is_instrument_default_enabled(''statement/sql/select'') | ++--------------------------------------------------------------+ +| YES | ++--------------------------------------------------------------+ +1 row in set (0.00 sec) +' + deterministic + sql security invoker + reads sql data +BEGIN + DECLARE v_enabled ENUM('YES', 'NO'); + IF (in_instrument LIKE 'stage/%') THEN + BEGIN + /* Stages are enabled by default if the progress property is set. */ + SET v_enabled = (SELECT + IF(find_in_set("progress", PROPERTIES) != 0, 'YES', 'NO') + FROM performance_schema.setup_instruments + WHERE NAME = in_instrument); + SET v_enabled = IFNULL(v_enabled, 'NO'); + END; + ELSE + SET v_enabled = IF(in_instrument LIKE 'wait/synch/%' + OR in_instrument LIKE 'wait/io/socket/%' + , + 'NO', + 'YES' + ); + END IF; + RETURN v_enabled; +END; + diff --git a/IDEA/sys/ps_is_instrument_default_timed.sql b/IDEA/sys/ps_is_instrument_default_timed.sql new file mode 100644 index 00000000..c8e93cad --- /dev/null +++ b/IDEA/sys/ps_is_instrument_default_timed.sql @@ -0,0 +1,57 @@ +create + definer = `mysql.sys`@localhost function sys.ps_is_instrument_default_timed(in_instrument varchar(128)) returns enum ('YES', 'NO') + comment ' +Description +----------- + +Returns whether an instrument is timed by default in this version of MySQL. + +Parameters +----------- + +in_instrument VARCHAR(128): + The instrument to check. + +Returns +----------- + +ENUM(''YES'', ''NO'') + +Example +----------- + +mysql> SELECT sys.ps_is_instrument_default_timed(''statement/sql/select''); ++------------------------------------------------------------+ +| sys.ps_is_instrument_default_timed(''statement/sql/select'') | ++------------------------------------------------------------+ +| YES | ++------------------------------------------------------------+ +1 row in set (0.00 sec) +' + deterministic + sql security invoker + reads sql data +BEGIN + DECLARE v_timed ENUM('YES', 'NO'); + IF (in_instrument LIKE 'stage/%') THEN + BEGIN + -- Stages are timed by default if the progress property is set. + SET v_timed = (SELECT + IF(find_in_set("progress", PROPERTIES) != 0, 'YES', 'NO') + FROM performance_schema.setup_instruments + WHERE NAME = in_instrument); + SET v_timed = IFNULL(v_timed, 'NO'); + END; + ELSE + -- Mutex, rwlock, prlock, sxlock, cond are not timed by default + -- Memory instruments are never timed. + SET v_timed = IF(in_instrument LIKE 'wait/synch/%' + OR in_instrument LIKE 'memory/%' + , + 'NO', + 'YES' + ); + END IF; + RETURN v_timed; +END; + diff --git a/IDEA/sys/ps_is_thread_instrumented.sql b/IDEA/sys/ps_is_thread_instrumented.sql new file mode 100644 index 00000000..9dbe2676 --- /dev/null +++ b/IDEA/sys/ps_is_thread_instrumented.sql @@ -0,0 +1,46 @@ +create + definer = `mysql.sys`@localhost function sys.ps_is_thread_instrumented(in_connection_id bigint unsigned) returns enum ('YES', 'NO', 'UNKNOWN') + comment ' +Description +----------- + +Checks whether the provided connection id is instrumented within Performance Schema. + +Parameters +----------- + +in_connection_id (BIGINT UNSIGNED): + The id of the connection to check. + +Returns +----------- + +ENUM(''YES'', ''NO'', ''UNKNOWN'') + +Example +----------- + +mysql> SELECT sys.ps_is_thread_instrumented(CONNECTION_ID()); ++------------------------------------------------+ +| sys.ps_is_thread_instrumented(CONNECTION_ID()) | ++------------------------------------------------+ +| YES | ++------------------------------------------------+ +' + sql security invoker + reads sql data +BEGIN + DECLARE v_enabled ENUM('YES', 'NO', 'UNKNOWN'); + IF (in_connection_id IS NULL) THEN + RETURN NULL; + END IF; + SELECT INSTRUMENTED INTO v_enabled + FROM performance_schema.threads + WHERE PROCESSLIST_ID = in_connection_id; + IF (v_enabled IS NULL) THEN + RETURN 'UNKNOWN'; + ELSE + RETURN v_enabled; + END IF; +END; + diff --git a/IDEA/sys/ps_setup_disable_background_threads.sql b/IDEA/sys/ps_setup_disable_background_threads.sql new file mode 100644 index 00000000..ab7c3443 --- /dev/null +++ b/IDEA/sys/ps_setup_disable_background_threads.sql @@ -0,0 +1,30 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_disable_background_threads() comment ' +Description +----------- + +Disable all background thread instrumentation within Performance Schema. + +Parameters +----------- + +None. + +Example +----------- + +mysql> CALL sys.ps_setup_disable_background_threads(); ++--------------------------------+ +| summary | ++--------------------------------+ +| Disabled 18 background threads | ++--------------------------------+ +1 row in set (0.00 sec) +' sql security invoker modifies sql data +BEGIN + UPDATE performance_schema.threads + SET instrumented = 'NO' + WHERE type = 'BACKGROUND'; + SELECT CONCAT('Disabled ', @rows := ROW_COUNT(), ' background thread', IF(@rows != 1, 's', '')) AS summary; +END; + diff --git a/IDEA/sys/ps_setup_disable_consumer.sql b/IDEA/sys/ps_setup_disable_consumer.sql new file mode 100644 index 00000000..3506214a --- /dev/null +++ b/IDEA/sys/ps_setup_disable_consumer.sql @@ -0,0 +1,44 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_disable_consumer(IN consumer varchar(128)) comment ' +Description +----------- + +Disables consumers within Performance Schema +matching the input pattern. + +Parameters +----------- + +consumer (VARCHAR(128)): + A LIKE pattern match (using "%consumer%") of consumers to disable + +Example +----------- + +To disable all consumers: + +mysql> CALL sys.ps_setup_disable_consumer(''''); ++--------------------------+ +| summary | ++--------------------------+ +| Disabled 15 consumers | ++--------------------------+ +1 row in set (0.02 sec) + +To disable just the event_stage consumers: + +mysql> CALL sys.ps_setup_disable_comsumers(''stage''); ++------------------------+ +| summary | ++------------------------+ +| Disabled 3 consumers | ++------------------------+ +1 row in set (0.00 sec) +' sql security invoker modifies sql data +BEGIN + UPDATE performance_schema.setup_consumers + SET enabled = 'NO' + WHERE name LIKE CONCAT('%', consumer, '%'); + SELECT CONCAT('Disabled ', @rows := ROW_COUNT(), ' consumer', IF(@rows != 1, 's', '')) AS summary; +END; + diff --git a/IDEA/sys/ps_setup_disable_instrument.sql b/IDEA/sys/ps_setup_disable_instrument.sql new file mode 100644 index 00000000..a6c2d2cb --- /dev/null +++ b/IDEA/sys/ps_setup_disable_instrument.sql @@ -0,0 +1,54 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_disable_instrument(IN in_pattern varchar(128)) comment ' +Description +----------- + +Disables instruments within Performance Schema +matching the input pattern. + +Parameters +----------- + +in_pattern (VARCHAR(128)): + A LIKE pattern match (using "%in_pattern%") of events to disable + +Example +----------- + +To disable all mutex instruments: + +mysql> CALL sys.ps_setup_disable_instrument(''wait/synch/mutex''); ++--------------------------+ +| summary | ++--------------------------+ +| Disabled 155 instruments | ++--------------------------+ +1 row in set (0.02 sec) + +To disable just a specific TCP/IP based network IO instrument: + +mysql> CALL sys.ps_setup_disable_instrument(''wait/io/socket/sql/server_tcpip_socket''); ++------------------------+ +| summary | ++------------------------+ +| Disabled 1 instruments | ++------------------------+ +1 row in set (0.00 sec) + +To disable all instruments: + +mysql> CALL sys.ps_setup_disable_instrument(''''); ++--------------------------+ +| summary | ++--------------------------+ +| Disabled 547 instruments | ++--------------------------+ +1 row in set (0.01 sec) +' sql security invoker modifies sql data +BEGIN + UPDATE performance_schema.setup_instruments + SET enabled = 'NO', timed = 'NO' + WHERE name LIKE CONCAT('%', in_pattern, '%'); + SELECT CONCAT('Disabled ', @rows := ROW_COUNT(), ' instrument', IF(@rows != 1, 's', '')) AS summary; +END; + diff --git a/IDEA/sys/ps_setup_disable_thread.sql b/IDEA/sys/ps_setup_disable_thread.sql new file mode 100644 index 00000000..9700f008 --- /dev/null +++ b/IDEA/sys/ps_setup_disable_thread.sql @@ -0,0 +1,42 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_disable_thread(IN in_connection_id bigint) comment ' +Description +----------- + +Disable the given connection/thread in Performance Schema. + +Parameters +----------- + +in_connection_id (BIGINT): + The connection ID (PROCESSLIST_ID from performance_schema.threads + or the ID shown within SHOW PROCESSLIST) + +Example +----------- + +mysql> CALL sys.ps_setup_disable_thread(3); ++-------------------+ +| summary | ++-------------------+ +| Disabled 1 thread | ++-------------------+ +1 row in set (0.01 sec) + +To disable the current connection: + +mysql> CALL sys.ps_setup_disable_thread(CONNECTION_ID()); ++-------------------+ +| summary | ++-------------------+ +| Disabled 1 thread | ++-------------------+ +1 row in set (0.00 sec) +' sql security invoker modifies sql data +BEGIN + UPDATE performance_schema.threads + SET instrumented = 'NO' + WHERE processlist_id = in_connection_id; + SELECT CONCAT('Disabled ', @rows := ROW_COUNT(), ' thread', IF(@rows != 1, 's', '')) AS summary; +END; + diff --git a/IDEA/sys/ps_setup_enable_background_threads.sql b/IDEA/sys/ps_setup_enable_background_threads.sql new file mode 100644 index 00000000..24d04c97 --- /dev/null +++ b/IDEA/sys/ps_setup_enable_background_threads.sql @@ -0,0 +1,30 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_enable_background_threads() comment ' +Description +----------- + +Enable all background thread instrumentation within Performance Schema. + +Parameters +----------- + +None. + +Example +----------- + +mysql> CALL sys.ps_setup_enable_background_threads(); ++-------------------------------+ +| summary | ++-------------------------------+ +| Enabled 18 background threads | ++-------------------------------+ +1 row in set (0.00 sec) +' sql security invoker modifies sql data +BEGIN + UPDATE performance_schema.threads + SET instrumented = 'YES' + WHERE type = 'BACKGROUND'; + SELECT CONCAT('Enabled ', @rows := ROW_COUNT(), ' background thread', IF(@rows != 1, 's', '')) AS summary; +END; + diff --git a/IDEA/sys/ps_setup_enable_consumer.sql b/IDEA/sys/ps_setup_enable_consumer.sql new file mode 100644 index 00000000..04c30b2e --- /dev/null +++ b/IDEA/sys/ps_setup_enable_consumer.sql @@ -0,0 +1,48 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_enable_consumer(IN consumer varchar(128)) comment ' +Description +----------- + +Enables consumers within Performance Schema +matching the input pattern. + +Parameters +----------- + +consumer (VARCHAR(128)): + A LIKE pattern match (using "%consumer%") of consumers to enable + +Example +----------- + +To enable all consumers: + +mysql> CALL sys.ps_setup_enable_consumer(''''); ++-------------------------+ +| summary | ++-------------------------+ +| Enabled 10 consumers | ++-------------------------+ +1 row in set (0.02 sec) + +Query OK, 0 rows affected (0.02 sec) + +To enable just "waits" consumers: + +mysql> CALL sys.ps_setup_enable_consumer(''waits''); ++-----------------------+ +| summary | ++-----------------------+ +| Enabled 3 consumers | ++-----------------------+ +1 row in set (0.00 sec) + +Query OK, 0 rows affected (0.00 sec) +' sql security invoker modifies sql data +BEGIN + UPDATE performance_schema.setup_consumers + SET enabled = 'YES' + WHERE name LIKE CONCAT('%', consumer, '%'); + SELECT CONCAT('Enabled ', @rows := ROW_COUNT(), ' consumer', IF(@rows != 1, 's', '')) AS summary; +END; + diff --git a/IDEA/sys/ps_setup_enable_instrument.sql b/IDEA/sys/ps_setup_enable_instrument.sql new file mode 100644 index 00000000..3ff5bd2f --- /dev/null +++ b/IDEA/sys/ps_setup_enable_instrument.sql @@ -0,0 +1,60 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_enable_instrument(IN in_pattern varchar(128)) comment ' +Description +----------- + +Enables instruments within Performance Schema +matching the input pattern. + +Parameters +----------- + +in_pattern (VARCHAR(128)): + A LIKE pattern match (using "%in_pattern%") of events to enable + +Example +----------- + +To enable all mutex instruments: + +mysql> CALL sys.ps_setup_enable_instrument(''wait/synch/mutex''); ++-------------------------+ +| summary | ++-------------------------+ +| Enabled 155 instruments | ++-------------------------+ +1 row in set (0.02 sec) + +Query OK, 0 rows affected (0.02 sec) + +To enable just a specific TCP/IP based network IO instrument: + +mysql> CALL sys.ps_setup_enable_instrument(''wait/io/socket/sql/server_tcpip_socket''); ++-----------------------+ +| summary | ++-----------------------+ +| Enabled 1 instruments | ++-----------------------+ +1 row in set (0.00 sec) + +Query OK, 0 rows affected (0.00 sec) + +To enable all instruments: + +mysql> CALL sys.ps_setup_enable_instrument(''''); ++-------------------------+ +| summary | ++-------------------------+ +| Enabled 547 instruments | ++-------------------------+ +1 row in set (0.01 sec) + +Query OK, 0 rows affected (0.01 sec) +' sql security invoker modifies sql data +BEGIN + UPDATE performance_schema.setup_instruments + SET enabled = 'YES', timed = 'YES' + WHERE name LIKE CONCAT('%', in_pattern, '%'); + SELECT CONCAT('Enabled ', @rows := ROW_COUNT(), ' instrument', IF(@rows != 1, 's', '')) AS summary; +END; + diff --git a/IDEA/sys/ps_setup_enable_thread.sql b/IDEA/sys/ps_setup_enable_thread.sql new file mode 100644 index 00000000..0e874609 --- /dev/null +++ b/IDEA/sys/ps_setup_enable_thread.sql @@ -0,0 +1,42 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_enable_thread(IN in_connection_id bigint) comment ' +Description +----------- + +Enable the given connection/thread in Performance Schema. + +Parameters +----------- + +in_connection_id (BIGINT): + The connection ID (PROCESSLIST_ID from performance_schema.threads + or the ID shown within SHOW PROCESSLIST) + +Example +----------- + +mysql> CALL sys.ps_setup_enable_thread(3); ++------------------+ +| summary | ++------------------+ +| Enabled 1 thread | ++------------------+ +1 row in set (0.01 sec) + +To enable the current connection: + +mysql> CALL sys.ps_setup_enable_thread(CONNECTION_ID()); ++------------------+ +| summary | ++------------------+ +| Enabled 1 thread | ++------------------+ +1 row in set (0.00 sec) +' sql security invoker modifies sql data +BEGIN + UPDATE performance_schema.threads + SET instrumented = 'YES' + WHERE processlist_id = in_connection_id; + SELECT CONCAT('Enabled ', @rows := ROW_COUNT(), ' thread', IF(@rows != 1, 's', '')) AS summary; +END; + diff --git a/IDEA/sys/ps_setup_reload_saved.sql b/IDEA/sys/ps_setup_reload_saved.sql new file mode 100644 index 00000000..ed51be1d --- /dev/null +++ b/IDEA/sys/ps_setup_reload_saved.sql @@ -0,0 +1,109 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_reload_saved() comment ' +Description +----------- + +Reloads a saved Performance Schema configuration, +so that you can alter the setup for debugging purposes, +but restore it to a previous state. + +Use the companion procedure - ps_setup_save(), to +save a configuration. + +Requires the SUPER privilege for "SET sql_log_bin = 0;". + +Parameters +----------- + +None. + +Example +----------- + +mysql> CALL sys.ps_setup_save(); +Query OK, 0 rows affected (0.08 sec) + +mysql> UPDATE performance_schema.setup_instruments SET enabled = ''YES'', timed = ''YES''; +Query OK, 547 rows affected (0.40 sec) +Rows matched: 784 Changed: 547 Warnings: 0 + +/* Run some tests that need more detailed instrumentation here */ + +mysql> CALL sys.ps_setup_reload_saved(); +Query OK, 0 rows affected (0.32 sec) +' sql security invoker modifies sql data +BEGIN + DECLARE v_done bool DEFAULT FALSE; + DECLARE v_lock_result INT; + DECLARE v_lock_used_by BIGINT; + DECLARE v_signal_message TEXT; + DECLARE EXIT HANDLER FOR SQLEXCEPTION + BEGIN + SIGNAL SQLSTATE VALUE '90001' + SET MESSAGE_TEXT = 'An error occurred, was sys.ps_setup_save() run before this procedure?'; + END; + SET @log_bin := @@sql_log_bin; + SET sql_log_bin = 0; + SELECT IS_USED_LOCK('sys.ps_setup_save') INTO v_lock_used_by; + IF (v_lock_used_by != CONNECTION_ID()) THEN + SET v_signal_message = CONCAT('The sys.ps_setup_save lock is currently owned by ', v_lock_used_by); + SIGNAL SQLSTATE VALUE '90002' + SET MESSAGE_TEXT = v_signal_message; + END IF; + DELETE FROM performance_schema.setup_actors; + INSERT INTO performance_schema.setup_actors SELECT * FROM tmp_setup_actors; + BEGIN + -- Workaround for http://bugs.mysql.com/bug.php?id=70025 + DECLARE v_name varchar(64); + DECLARE v_enabled enum('YES', 'NO'); + DECLARE c_consumers CURSOR FOR SELECT NAME, ENABLED FROM tmp_setup_consumers; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; + SET v_done = FALSE; + OPEN c_consumers; + c_consumers_loop: LOOP + FETCH c_consumers INTO v_name, v_enabled; + IF v_done THEN + LEAVE c_consumers_loop; + END IF; + UPDATE performance_schema.setup_consumers + SET ENABLED = v_enabled + WHERE NAME = v_name; + END LOOP; + CLOSE c_consumers; + END; + UPDATE performance_schema.setup_instruments + INNER JOIN tmp_setup_instruments USING (NAME) + SET performance_schema.setup_instruments.ENABLED = tmp_setup_instruments.ENABLED, + performance_schema.setup_instruments.TIMED = tmp_setup_instruments.TIMED; + BEGIN + -- Workaround for http://bugs.mysql.com/bug.php?id=70025 + DECLARE v_thread_id bigint unsigned; + DECLARE v_instrumented enum('YES', 'NO'); + DECLARE c_threads CURSOR FOR SELECT THREAD_ID, INSTRUMENTED FROM tmp_threads; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; + SET v_done = FALSE; + OPEN c_threads; + c_threads_loop: LOOP + FETCH c_threads INTO v_thread_id, v_instrumented; + IF v_done THEN + LEAVE c_threads_loop; + END IF; + UPDATE performance_schema.threads + SET INSTRUMENTED = v_instrumented + WHERE THREAD_ID = v_thread_id; + END LOOP; + CLOSE c_threads; + END; + UPDATE performance_schema.threads + SET INSTRUMENTED = IF(PROCESSLIST_USER IS NOT NULL, + sys.ps_is_account_enabled(PROCESSLIST_HOST, PROCESSLIST_USER), + 'YES') + WHERE THREAD_ID NOT IN (SELECT THREAD_ID FROM tmp_threads); + DROP TEMPORARY TABLE tmp_setup_actors; + DROP TEMPORARY TABLE tmp_setup_consumers; + DROP TEMPORARY TABLE tmp_setup_instruments; + DROP TEMPORARY TABLE tmp_threads; + SELECT RELEASE_LOCK('sys.ps_setup_save') INTO v_lock_result; + SET sql_log_bin = @log_bin; +END; + diff --git a/IDEA/sys/ps_setup_reset_to_default.sql b/IDEA/sys/ps_setup_reset_to_default.sql new file mode 100644 index 00000000..3602c3b2 --- /dev/null +++ b/IDEA/sys/ps_setup_reset_to_default.sql @@ -0,0 +1,119 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_reset_to_default(IN in_verbose tinyint(1)) comment ' +Description +----------- + +Resets the Performance Schema setup to the default settings. + +Parameters +----------- + +in_verbose (BOOLEAN): + Whether to print each setup stage (including the SQL) whilst running. + +Example +----------- + +mysql> CALL sys.ps_setup_reset_to_default(true)\G +*************************** 1. row *************************** +status: Resetting: setup_actors +DELETE +FROM performance_schema.setup_actors + WHERE NOT (HOST = ''%'' AND USER = ''%'' AND `ROLE` = ''%'') +1 row in set (0.00 sec) + +*************************** 1. row *************************** +status: Resetting: setup_actors +INSERT IGNORE INTO performance_schema.setup_actors +VALUES (''%'', ''%'', ''%'') +1 row in set (0.00 sec) +... + +mysql> CALL sys.ps_setup_reset_to_default(false)\G +Query OK, 0 rows affected (0.00 sec) +' sql security invoker modifies sql data +BEGIN + SET @query = 'DELETE + FROM performance_schema.setup_actors + WHERE NOT (HOST = ''%'' AND USER = ''%'' AND `ROLE` = ''%'')'; + IF (in_verbose) THEN + SELECT CONCAT('Resetting: setup_actors\n', REPLACE(@query, ' ', '')) AS status; + END IF; + PREPARE reset_stmt FROM @query; + EXECUTE reset_stmt; + DEALLOCATE PREPARE reset_stmt; + SET @query = 'INSERT IGNORE INTO performance_schema.setup_actors + VALUES (''%'', ''%'', ''%'', ''YES'', ''YES'')'; + IF (in_verbose) THEN + SELECT CONCAT('Resetting: setup_actors\n', REPLACE(@query, ' ', '')) AS status; + END IF; + PREPARE reset_stmt FROM @query; + EXECUTE reset_stmt; + DEALLOCATE PREPARE reset_stmt; + SET @query = 'UPDATE performance_schema.setup_instruments + SET ENABLED = sys.ps_is_instrument_default_enabled(NAME), + TIMED = sys.ps_is_instrument_default_timed(NAME)'; + IF (in_verbose) THEN + SELECT CONCAT('Resetting: setup_instruments\n', REPLACE(@query, ' ', '')) AS status; + END IF; + PREPARE reset_stmt FROM @query; + EXECUTE reset_stmt; + DEALLOCATE PREPARE reset_stmt; + SET @query = 'UPDATE performance_schema.setup_consumers + SET ENABLED = IF(NAME IN (''events_statements_current'', ''events_transactions_current'', ''global_instrumentation'', ''thread_instrumentation'', ''statements_digest''), ''YES'', ''NO'')'; + IF (in_verbose) THEN + SELECT CONCAT('Resetting: setup_consumers\n', REPLACE(@query, ' ', '')) AS status; + END IF; + PREPARE reset_stmt FROM @query; + EXECUTE reset_stmt; + DEALLOCATE PREPARE reset_stmt; + SET @query = 'DELETE + FROM performance_schema.setup_objects + WHERE NOT (OBJECT_TYPE IN (''EVENT'', ''FUNCTION'', ''PROCEDURE'', ''TABLE'', ''TRIGGER'') AND OBJECT_NAME = ''%'' + AND (OBJECT_SCHEMA = ''mysql'' AND ENABLED = ''NO'' AND TIMED = ''NO'' ) + OR (OBJECT_SCHEMA = ''performance_schema'' AND ENABLED = ''NO'' AND TIMED = ''NO'' ) + OR (OBJECT_SCHEMA = ''information_schema'' AND ENABLED = ''NO'' AND TIMED = ''NO'' ) + OR (OBJECT_SCHEMA = ''%'' AND ENABLED = ''YES'' AND TIMED = ''YES''))'; + IF (in_verbose) THEN + SELECT CONCAT('Resetting: setup_objects\n', REPLACE(@query, ' ', '')) AS status; + END IF; + PREPARE reset_stmt FROM @query; + EXECUTE reset_stmt; + DEALLOCATE PREPARE reset_stmt; + SET @query = 'INSERT IGNORE INTO performance_schema.setup_objects + VALUES (''EVENT'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ), + (''EVENT'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ), + (''EVENT'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ), + (''EVENT'' , ''%'' , ''%'', ''YES'', ''YES''), + (''FUNCTION'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ), + (''FUNCTION'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ), + (''FUNCTION'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ), + (''FUNCTION'' , ''%'' , ''%'', ''YES'', ''YES''), + (''PROCEDURE'', ''mysql'' , ''%'', ''NO'' , ''NO'' ), + (''PROCEDURE'', ''performance_schema'', ''%'', ''NO'' , ''NO'' ), + (''PROCEDURE'', ''information_schema'', ''%'', ''NO'' , ''NO'' ), + (''PROCEDURE'', ''%'' , ''%'', ''YES'', ''YES''), + (''TABLE'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ), + (''TABLE'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ), + (''TABLE'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ), + (''TABLE'' , ''%'' , ''%'', ''YES'', ''YES''), + (''TRIGGER'' , ''mysql'' , ''%'', ''NO'' , ''NO'' ), + (''TRIGGER'' , ''performance_schema'', ''%'', ''NO'' , ''NO'' ), + (''TRIGGER'' , ''information_schema'', ''%'', ''NO'' , ''NO'' ), + (''TRIGGER'' , ''%'' , ''%'', ''YES'', ''YES'')'; + IF (in_verbose) THEN + SELECT CONCAT('Resetting: setup_objects\n', REPLACE(@query, ' ', '')) AS status; + END IF; + PREPARE reset_stmt FROM @query; + EXECUTE reset_stmt; + DEALLOCATE PREPARE reset_stmt; + SET @query = 'UPDATE performance_schema.threads + SET INSTRUMENTED = ''YES'''; + IF (in_verbose) THEN + SELECT CONCAT('Resetting: threads\n', REPLACE(@query, ' ', '')) AS status; + END IF; + PREPARE reset_stmt FROM @query; + EXECUTE reset_stmt; + DEALLOCATE PREPARE reset_stmt; +END; + diff --git a/IDEA/sys/ps_setup_save.sql b/IDEA/sys/ps_setup_save.sql new file mode 100644 index 00000000..635a59a4 --- /dev/null +++ b/IDEA/sys/ps_setup_save.sql @@ -0,0 +1,69 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_save(IN in_timeout int) comment ' +Description +----------- + +Saves the current configuration of Performance Schema, +so that you can alter the setup for debugging purposes, +but restore it to a previous state. + +Use the companion procedure - ps_setup_reload_saved(), to +restore the saved config. + +The named lock "sys.ps_setup_save" is taken before the +current configuration is saved. If the attempt to get the named +lock times out, an error occurs. + +The lock is released after the settings have been restored by +calling ps_setup_reload_saved(). + +Requires the SUPER privilege for "SET sql_log_bin = 0;". + +Parameters +----------- + +in_timeout INT + The timeout in seconds used when trying to obtain the lock. + A negative timeout means infinite timeout. + +Example +----------- + +mysql> CALL sys.ps_setup_save(-1); +Query OK, 0 rows affected (0.08 sec) + +mysql> UPDATE performance_schema.setup_instruments + -> SET enabled = ''YES'', timed = ''YES''; +Query OK, 547 rows affected (0.40 sec) +Rows matched: 784 Changed: 547 Warnings: 0 + +/* Run some tests that need more detailed instrumentation here */ + +mysql> CALL sys.ps_setup_reload_saved(); +Query OK, 0 rows affected (0.32 sec) +' sql security invoker modifies sql data +BEGIN + DECLARE v_lock_result INT; + SET @log_bin := @@sql_log_bin; + SET sql_log_bin = 0; + SELECT GET_LOCK('sys.ps_setup_save', in_timeout) INTO v_lock_result; + IF v_lock_result THEN + DROP TEMPORARY TABLE IF EXISTS tmp_setup_actors; + DROP TEMPORARY TABLE IF EXISTS tmp_setup_consumers; + DROP TEMPORARY TABLE IF EXISTS tmp_setup_instruments; + DROP TEMPORARY TABLE IF EXISTS tmp_threads; + CREATE TEMPORARY TABLE tmp_setup_actors SELECT * FROM performance_schema.setup_actors LIMIT 0; + CREATE TEMPORARY TABLE tmp_setup_consumers LIKE performance_schema.setup_consumers; + CREATE TEMPORARY TABLE tmp_setup_instruments LIKE performance_schema.setup_instruments; + CREATE TEMPORARY TABLE tmp_threads (THREAD_ID bigint unsigned NOT NULL PRIMARY KEY, INSTRUMENTED enum('YES','NO') NOT NULL); + INSERT INTO tmp_setup_actors SELECT * FROM performance_schema.setup_actors; + INSERT INTO tmp_setup_consumers SELECT * FROM performance_schema.setup_consumers; + INSERT INTO tmp_setup_instruments SELECT * FROM performance_schema.setup_instruments; + INSERT INTO tmp_threads SELECT THREAD_ID, INSTRUMENTED FROM performance_schema.threads; + ELSE + SIGNAL SQLSTATE VALUE '90000' + SET MESSAGE_TEXT = 'Could not lock the sys.ps_setup_save user lock, another thread has a saved configuration'; + END IF; + SET sql_log_bin = @log_bin; +END; + diff --git a/IDEA/sys/ps_setup_show_disabled.sql b/IDEA/sys/ps_setup_show_disabled.sql new file mode 100644 index 00000000..29dd9d56 --- /dev/null +++ b/IDEA/sys/ps_setup_show_disabled.sql @@ -0,0 +1,129 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_show_disabled(IN in_show_instruments tinyint(1), IN in_show_threads tinyint(1)) + comment ' +Description +----------- + +Shows all currently disable Performance Schema configuration. + +Disabled users is only available for MySQL 5.7.6 and later. +In earlier versions it was only possible to enable users. + +Parameters +----------- + +in_show_instruments (BOOLEAN): + Whether to print disabled instruments (can print many items) + +in_show_threads (BOOLEAN): + Whether to print disabled threads + +Example +----------- + +mysql> CALL sys.ps_setup_show_disabled(TRUE, TRUE); ++----------------------------+ +| performance_schema_enabled | ++----------------------------+ +| 1 | ++----------------------------+ +1 row in set (0.00 sec) + ++--------------------+ +| disabled_users | ++--------------------+ +| ''mark''@''localhost'' | ++--------------------+ +1 row in set (0.00 sec) + ++-------------+----------------------+---------+-------+ +| object_type | objects | enabled | timed | ++-------------+----------------------+---------+-------+ +| EVENT | mysql.% | NO | NO | +| EVENT | performance_schema.% | NO | NO | +| EVENT | information_schema.% | NO | NO | +| FUNCTION | mysql.% | NO | NO | +| FUNCTION | performance_schema.% | NO | NO | +| FUNCTION | information_schema.% | NO | NO | +| PROCEDURE | mysql.% | NO | NO | +| PROCEDURE | performance_schema.% | NO | NO | +| PROCEDURE | information_schema.% | NO | NO | +| TABLE | mysql.% | NO | NO | +| TABLE | performance_schema.% | NO | NO | +| TABLE | information_schema.% | NO | NO | +| TRIGGER | mysql.% | NO | NO | +| TRIGGER | performance_schema.% | NO | NO | +| TRIGGER | information_schema.% | NO | NO | ++-------------+----------------------+---------+-------+ +15 rows in set (0.00 sec) + ++----------------------------------+ +| disabled_consumers | ++----------------------------------+ +| events_stages_current | +| events_stages_history | +| events_stages_history_long | +| events_statements_history | +| events_statements_history_long | +| events_transactions_history | +| events_transactions_history_long | +| events_waits_current | +| events_waits_history | +| events_waits_history_long | ++----------------------------------+ +10 rows in set (0.00 sec) + +Empty set (0.00 sec) + ++---------------------------------------------------------------------------------------+-------+ +| disabled_instruments | timed | ++---------------------------------------------------------------------------------------+-------+ +| wait/synch/mutex/sql/TC_LOG_MMAP::LOCK_tc | NO | +| wait/synch/mutex/sql/LOCK_des_key_file | NO | +| wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_commit | NO | +... +| memory/sql/servers_cache | NO | +| memory/sql/udf_mem | NO | +| wait/lock/metadata/sql/mdl | NO | ++---------------------------------------------------------------------------------------+-------+ +547 rows in set (0.00 sec) + +Query OK, 0 rows affected (0.01 sec) +' + sql security invoker + reads sql data +BEGIN + SELECT @@performance_schema AS performance_schema_enabled; + SELECT CONCAT('\'', user, '\'@\'', host, '\'') AS disabled_users + FROM performance_schema.setup_actors + WHERE enabled = 'NO' + ORDER BY disabled_users; + SELECT object_type, + CONCAT(object_schema, '.', object_name) AS objects, + enabled, + timed + FROM performance_schema.setup_objects + WHERE enabled = 'NO' + ORDER BY object_type, objects; + SELECT name AS disabled_consumers + FROM performance_schema.setup_consumers + WHERE enabled = 'NO' + ORDER BY disabled_consumers; + IF (in_show_threads) THEN + SELECT IF(name = 'thread/sql/one_connection', + CONCAT(processlist_user, '@', processlist_host), + REPLACE(name, 'thread/', '')) AS disabled_threads, + TYPE AS thread_type + FROM performance_schema.threads + WHERE INSTRUMENTED = 'NO' + ORDER BY disabled_threads; + END IF; + IF (in_show_instruments) THEN + SELECT name AS disabled_instruments, + timed + FROM performance_schema.setup_instruments + WHERE enabled = 'NO' + ORDER BY disabled_instruments; + END IF; +END; + diff --git a/IDEA/sys/ps_setup_show_disabled_consumers.sql b/IDEA/sys/ps_setup_show_disabled_consumers.sql new file mode 100644 index 00000000..24813765 --- /dev/null +++ b/IDEA/sys/ps_setup_show_disabled_consumers.sql @@ -0,0 +1,34 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_show_disabled_consumers() comment ' +Description +----------- + +Shows all currently disabled consumers. + +Parameters +----------- + +None + +Example +----------- + +mysql> CALL sys.ps_setup_show_disabled_consumers(); + ++---------------------------+ +| disabled_consumers | ++---------------------------+ +| events_statements_current | +| global_instrumentation | +| thread_instrumentation | +| statements_digest | ++---------------------------+ +4 rows in set (0.05 sec) +' deterministic sql security invoker reads sql data +BEGIN + SELECT name AS disabled_consumers + FROM performance_schema.setup_consumers + WHERE enabled = 'NO' + ORDER BY disabled_consumers; +END; + diff --git a/IDEA/sys/ps_setup_show_disabled_instruments.sql b/IDEA/sys/ps_setup_show_disabled_instruments.sql new file mode 100644 index 00000000..ebefb36e --- /dev/null +++ b/IDEA/sys/ps_setup_show_disabled_instruments.sql @@ -0,0 +1,24 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_show_disabled_instruments() comment ' +Description +----------- + +Shows all currently disabled instruments. + +Parameters +----------- + +None + +Example +----------- + +mysql> CALL sys.ps_setup_show_disabled_instruments(); +' deterministic sql security invoker reads sql data +BEGIN + SELECT name AS disabled_instruments, timed + FROM performance_schema.setup_instruments + WHERE enabled = 'NO' + ORDER BY disabled_instruments; +END; + diff --git a/IDEA/sys/ps_setup_show_enabled.sql b/IDEA/sys/ps_setup_show_enabled.sql new file mode 100644 index 00000000..d5758307 --- /dev/null +++ b/IDEA/sys/ps_setup_show_enabled.sql @@ -0,0 +1,136 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_show_enabled(IN in_show_instruments tinyint(1), IN in_show_threads tinyint(1)) + comment ' +Description +----------- + +Shows all currently enabled Performance Schema configuration. + +Parameters +----------- + +in_show_instruments (BOOLEAN): + Whether to print enabled instruments (can print many items) + +in_show_threads (BOOLEAN): + Whether to print enabled threads + +Example +----------- + +mysql> CALL sys.ps_setup_show_enabled(TRUE, TRUE); ++----------------------------+ +| performance_schema_enabled | ++----------------------------+ +| 1 | ++----------------------------+ +1 row in set (0.00 sec) + ++---------------+ +| enabled_users | ++---------------+ +| ''%''@''%'' | ++---------------+ +1 row in set (0.01 sec) + ++-------------+---------+---------+-------+ +| object_type | objects | enabled | timed | ++-------------+---------+---------+-------+ +| EVENT | %.% | YES | YES | +| FUNCTION | %.% | YES | YES | +| PROCEDURE | %.% | YES | YES | +| TABLE | %.% | YES | YES | +| TRIGGER | %.% | YES | YES | ++-------------+---------+---------+-------+ +5 rows in set (0.01 sec) + ++---------------------------+ +| enabled_consumers | ++---------------------------+ +| events_statements_current | +| global_instrumentation | +| thread_instrumentation | +| statements_digest | ++---------------------------+ +4 rows in set (0.05 sec) + ++---------------------------------+-------------+ +| enabled_threads | thread_type | ++---------------------------------+-------------+ +| sql/main | BACKGROUND | +| sql/thread_timer_notifier | BACKGROUND | +| innodb/io_ibuf_thread | BACKGROUND | +| innodb/io_log_thread | BACKGROUND | +| innodb/io_read_thread | BACKGROUND | +| innodb/io_read_thread | BACKGROUND | +| innodb/io_write_thread | BACKGROUND | +| innodb/io_write_thread | BACKGROUND | +| innodb/page_cleaner_thread | BACKGROUND | +| innodb/srv_lock_timeout_thread | BACKGROUND | +| innodb/srv_error_monitor_thread | BACKGROUND | +| innodb/srv_monitor_thread | BACKGROUND | +| innodb/srv_master_thread | BACKGROUND | +| innodb/srv_purge_thread | BACKGROUND | +| innodb/srv_worker_thread | BACKGROUND | +| innodb/srv_worker_thread | BACKGROUND | +| innodb/srv_worker_thread | BACKGROUND | +| innodb/buf_dump_thread | BACKGROUND | +| innodb/dict_stats_thread | BACKGROUND | +| sql/signal_handler | BACKGROUND | +| sql/compress_gtid_table | FOREGROUND | +| root@localhost | FOREGROUND | ++---------------------------------+-------------+ +22 rows in set (0.01 sec) + ++-------------------------------------+-------+ +| enabled_instruments | timed | ++-------------------------------------+-------+ +| wait/io/file/sql/map | YES | +| wait/io/file/sql/binlog | YES | +... +| statement/com/Error | YES | +| statement/com/ | YES | +| idle | YES | ++-------------------------------------+-------+ +210 rows in set (0.08 sec) + +Query OK, 0 rows affected (0.89 sec) +' + deterministic + sql security invoker + reads sql data +BEGIN + SELECT @@performance_schema AS performance_schema_enabled; + SELECT CONCAT('\'', user, '\'@\'', host, '\'') AS enabled_users + FROM performance_schema.setup_actors + WHERE enabled = 'YES' + ORDER BY enabled_users; + SELECT object_type, + CONCAT(object_schema, '.', object_name) AS objects, + enabled, + timed + FROM performance_schema.setup_objects + WHERE enabled = 'YES' + ORDER BY object_type, objects; + SELECT name AS enabled_consumers + FROM performance_schema.setup_consumers + WHERE enabled = 'YES' + ORDER BY enabled_consumers; + IF (in_show_threads) THEN + SELECT IF(name = 'thread/sql/one_connection', + CONCAT(processlist_user, '@', processlist_host), + REPLACE(name, 'thread/', '')) AS enabled_threads, + TYPE AS thread_type + FROM performance_schema.threads + WHERE INSTRUMENTED = 'YES' + ORDER BY enabled_threads; + END IF; + IF (in_show_instruments) THEN + SELECT name AS enabled_instruments, + timed + FROM performance_schema.setup_instruments + WHERE enabled = 'YES' + ORDER BY enabled_instruments; + END IF; +END; + diff --git a/IDEA/sys/ps_setup_show_enabled_consumers.sql b/IDEA/sys/ps_setup_show_enabled_consumers.sql new file mode 100644 index 00000000..220d6e83 --- /dev/null +++ b/IDEA/sys/ps_setup_show_enabled_consumers.sql @@ -0,0 +1,34 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_show_enabled_consumers() comment ' +Description +----------- + +Shows all currently enabled consumers. + +Parameters +----------- + +None + +Example +----------- + +mysql> CALL sys.ps_setup_show_enabled_consumers(); + ++---------------------------+ +| enabled_consumers | ++---------------------------+ +| events_statements_current | +| global_instrumentation | +| thread_instrumentation | +| statements_digest | ++---------------------------+ +4 rows in set (0.05 sec) +' deterministic sql security invoker reads sql data +BEGIN + SELECT name AS enabled_consumers + FROM performance_schema.setup_consumers + WHERE enabled = 'YES' + ORDER BY enabled_consumers; +END; + diff --git a/IDEA/sys/ps_setup_show_enabled_instruments.sql b/IDEA/sys/ps_setup_show_enabled_instruments.sql new file mode 100644 index 00000000..c2fe8f03 --- /dev/null +++ b/IDEA/sys/ps_setup_show_enabled_instruments.sql @@ -0,0 +1,24 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_setup_show_enabled_instruments() comment ' +Description +----------- + +Shows all currently enabled instruments. + +Parameters +----------- + +None + +Example +----------- + +mysql> CALL sys.ps_setup_show_enabled_instruments(); +' deterministic sql security invoker reads sql data +BEGIN + SELECT name AS enabled_instruments, timed + FROM performance_schema.setup_instruments + WHERE enabled = 'YES' + ORDER BY enabled_instruments; +END; + diff --git a/IDEA/sys/ps_statement_avg_latency_histogram.sql b/IDEA/sys/ps_statement_avg_latency_histogram.sql new file mode 100644 index 00000000..a2246aa7 --- /dev/null +++ b/IDEA/sys/ps_statement_avg_latency_histogram.sql @@ -0,0 +1,203 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_statement_avg_latency_histogram() comment ' +Description +----------- + +Outputs a textual histogram graph of the average latency values +across all normalized queries tracked within the Performance Schema +events_statements_summary_by_digest table. + +Can be used to show a very high level picture of what kind of +latency distribution statements running within this instance have. + +Parameters +----------- + +None. + +Example +----------- + +mysql> CALL sys.ps_statement_avg_latency_histogram()\G +*************************** 1. row *************************** +Performance Schema Statement Digest Average Latency Histogram: + + . = 1 unit + * = 2 units + # = 3 units + +(0 - 38ms) 240 | ################################################################################ +(38 - 77ms) 38 | ...................................... +(77 - 115ms) 3 | ... +(115 - 154ms) 62 | ******************************* +(154 - 192ms) 3 | ... +(192 - 231ms) 0 | +(231 - 269ms) 0 | +(269 - 307ms) 0 | +(307 - 346ms) 0 | +(346 - 384ms) 1 | . +(384 - 423ms) 1 | . +(423 - 461ms) 0 | +(461 - 499ms) 0 | +(499 - 538ms) 0 | +(538 - 576ms) 0 | +(576 - 615ms) 1 | . + + Total Statements: 350; Buckets: 16; Bucket Size: 38 ms; +' sql security invoker reads sql data +BEGIN +SELECT CONCAT('\n', + '\n . = 1 unit', + '\n * = 2 units', + '\n # = 3 units\n', + @label := CONCAT(@label_inner := CONCAT('\n(0 - ', + ROUND((@bucket_size := (SELECT ROUND((MAX(avg_us) - MIN(avg_us)) / (@buckets := 16)) AS size + FROM sys.x$ps_digest_avg_latency_distribution)) / (@unit_div := 1000)), + (@unit := 'ms'), ')'), + REPEAT(' ', (@max_label_size := ((1 + LENGTH(ROUND((@bucket_size * 15) / @unit_div)) + 3 + LENGTH(ROUND(@bucket_size * 16) / @unit_div)) + 1)) - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us <= @bucket_size), 0)), + REPEAT(' ', (@max_label_len := (@max_label_size + LENGTH((@total_queries := (SELECT SUM(cnt) FROM sys.x$ps_digest_avg_latency_distribution)))) + 1) - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < (@one_unit := 40), '.', IF(@count_in_bucket < (@two_unit := 80), '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND(@bucket_size / @unit_div), ' - ', ROUND((@bucket_size * 2) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size AND b1.avg_us <= @bucket_size * 2), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 2) / @unit_div), ' - ', ROUND((@bucket_size * 3) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 2 AND b1.avg_us <= @bucket_size * 3), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 3) / @unit_div), ' - ', ROUND((@bucket_size * 4) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 3 AND b1.avg_us <= @bucket_size * 4), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 4) / @unit_div), ' - ', ROUND((@bucket_size * 5) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 4 AND b1.avg_us <= @bucket_size * 5), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 5) / @unit_div), ' - ', ROUND((@bucket_size * 6) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 5 AND b1.avg_us <= @bucket_size * 6), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 6) / @unit_div), ' - ', ROUND((@bucket_size * 7) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 6 AND b1.avg_us <= @bucket_size * 7), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 7) / @unit_div), ' - ', ROUND((@bucket_size * 8) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 7 AND b1.avg_us <= @bucket_size * 8), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 8) / @unit_div), ' - ', ROUND((@bucket_size * 9) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 8 AND b1.avg_us <= @bucket_size * 9), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 9) / @unit_div), ' - ', ROUND((@bucket_size * 10) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 9 AND b1.avg_us <= @bucket_size * 10), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 10) / @unit_div), ' - ', ROUND((@bucket_size * 11) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 10 AND b1.avg_us <= @bucket_size * 11), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 11) / @unit_div), ' - ', ROUND((@bucket_size * 12) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 11 AND b1.avg_us <= @bucket_size * 12), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 12) / @unit_div), ' - ', ROUND((@bucket_size * 13) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 12 AND b1.avg_us <= @bucket_size * 13), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 13) / @unit_div), ' - ', ROUND((@bucket_size * 14) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 13 AND b1.avg_us <= @bucket_size * 14), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 14) / @unit_div), ' - ', ROUND((@bucket_size * 15) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 14 AND b1.avg_us <= @bucket_size * 15), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + @label := CONCAT(@label_inner := CONCAT('\n(', ROUND((@bucket_size * 15) / @unit_div), ' - ', ROUND((@bucket_size * 16) / @unit_div), @unit, ')'), + REPEAT(' ', @max_label_size - LENGTH(@label_inner)), + @count_in_bucket := IFNULL((SELECT SUM(cnt) + FROM sys.x$ps_digest_avg_latency_distribution AS b1 + WHERE b1.avg_us > @bucket_size * 15 AND b1.avg_us <= @bucket_size * 16), 0)), + REPEAT(' ', @max_label_len - LENGTH(@label)), '| ', + IFNULL(REPEAT(IF(@count_in_bucket < @one_unit, '.', IF(@count_in_bucket < @two_unit, '*', '#')), + IF(@count_in_bucket < @one_unit, @count_in_bucket, + IF(@count_in_bucket < @two_unit, @count_in_bucket / 2, @count_in_bucket / 3))), ''), + '\n\n Total Statements: ', @total_queries, '; Buckets: ', @buckets , '; Bucket Size: ', ROUND(@bucket_size / @unit_div) , ' ', @unit, ';\n' + ) AS `Performance Schema Statement Digest Average Latency Histogram`; +END; + diff --git a/IDEA/sys/ps_thread_account.sql b/IDEA/sys/ps_thread_account.sql new file mode 100644 index 00000000..85123a50 --- /dev/null +++ b/IDEA/sys/ps_thread_account.sql @@ -0,0 +1,45 @@ +create + definer = `mysql.sys`@localhost function sys.ps_thread_account(in_thread_id bigint unsigned) returns text comment ' +Description +----------- + +Return the user@host account for the given Performance Schema thread id. + +Parameters +----------- + +in_thread_id (BIGINT UNSIGNED): + The id of the thread to return the account for. + +Example +----------- + +mysql> select thread_id, processlist_user, processlist_host from performance_schema.threads where type = ''foreground''; ++-----------+------------------+------------------+ +| thread_id | processlist_user | processlist_host | ++-----------+------------------+------------------+ +| 23 | NULL | NULL | +| 30 | root | localhost | +| 31 | msandbox | localhost | +| 32 | msandbox | localhost | ++-----------+------------------+------------------+ +4 rows in set (0.00 sec) + +mysql> select sys.ps_thread_account(31); ++---------------------------+ +| sys.ps_thread_account(31) | ++---------------------------+ +| msandbox@localhost | ++---------------------------+ +1 row in set (0.00 sec) +' sql security invoker reads sql data +BEGIN + RETURN (SELECT IF( + type = 'FOREGROUND', + CONCAT(processlist_user, '@', processlist_host), + type + ) AS account + FROM `performance_schema`.`threads` + WHERE thread_id = in_thread_id); +END; + diff --git a/IDEA/sys/ps_thread_id.sql b/IDEA/sys/ps_thread_id.sql new file mode 100644 index 00000000..db6c239e --- /dev/null +++ b/IDEA/sys/ps_thread_id.sql @@ -0,0 +1,44 @@ +create + definer = `mysql.sys`@localhost function sys.ps_thread_id(in_connection_id bigint unsigned) returns bigint unsigned + comment ' +Description +----------- + +Return the Performance Schema THREAD_ID for the specified connection ID. + +Parameters +----------- + +in_connection_id (BIGINT UNSIGNED): + The id of the connection to return the thread id for. If NULL, the current + connection thread id is returned. + +Example +----------- + +mysql> SELECT sys.ps_thread_id(79); ++----------------------+ +| sys.ps_thread_id(79) | ++----------------------+ +| 98 | ++----------------------+ +1 row in set (0.00 sec) + +mysql> SELECT sys.ps_thread_id(CONNECTION_ID()); ++-----------------------------------+ +| sys.ps_thread_id(CONNECTION_ID()) | ++-----------------------------------+ +| 98 | ++-----------------------------------+ +1 row in set (0.00 sec) +' + sql security invoker + reads sql data +BEGIN + IF (in_connection_id IS NULL) THEN + RETURN ps_current_thread_id(); + ELSE + RETURN ps_thread_id(in_connection_id); + END IF; +END; + diff --git a/IDEA/sys/ps_thread_stack.sql b/IDEA/sys/ps_thread_stack.sql new file mode 100644 index 00000000..a7994380 --- /dev/null +++ b/IDEA/sys/ps_thread_stack.sql @@ -0,0 +1,138 @@ +create + definer = `mysql.sys`@localhost function sys.ps_thread_stack(thd_id bigint unsigned, debug tinyint(1)) returns longtext + comment ' +Description +----------- + +Outputs a JSON formatted stack of all statements, stages and events +within Performance Schema for the specified thread. + +Parameters +----------- + +thd_id (BIGINT UNSIGNED): + The id of the thread to trace. This should match the thread_id + column from the performance_schema.threads table. +in_verbose (BOOLEAN): + Include file:lineno information in the events. + +Example +----------- + +(line separation added for output) + +mysql> SELECT sys.ps_thread_stack(37, FALSE) AS thread_stack\G +*************************** 1. row *************************** +thread_stack: {"rankdir": "LR","nodesep": "0.10","stack_created": "2014-02-19 13:39:03", +"mysql_version": "5.7.3-m13","mysql_user": "root@localhost","events": +[{"nesting_event_id": "0", "event_id": "10", "timer_wait": 256.35, "event_info": +"sql/select", "wait_info": "select @@version_comment limit 1\nerrors: 0\nwarnings: 0\nlock time: +... +' + sql security invoker + reads sql data +BEGIN + DECLARE json_objects LONGTEXT; + -- Do not track the current thread, it will kill the stack + UPDATE performance_schema.threads + SET instrumented = 'NO' + WHERE processlist_id = CONNECTION_ID(); + SET SESSION group_concat_max_len=@@global.max_allowed_packet; + -- Select the entire stack of events + SELECT GROUP_CONCAT(CONCAT( '{' + , CONCAT_WS( ', ' + , CONCAT('"nesting_event_id": "', IF(nesting_event_id IS NULL, '0', nesting_event_id), '"') + , CONCAT('"event_id": "', event_id, '"') + -- Convert from picoseconds to microseconds + , CONCAT( '"timer_wait": ', ROUND(timer_wait/1000000, 2)) + , CONCAT( '"event_info": "' + , CASE + WHEN event_name NOT LIKE 'wait/io%' THEN REPLACE(SUBSTRING_INDEX(event_name, '/', -2), '\\', '\\\\') + WHEN event_name NOT LIKE 'wait/io/file%' OR event_name NOT LIKE 'wait/io/socket%' THEN REPLACE(SUBSTRING_INDEX(event_name, '/', -4), '\\', '\\\\') + ELSE event_name + END + , '"' + ) + -- Always dump the extra wait information gathered for statements + , CONCAT( '"wait_info": "', IFNULL(wait_info, ''), '"') + -- If debug is enabled, add the file:lineno information for waits + , CONCAT( '"source": "', IF(true AND event_name LIKE 'wait%', IFNULL(wait_info, ''), ''), '"') + -- Depending on the type of event, name it appropriately + , CASE + WHEN event_name LIKE 'wait/io/file%' THEN '"event_type": "io/file"' + WHEN event_name LIKE 'wait/io/table%' THEN '"event_type": "io/table"' + WHEN event_name LIKE 'wait/io/socket%' THEN '"event_type": "io/socket"' + WHEN event_name LIKE 'wait/synch/mutex%' THEN '"event_type": "synch/mutex"' + WHEN event_name LIKE 'wait/synch/cond%' THEN '"event_type": "synch/cond"' + WHEN event_name LIKE 'wait/synch/rwlock%' THEN '"event_type": "synch/rwlock"' + WHEN event_name LIKE 'wait/lock%' THEN '"event_type": "lock"' + WHEN event_name LIKE 'statement/%' THEN '"event_type": "stmt"' + WHEN event_name LIKE 'stage/%' THEN '"event_type": "stage"' + WHEN event_name LIKE '%idle%' THEN '"event_type": "idle"' + ELSE '' + END + ) + , '}' + ) + ORDER BY event_id ASC SEPARATOR ',') event + INTO json_objects + FROM ( + -- Select all statements, with the extra tracing information available + (SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, + CONCAT(sql_text, '\\n', + 'errors: ', errors, '\\n', + 'warnings: ', warnings, '\\n', + 'lock time: ', ROUND(lock_time/1000000, 2),'us\\n', + 'rows affected: ', rows_affected, '\\n', + 'rows sent: ', rows_sent, '\\n', + 'rows examined: ', rows_examined, '\\n', + 'tmp tables: ', created_tmp_tables, '\\n', + 'tmp disk tables: ', created_tmp_disk_tables, '\\n', + 'select scan: ', select_scan, '\\n', + 'select full join: ', select_full_join, '\\n', + 'select full range join: ', select_full_range_join, '\\n', + 'select range: ', select_range, '\\n', + 'select range check: ', select_range_check, '\\n', + 'sort merge passes: ', sort_merge_passes, '\\n', + 'sort rows: ', sort_rows, '\\n', + 'sort range: ', sort_range, '\\n', + 'sort scan: ', sort_scan, '\\n', + 'no index used: ', IF(no_index_used, 'TRUE', 'FALSE'), '\\n', + 'no good index used: ', IF(no_good_index_used, 'TRUE', 'FALSE'), '\\n' + ) AS wait_info + FROM performance_schema.events_statements_history_long WHERE thread_id = thd_id) + UNION + -- Select all stages + (SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, null AS wait_info + FROM performance_schema.events_stages_history_long WHERE thread_id = thd_id) + UNION + -- Select all events, adding information appropriate to the event + (SELECT thread_id, event_id, + CONCAT(event_name , + IF(event_name NOT LIKE 'wait/synch/mutex%', IFNULL(CONCAT(' - ', operation), ''), ''), + IF(number_of_bytes IS NOT NULL, CONCAT(' ', number_of_bytes, ' bytes'), ''), + IF(event_name LIKE 'wait/io/file%', '\\n', ''), + IF(object_schema IS NOT NULL, CONCAT('\\nObject: ', object_schema, '.'), ''), + IF(object_name IS NOT NULL, + IF (event_name LIKE 'wait/io/socket%', + -- Print the socket if used, else the IP:port as reported + CONCAT(IF (object_name LIKE ':0%', @@socket, object_name)), + object_name), + ''), + IF(index_name IS NOT NULL, CONCAT(' Index: ', index_name), ''),'\\n' + ) AS event_name, + timer_wait, timer_start, nesting_event_id, source AS wait_info + FROM performance_schema.events_waits_history_long WHERE thread_id = thd_id)) events + ORDER BY event_id; + RETURN CONCAT('{', + CONCAT_WS(',', + '"rankdir": "LR"', + '"nodesep": "0.10"', + CONCAT('"stack_created": "', NOW(), '"'), + CONCAT('"mysql_version": "', VERSION(), '"'), + CONCAT('"mysql_user": "', CURRENT_USER(), '"'), + CONCAT('"events": [', IFNULL(json_objects,''), ']') + ), + '}'); +END; + diff --git a/IDEA/sys/ps_thread_trx_info.sql b/IDEA/sys/ps_thread_trx_info.sql new file mode 100644 index 00000000..8a548fc2 --- /dev/null +++ b/IDEA/sys/ps_thread_trx_info.sql @@ -0,0 +1,202 @@ +create + definer = `mysql.sys`@localhost function sys.ps_thread_trx_info(in_thread_id bigint unsigned) returns longtext + comment ' +Description +----------- + +Returns a JSON object with info on the given threads current transaction, +and the statements it has already executed, derived from the +performance_schema.events_transactions_current and +performance_schema.events_statements_history tables (so the consumers +for these also have to be enabled within Performance Schema to get full +data in the object). + +When the output exceeds the default truncation length (65535), a JSON error +object is returned, such as: + +{ "error": "Trx info truncated: Row 6 was cut by GROUP_CONCAT()" } + +Similar error objects are returned for other warnings/and exceptions raised +when calling the function. + +The max length of the output of this function can be controlled with the +ps_thread_trx_info.max_length variable set via sys_config, or the +@sys.ps_thread_trx_info.max_length user variable, as appropriate. + +Parameters +----------- + +in_thread_id (BIGINT UNSIGNED): + The id of the thread to return the transaction info for. + +Example +----------- + +SELECT sys.ps_thread_trx_info(48)\G +*************************** 1. row *************************** +sys.ps_thread_trx_info(48): [ + { + "time": "790.70 us", + "state": "COMMITTED", + "mode": "READ WRITE", + "autocommitted": "NO", + "gtid": "AUTOMATIC", + "isolation": "REPEATABLE READ", + "statements_executed": [ + { + "sql_text": "INSERT INTO info VALUES (1, ''foo'')", + "time": "471.02 us", + "schema": "trx", + "rows_examined": 0, + "rows_affected": 1, + "rows_sent": 0, + "tmp_tables": 0, + "tmp_disk_tables": 0, + "sort_rows": 0, + "sort_merge_passes": 0 + }, + { + "sql_text": "COMMIT", + "time": "254.42 us", + "schema": "trx", + "rows_examined": 0, + "rows_affected": 0, + "rows_sent": 0, + "tmp_tables": 0, + "tmp_disk_tables": 0, + "sort_rows": 0, + "sort_merge_passes": 0 + } + ] + }, + { + "time": "426.20 us", + "state": "COMMITTED", + "mode": "READ WRITE", + "autocommitted": "NO", + "gtid": "AUTOMATIC", + "isolation": "REPEATABLE READ", + "statements_executed": [ + { + "sql_text": "INSERT INTO info VALUES (2, ''bar'')", + "time": "107.33 us", + "schema": "trx", + "rows_examined": 0, + "rows_affected": 1, + "rows_sent": 0, + "tmp_tables": 0, + "tmp_disk_tables": 0, + "sort_rows": 0, + "sort_merge_passes": 0 + }, + { + "sql_text": "COMMIT", + "time": "213.23 us", + "schema": "trx", + "rows_examined": 0, + "rows_affected": 0, + "rows_sent": 0, + "tmp_tables": 0, + "tmp_disk_tables": 0, + "sort_rows": 0, + "sort_merge_passes": 0 + } + ] + } +] +1 row in set (0.03 sec) +' + sql security invoker + reads sql data +BEGIN + DECLARE v_output LONGTEXT DEFAULT '{}'; + DECLARE v_msg_text TEXT DEFAULT ''; + DECLARE v_signal_msg TEXT DEFAULT ''; + DECLARE v_mysql_errno INT; + DECLARE v_max_output_len BIGINT; + -- Capture warnings/errors such as group_concat truncation + -- and report as JSON error objects + DECLARE EXIT HANDLER FOR SQLWARNING, SQLEXCEPTION + BEGIN + GET DIAGNOSTICS CONDITION 1 + v_msg_text = MESSAGE_TEXT, + v_mysql_errno = MYSQL_ERRNO; + IF v_mysql_errno = 1260 THEN + SET v_signal_msg = CONCAT('{ "error": "Trx info truncated: ', v_msg_text, '" }'); + ELSE + SET v_signal_msg = CONCAT('{ "error": "', v_msg_text, '" }'); + END IF; + RETURN v_signal_msg; + END; + -- Set configuration options + IF (@sys.ps_thread_trx_info.max_length IS NULL) THEN + SET @sys.ps_thread_trx_info.max_length = sys.sys_get_config('ps_thread_trx_info.max_length', 65535); + END IF; + IF (@sys.ps_thread_trx_info.max_length != @@session.group_concat_max_len) THEN + SET @old_group_concat_max_len = @@session.group_concat_max_len; + -- Convert to int value for the SET, and give some surrounding space + SET v_max_output_len = (@sys.ps_thread_trx_info.max_length - 5); + SET SESSION group_concat_max_len = v_max_output_len; + END IF; + SET v_output = ( + SELECT CONCAT('[', IFNULL(GROUP_CONCAT(trx_info ORDER BY event_id), ''), '\n]') AS trx_info + FROM (SELECT trxi.thread_id, + trxi.event_id, + GROUP_CONCAT( + IFNULL( + CONCAT('\n {\n', + ' "time": "', IFNULL(format_pico_time(trxi.timer_wait), ''), '",\n', + ' "state": "', IFNULL(trxi.state, ''), '",\n', + ' "mode": "', IFNULL(trxi.access_mode, ''), '",\n', + ' "autocommitted": "', IFNULL(trxi.autocommit, ''), '",\n', + ' "gtid": "', IFNULL(trxi.gtid, ''), '",\n', + ' "isolation": "', IFNULL(trxi.isolation_level, ''), '",\n', + ' "statements_executed": [', IFNULL(s.stmts, ''), IF(s.stmts IS NULL, ' ]\n', '\n ]\n'), + ' }' + ), + '') + ORDER BY event_id) AS trx_info + FROM ( + (SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level + FROM performance_schema.events_transactions_current + WHERE thread_id = in_thread_id + AND end_event_id IS NULL) + UNION + (SELECT thread_id, event_id, timer_wait, state,access_mode, autocommit, gtid, isolation_level + FROM performance_schema.events_transactions_history + WHERE thread_id = in_thread_id) + ) AS trxi + LEFT JOIN (SELECT thread_id, + nesting_event_id, + GROUP_CONCAT( + IFNULL( + CONCAT('\n {\n', + ' "sql_text": "', IFNULL(sys.format_statement(REPLACE(sql_text, '\\', '\\\\')), ''), '",\n', + ' "time": "', IFNULL(format_pico_time(timer_wait), ''), '",\n', + ' "schema": "', IFNULL(current_schema, ''), '",\n', + ' "rows_examined": ', IFNULL(rows_examined, ''), ',\n', + ' "rows_affected": ', IFNULL(rows_affected, ''), ',\n', + ' "rows_sent": ', IFNULL(rows_sent, ''), ',\n', + ' "tmp_tables": ', IFNULL(created_tmp_tables, ''), ',\n', + ' "tmp_disk_tables": ', IFNULL(created_tmp_disk_tables, ''), ',\n', + ' "sort_rows": ', IFNULL(sort_rows, ''), ',\n', + ' "sort_merge_passes": ', IFNULL(sort_merge_passes, ''), '\n', + ' }'), '') ORDER BY event_id) AS stmts + FROM performance_schema.events_statements_history + WHERE sql_text IS NOT NULL + AND thread_id = in_thread_id + GROUP BY thread_id, nesting_event_id + ) AS s + ON trxi.thread_id = s.thread_id + AND trxi.event_id = s.nesting_event_id + WHERE trxi.thread_id = in_thread_id + GROUP BY trxi.thread_id, trxi.event_id + ) trxs + GROUP BY thread_id + ); + IF (@old_group_concat_max_len IS NOT NULL) THEN + SET SESSION group_concat_max_len = @old_group_concat_max_len; + END IF; + RETURN v_output; +END; + diff --git a/IDEA/sys/ps_trace_statement_digest.sql b/IDEA/sys/ps_trace_statement_digest.sql new file mode 100644 index 00000000..aeb11e75 --- /dev/null +++ b/IDEA/sys/ps_trace_statement_digest.sql @@ -0,0 +1,270 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_trace_statement_digest(IN in_digest varchar(64), IN in_runtime int, + IN in_interval decimal(2, 2), + IN in_start_fresh tinyint(1), + IN in_auto_enable tinyint(1)) comment ' +Description +----------- + +Traces all instrumentation within Performance Schema for a specific +Statement Digest. + +When finding a statement of interest within the +performance_schema.events_statements_summary_by_digest table, feed +the DIGEST value in to this procedure, set how long to poll for, +and at what interval to poll, and it will generate a report of all +statistics tracked within Performance Schema for that digest for the +interval. + +It will also attempt to generate an EXPLAIN for the longest running +example of the digest during the interval. Note this may fail, as: + + * Performance Schema truncates long SQL_TEXT values (and hence the + EXPLAIN will fail due to parse errors) + * the default schema is sys (so tables that are not fully qualified + in the query may not be found) + * some queries such as SHOW are not supported in EXPLAIN. + +When the EXPLAIN fails, the error will be ignored and no EXPLAIN +output generated. + +Requires the SUPER privilege for "SET sql_log_bin = 0;". + +Parameters +----------- + +in_digest (VARCHAR(64)): + The statement digest identifier you would like to analyze +in_runtime (INT): + The number of seconds to run analysis for +in_interval (DECIMAL(2,2)): + The interval (in seconds, may be fractional) at which to try + and take snapshots +in_start_fresh (BOOLEAN): + Whether to TRUNCATE the events_statements_history_long and + events_stages_history_long tables before starting +in_auto_enable (BOOLEAN): + Whether to automatically turn on required consumers + +Example +----------- + +mysql> call ps_trace_statement_digest(''891ec6860f98ba46d89dd20b0c03652c'', 10, 0.1, true, true); ++--------------------+ +| SUMMARY STATISTICS | ++--------------------+ +| SUMMARY STATISTICS | ++--------------------+ +1 row in set (9.11 sec) + ++------------+-----------+-----------+-----------+---------------+------------+------------+ +| executions | exec_time | lock_time | rows_sent | rows_examined | tmp_tables | full_scans | ++------------+-----------+-----------+-----------+---------------+------------+------------+ +| 21 | 4.11 ms | 2.00 ms | 0 | 21 | 0 | 0 | ++------------+-----------+-----------+-----------+---------------+------------+------------+ +1 row in set (9.11 sec) + ++------------------------------------------+-------+-----------+ +| event_name | count | latency | ++------------------------------------------+-------+-----------+ +| stage/sql/checking query cache for query | 16 | 724.37 us | +| stage/sql/statistics | 16 | 546.92 us | +| stage/sql/freeing items | 18 | 520.11 us | +| stage/sql/init | 51 | 466.80 us | +... +| stage/sql/cleaning up | 18 | 11.92 us | +| stage/sql/executing | 16 | 6.95 us | ++------------------------------------------+-------+-----------+ +17 rows in set (9.12 sec) + ++---------------------------+ +| LONGEST RUNNING STATEMENT | ++---------------------------+ +| LONGEST RUNNING STATEMENT | ++---------------------------+ +1 row in set (9.16 sec) + ++-----------+-----------+-----------+-----------+---------------+------------+-----------+ +| thread_id | exec_time | lock_time | rows_sent | rows_examined | tmp_tables | full_scan | ++-----------+-----------+-----------+-----------+---------------+------------+-----------+ +| 166646 | 618.43 us | 1.00 ms | 0 | 1 | 0 | 0 | ++-----------+-----------+-----------+-----------+---------------+------------+-----------+ +1 row in set (9.16 sec) + +// Truncated for clarity... ++-----------------------------------------------------------------+ +| sql_text | ++-----------------------------------------------------------------+ +| select hibeventhe0_.id as id1382_, hibeventhe0_.createdTime ... | ++-----------------------------------------------------------------+ +1 row in set (9.17 sec) + ++------------------------------------------+-----------+ +| event_name | latency | ++------------------------------------------+-----------+ +| stage/sql/init | 8.61 us | +| stage/sql/Waiting for query cache lock | 453.23 us | +| stage/sql/init | 331.07 ns | +| stage/sql/checking query cache for query | 43.04 us | +... +| stage/sql/freeing items | 30.46 us | +| stage/sql/cleaning up | 662.13 ns | ++------------------------------------------+-----------+ +18 rows in set (9.23 sec) + ++----+-------------+--------------+-------+---------------+-----------+---------+-------------+------+-------+ +| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | ++----+-------------+--------------+-------+---------------+-----------+---------+-------------+------+-------+ +| 1 | SIMPLE | hibeventhe0_ | const | fixedTime | fixedTime | 775 | const,const | 1 | NULL | ++----+-------------+--------------+-------+---------------+-----------+---------+-------------+------+-------+ +1 row in set (9.27 sec) + +Query OK, 0 rows affected (9.28 sec) +' sql security invoker modifies sql data +BEGIN + DECLARE v_start_fresh BOOLEAN DEFAULT false; + DECLARE v_auto_enable BOOLEAN DEFAULT false; + DECLARE v_explain BOOLEAN DEFAULT true; + DECLARE v_this_thread_enabed ENUM('YES', 'NO'); + DECLARE v_runtime INT DEFAULT 0; + DECLARE v_start INT DEFAULT 0; + DECLARE v_found_stmts INT; + SET @log_bin := @@sql_log_bin; + SET sql_log_bin = 0; + -- Do not track the current thread, it will kill the stack + SELECT INSTRUMENTED INTO v_this_thread_enabed FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID(); + CALL sys.ps_setup_disable_thread(CONNECTION_ID()); + DROP TEMPORARY TABLE IF EXISTS stmt_trace; + CREATE TEMPORARY TABLE stmt_trace ( + thread_id BIGINT UNSIGNED, + timer_start BIGINT UNSIGNED, + event_id BIGINT UNSIGNED, + sql_text longtext, + timer_wait BIGINT UNSIGNED, + lock_time BIGINT UNSIGNED, + errors BIGINT UNSIGNED, + mysql_errno INT, + rows_sent BIGINT UNSIGNED, + rows_affected BIGINT UNSIGNED, + rows_examined BIGINT UNSIGNED, + created_tmp_tables BIGINT UNSIGNED, + created_tmp_disk_tables BIGINT UNSIGNED, + no_index_used BIGINT UNSIGNED, + PRIMARY KEY (thread_id, timer_start) + ); + DROP TEMPORARY TABLE IF EXISTS stmt_stages; + CREATE TEMPORARY TABLE stmt_stages ( + event_id BIGINT UNSIGNED, + stmt_id BIGINT UNSIGNED, + event_name VARCHAR(128), + timer_wait BIGINT UNSIGNED, + PRIMARY KEY (event_id) + ); + SET v_start_fresh = in_start_fresh; + IF v_start_fresh THEN + TRUNCATE TABLE performance_schema.events_statements_history_long; + TRUNCATE TABLE performance_schema.events_stages_history_long; + END IF; + SET v_auto_enable = in_auto_enable; + IF v_auto_enable THEN + CALL sys.ps_setup_save(0); + UPDATE performance_schema.threads + SET INSTRUMENTED = IF(PROCESSLIST_ID IS NOT NULL, 'YES', 'NO'); + -- Only the events_statements_history_long and events_stages_history_long tables and their ancestors are needed + UPDATE performance_schema.setup_consumers + SET ENABLED = 'YES' + WHERE NAME NOT LIKE '%\_history' + AND NAME NOT LIKE 'events_wait%' + AND NAME NOT LIKE 'events_transactions%' + AND NAME <> 'statements_digest'; + UPDATE performance_schema.setup_instruments + SET ENABLED = 'YES', + TIMED = 'YES' + WHERE NAME LIKE 'statement/%' OR NAME LIKE 'stage/%'; + END IF; + WHILE v_runtime < in_runtime DO + SELECT UNIX_TIMESTAMP() INTO v_start; + INSERT IGNORE INTO stmt_trace + SELECT thread_id, timer_start, event_id, sql_text, timer_wait, lock_time, errors, mysql_errno, + rows_sent, rows_affected, rows_examined, created_tmp_tables, created_tmp_disk_tables, no_index_used + FROM performance_schema.events_statements_history_long + WHERE digest = in_digest; + INSERT IGNORE INTO stmt_stages + SELECT stages.event_id, stmt_trace.event_id, + stages.event_name, stages.timer_wait + FROM performance_schema.events_stages_history_long AS stages + JOIN stmt_trace ON stages.nesting_event_id = stmt_trace.event_id; + SELECT SLEEP(in_interval) INTO @sleep; + SET v_runtime = v_runtime + (UNIX_TIMESTAMP() - v_start); + END WHILE; + SELECT "SUMMARY STATISTICS"; + SELECT COUNT(*) executions, + format_pico_time(SUM(timer_wait)) AS exec_time, + format_pico_time(SUM(lock_time)) AS lock_time, + SUM(rows_sent) AS rows_sent, + SUM(rows_affected) AS rows_affected, + SUM(rows_examined) AS rows_examined, + SUM(created_tmp_tables) AS tmp_tables, + SUM(no_index_used) AS full_scans + FROM stmt_trace; + SELECT event_name, + COUNT(*) as count, + format_pico_time(SUM(timer_wait)) as latency + FROM stmt_stages + GROUP BY event_name + ORDER BY SUM(timer_wait) DESC; + SELECT "LONGEST RUNNING STATEMENT"; + SELECT thread_id, + format_pico_time(timer_wait) AS exec_time, + format_pico_time(lock_time) AS lock_time, + rows_sent, + rows_affected, + rows_examined, + created_tmp_tables AS tmp_tables, + no_index_used AS full_scan + FROM stmt_trace + ORDER BY timer_wait DESC LIMIT 1; + SELECT sql_text + FROM stmt_trace + ORDER BY timer_wait DESC LIMIT 1; + SELECT sql_text, event_id INTO @sql, @sql_id + FROM stmt_trace + ORDER BY timer_wait DESC LIMIT 1; + IF (@sql_id IS NOT NULL) THEN + SELECT event_name, + format_pico_time(timer_wait) as latency + FROM stmt_stages + WHERE stmt_id = @sql_id + ORDER BY event_id; + END IF; + DROP TEMPORARY TABLE stmt_trace; + DROP TEMPORARY TABLE stmt_stages; + IF (@sql IS NOT NULL) THEN + SET @stmt := CONCAT("EXPLAIN FORMAT=JSON ", @sql); + BEGIN + -- Not all queries support EXPLAIN, so catch the cases that are + -- not supported. Currently that includes cases where the table + -- is not fully qualified and is not in the default schema for this + -- procedure as it's not possible to change the default schema inside + -- a procedure. + -- + -- Errno = 1064: You have an error in your SQL syntax + -- Errno = 1146: Table '...' doesn't exist + DECLARE CONTINUE HANDLER FOR 1064, 1146 SET v_explain = false; + PREPARE explain_stmt FROM @stmt; + END; + IF (v_explain) THEN + EXECUTE explain_stmt; + DEALLOCATE PREPARE explain_stmt; + END IF; + END IF; + IF v_auto_enable THEN + CALL sys.ps_setup_reload_saved(); + END IF; + -- Restore INSTRUMENTED for this thread + IF (v_this_thread_enabed = 'YES') THEN + CALL sys.ps_setup_enable_thread(CONNECTION_ID()); + END IF; + SET sql_log_bin = @log_bin; +END; + diff --git a/IDEA/sys/ps_trace_thread.sql b/IDEA/sys/ps_trace_thread.sql new file mode 100644 index 00000000..5d982f47 --- /dev/null +++ b/IDEA/sys/ps_trace_thread.sql @@ -0,0 +1,298 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_trace_thread(IN in_thread_id bigint unsigned, + IN in_outfile varchar(255), + IN in_max_runtime decimal(20, 2), + IN in_interval decimal(20, 2), + IN in_start_fresh tinyint(1), + IN in_auto_setup tinyint(1), IN in_debug tinyint(1)) + comment ' +Description +----------- + +Dumps all data within Performance Schema for an instrumented thread, +to create a DOT formatted graph file. + +Each resultset returned from the procedure should be used for a complete graph + +Requires the SUPER privilege for "SET sql_log_bin = 0;". + +Parameters +----------- + +in_thread_id (BIGINT UNSIGNED): + The thread that you would like a stack trace for +in_outfile (VARCHAR(255)): + The filename the dot file will be written to +in_max_runtime (DECIMAL(20,2)): + The maximum time to keep collecting data. + Use NULL to get the default which is 60 seconds. +in_interval (DECIMAL(20,2)): + How long to sleep between data collections. + Use NULL to get the default which is 1 second. +in_start_fresh (BOOLEAN): + Whether to reset all Performance Schema data before tracing. +in_auto_setup (BOOLEAN): + Whether to disable all other threads and enable all consumers/instruments. + This will also reset the settings at the end of the run. +in_debug (BOOLEAN): + Whether you would like to include file:lineno in the graph + +Example +----------- + +mysql> CALL sys.ps_trace_thread(25, CONCAT(''/tmp/stack-'', REPLACE(NOW(), '' '', ''-''), ''.dot''), NULL, NULL, TRUE, TRUE, TRUE); ++-------------------+ +| summary | ++-------------------+ +| Disabled 1 thread | ++-------------------+ +1 row in set (0.00 sec) + ++---------------------------------------------+ +| Info | ++---------------------------------------------+ +| Data collection starting for THREAD_ID = 25 | ++---------------------------------------------+ +1 row in set (0.03 sec) + ++-----------------------------------------------------------+ +| Info | ++-----------------------------------------------------------+ +| Stack trace written to /tmp/stack-2014-02-16-21:18:41.dot | ++-----------------------------------------------------------+ +1 row in set (60.07 sec) + ++-------------------------------------------------------------------+ +| Convert to PDF | ++-------------------------------------------------------------------+ +| dot -Tpdf -o /tmp/stack_25.pdf /tmp/stack-2014-02-16-21:18:41.dot | ++-------------------------------------------------------------------+ +1 row in set (60.07 sec) + ++-------------------------------------------------------------------+ +| Convert to PNG | ++-------------------------------------------------------------------+ +| dot -Tpng -o /tmp/stack_25.png /tmp/stack-2014-02-16-21:18:41.dot | ++-------------------------------------------------------------------+ +1 row in set (60.07 sec) + ++------------------+ +| summary | ++------------------+ +| Enabled 1 thread | ++------------------+ +1 row in set (60.32 sec) +' + sql security invoker + modifies sql data +BEGIN + DECLARE v_done bool DEFAULT FALSE; + DECLARE v_start, v_runtime DECIMAL(20,2) DEFAULT 0.0; + DECLARE v_min_event_id bigint unsigned DEFAULT 0; + DECLARE v_this_thread_enabed ENUM('YES', 'NO'); + DECLARE v_event longtext; + DECLARE c_stack CURSOR FOR + SELECT CONCAT(IF(nesting_event_id IS NOT NULL, CONCAT(nesting_event_id, ' -> '), ''), + event_id, '; ', event_id, ' [label="', + -- Convert from picoseconds to microseconds + '(', format_pico_time(timer_wait), ') ', + IF (event_name NOT LIKE 'wait/io%', + SUBSTRING_INDEX(event_name, '/', -2), + IF (event_name NOT LIKE 'wait/io/file%' OR event_name NOT LIKE 'wait/io/socket%', + SUBSTRING_INDEX(event_name, '/', -4), + event_name) + ), + -- Always dump the extra wait information gathered for transactions and statements + IF (event_name LIKE 'transaction', IFNULL(CONCAT('\\n', wait_info), ''), ''), + IF (event_name LIKE 'statement/%', IFNULL(CONCAT('\\n', wait_info), ''), ''), + -- If debug is enabled, add the file:lineno information for waits + IF (in_debug AND event_name LIKE 'wait%', wait_info, ''), + '", ', + -- Depending on the type of event, style appropriately + CASE WHEN event_name LIKE 'wait/io/file%' THEN + 'shape=box, style=filled, color=red' + WHEN event_name LIKE 'wait/io/table%' THEN + 'shape=box, style=filled, color=green' + WHEN event_name LIKE 'wait/io/socket%' THEN + 'shape=box, style=filled, color=yellow' + WHEN event_name LIKE 'wait/synch/mutex%' THEN + 'style=filled, color=lightskyblue' + WHEN event_name LIKE 'wait/synch/cond%' THEN + 'style=filled, color=darkseagreen3' + WHEN event_name LIKE 'wait/synch/rwlock%' THEN + 'style=filled, color=orchid' + WHEN event_name LIKE 'wait/synch/sxlock%' THEN + 'style=filled, color=palevioletred' + WHEN event_name LIKE 'wait/lock%' THEN + 'shape=box, style=filled, color=tan' + WHEN event_name LIKE 'statement/%' THEN + CONCAT('shape=box, style=bold', + -- Style statements depending on COM vs SQL + CASE WHEN event_name LIKE 'statement/com/%' THEN + ' style=filled, color=darkseagreen' + ELSE + -- Use long query time from the server to + -- flag long running statements in red + IF((timer_wait/1000000000000) > @@long_query_time, + ' style=filled, color=red', + ' style=filled, color=lightblue') + END + ) + WHEN event_name LIKE 'transaction' THEN + 'shape=box, style=filled, color=lightblue3' + WHEN event_name LIKE 'stage/%' THEN + 'style=filled, color=slategray3' + -- IDLE events are on their own, call attention to them + WHEN event_name LIKE '%idle%' THEN + 'shape=box, style=filled, color=firebrick3' + ELSE '' END, + '];\n' + ) event, event_id + FROM ( + -- Select all transactions + (SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, + CONCAT('trx_id: ', IFNULL(trx_id, ''), '\\n', + 'gtid: ', IFNULL(gtid, ''), '\\n', + 'state: ', state, '\\n', + 'mode: ', access_mode, '\\n', + 'isolation: ', isolation_level, '\\n', + 'autocommit: ', autocommit, '\\n', + 'savepoints: ', number_of_savepoints, '\\n' + ) AS wait_info + FROM performance_schema.events_transactions_history_long + WHERE thread_id = in_thread_id AND event_id > v_min_event_id) + UNION + -- Select all statements, with the extra tracing information available + (SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, + CONCAT('statement: ', sql_text, '\\n', + 'errors: ', errors, '\\n', + 'warnings: ', warnings, '\\n', + 'lock time: ', format_pico_time(lock_time),'\\n', + 'rows affected: ', rows_affected, '\\n', + 'rows sent: ', rows_sent, '\\n', + 'rows examined: ', rows_examined, '\\n', + 'tmp tables: ', created_tmp_tables, '\\n', + 'tmp disk tables: ', created_tmp_disk_tables, '\\n' + 'select scan: ', select_scan, '\\n', + 'select full join: ', select_full_join, '\\n', + 'select full range join: ', select_full_range_join, '\\n', + 'select range: ', select_range, '\\n', + 'select range check: ', select_range_check, '\\n', + 'sort merge passes: ', sort_merge_passes, '\\n', + 'sort rows: ', sort_rows, '\\n', + 'sort range: ', sort_range, '\\n', + 'sort scan: ', sort_scan, '\\n', + 'no index used: ', IF(no_index_used, 'TRUE', 'FALSE'), '\\n', + 'no good index used: ', IF(no_good_index_used, 'TRUE', 'FALSE'), '\\n' + ) AS wait_info + FROM performance_schema.events_statements_history_long + WHERE thread_id = in_thread_id AND event_id > v_min_event_id) + UNION + -- Select all stages + (SELECT thread_id, event_id, event_name, timer_wait, timer_start, nesting_event_id, null AS wait_info + FROM performance_schema.events_stages_history_long + WHERE thread_id = in_thread_id AND event_id > v_min_event_id) + UNION + -- Select all events, adding information appropriate to the event + (SELECT thread_id, event_id, + CONCAT(event_name, + IF(event_name NOT LIKE 'wait/synch/mutex%', IFNULL(CONCAT(' - ', operation), ''), ''), + IF(number_of_bytes IS NOT NULL, CONCAT(' ', number_of_bytes, ' bytes'), ''), + IF(event_name LIKE 'wait/io/file%', '\\n', ''), + IF(object_schema IS NOT NULL, CONCAT('\\nObject: ', object_schema, '.'), ''), + IF(object_name IS NOT NULL, + IF (event_name LIKE 'wait/io/socket%', + -- Print the socket if used, else the IP:port as reported + CONCAT('\\n', IF (object_name LIKE ':0%', @@socket, object_name)), + object_name), + '' + ), + IF(index_name IS NOT NULL, CONCAT(' Index: ', index_name), ''), '\\n' + ) AS event_name, + timer_wait, timer_start, nesting_event_id, source AS wait_info + FROM performance_schema.events_waits_history_long + WHERE thread_id = in_thread_id AND event_id > v_min_event_id) + ) events + ORDER BY event_id; + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; + SET @log_bin := @@sql_log_bin; + SET sql_log_bin = 0; + -- Do not track the current thread, it will kill the stack + SELECT INSTRUMENTED INTO v_this_thread_enabed FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID(); + CALL sys.ps_setup_disable_thread(CONNECTION_ID()); + IF (in_auto_setup) THEN + CALL sys.ps_setup_save(0); + -- Ensure only the thread to create the stack trace for is instrumented and that we instrument everything. + DELETE FROM performance_schema.setup_actors; + UPDATE performance_schema.threads + SET INSTRUMENTED = IF(THREAD_ID = in_thread_id, 'YES', 'NO'); + -- only the %_history_long tables and it ancestors are needed + UPDATE performance_schema.setup_consumers + SET ENABLED = 'YES' + WHERE NAME NOT LIKE '%\_history'; + UPDATE performance_schema.setup_instruments + SET ENABLED = 'YES', + TIMED = 'YES'; + END IF; + IF (in_start_fresh) THEN + TRUNCATE performance_schema.events_transactions_history_long; + TRUNCATE performance_schema.events_statements_history_long; + TRUNCATE performance_schema.events_stages_history_long; + TRUNCATE performance_schema.events_waits_history_long; + END IF; + DROP TEMPORARY TABLE IF EXISTS tmp_events; + CREATE TEMPORARY TABLE tmp_events ( + event_id bigint unsigned NOT NULL, + event longblob, + PRIMARY KEY (event_id) + ); + -- Print headers for a .dot file + INSERT INTO tmp_events VALUES (0, CONCAT('digraph events { rankdir=LR; nodesep=0.10;\n', + '// Stack created .....: ', NOW(), '\n', + '// MySQL version .....: ', VERSION(), '\n', + '// MySQL hostname ....: ', @@hostname, '\n', + '// MySQL port ........: ', @@port, '\n', + '// MySQL socket ......: ', @@socket, '\n', + '// MySQL user ........: ', CURRENT_USER(), '\n')); + SELECT CONCAT('Data collection starting for THREAD_ID = ', in_thread_id) AS 'Info'; + SET v_min_event_id = 0, + v_start = UNIX_TIMESTAMP(), + in_interval = IFNULL(in_interval, 1.00), + in_max_runtime = IFNULL(in_max_runtime, 60.00); + WHILE (v_runtime < in_max_runtime + AND (SELECT INSTRUMENTED FROM performance_schema.threads WHERE THREAD_ID = in_thread_id) = 'YES') DO + SET v_done = FALSE; + OPEN c_stack; + c_stack_loop: LOOP + FETCH c_stack INTO v_event, v_min_event_id; + IF v_done THEN + LEAVE c_stack_loop; + END IF; + IF (LENGTH(v_event) > 0) THEN + INSERT INTO tmp_events VALUES (v_min_event_id, v_event); + END IF; + END LOOP; + CLOSE c_stack; + SELECT SLEEP(in_interval) INTO @sleep; + SET v_runtime = (UNIX_TIMESTAMP() - v_start); + END WHILE; + INSERT INTO tmp_events VALUES (v_min_event_id+1, '}'); + SET @query = CONCAT('SELECT event FROM tmp_events ORDER BY event_id INTO OUTFILE ''', in_outfile, ''' FIELDS ESCAPED BY '''' LINES TERMINATED BY '''''); + PREPARE stmt_output FROM @query; + EXECUTE stmt_output; + DEALLOCATE PREPARE stmt_output; + SELECT CONCAT('Stack trace written to ', in_outfile) AS 'Info'; + SELECT CONCAT('dot -Tpdf -o /tmp/stack_', in_thread_id, '.pdf ', in_outfile) AS 'Convert to PDF'; + SELECT CONCAT('dot -Tpng -o /tmp/stack_', in_thread_id, '.png ', in_outfile) AS 'Convert to PNG'; + DROP TEMPORARY TABLE tmp_events; + -- Reset the settings for the performance schema + IF (in_auto_setup) THEN + CALL sys.ps_setup_reload_saved(); + END IF; + -- Restore INSTRUMENTED for this thread + IF (v_this_thread_enabed = 'YES') THEN + CALL sys.ps_setup_enable_thread(CONNECTION_ID()); + END IF; + SET sql_log_bin = @log_bin; +END; + diff --git a/IDEA/sys/ps_truncate_all_tables.sql b/IDEA/sys/ps_truncate_all_tables.sql new file mode 100644 index 00000000..6e2941e6 --- /dev/null +++ b/IDEA/sys/ps_truncate_all_tables.sql @@ -0,0 +1,57 @@ +create + definer = `mysql.sys`@localhost procedure sys.ps_truncate_all_tables(IN in_verbose tinyint(1)) comment ' +Description +----------- + +Truncates all summary tables within Performance Schema, +resetting all aggregated instrumentation as a snapshot. + +Parameters +----------- + +in_verbose (BOOLEAN): + Whether to print each TRUNCATE statement before running + +Example +----------- + +mysql> CALL sys.ps_truncate_all_tables(false); ++---------------------+ +| summary | ++---------------------+ +| Truncated 44 tables | ++---------------------+ +1 row in set (0.10 sec) + +Query OK, 0 rows affected (0.10 sec) +' deterministic sql security invoker modifies sql data +BEGIN + DECLARE v_done INT DEFAULT FALSE; + DECLARE v_total_tables INT DEFAULT 0; + DECLARE v_ps_table VARCHAR(64); + DECLARE ps_tables CURSOR FOR + SELECT table_name + FROM INFORMATION_SCHEMA.TABLES + WHERE table_schema = 'performance_schema' + AND (table_name LIKE '%summary%' + OR table_name LIKE '%history%'); + DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_done = TRUE; + OPEN ps_tables; + ps_tables_loop: LOOP + FETCH ps_tables INTO v_ps_table; + IF v_done THEN + LEAVE ps_tables_loop; + END IF; + SET @truncate_stmt := CONCAT('TRUNCATE TABLE performance_schema.', v_ps_table); + IF in_verbose THEN + SELECT CONCAT('Running: ', @truncate_stmt) AS status; + END IF; + PREPARE truncate_stmt FROM @truncate_stmt; + EXECUTE truncate_stmt; + DEALLOCATE PREPARE truncate_stmt; + SET v_total_tables = v_total_tables + 1; + END LOOP; + CLOSE ps_tables; + SELECT CONCAT('Truncated ', v_total_tables, ' tables') AS summary; +END; + diff --git a/IDEA/sys/quote_identifier.sql b/IDEA/sys/quote_identifier.sql new file mode 100644 index 00000000..6c7f7259 --- /dev/null +++ b/IDEA/sys/quote_identifier.sql @@ -0,0 +1,42 @@ +create + definer = `mysql.sys`@localhost function sys.quote_identifier(in_identifier text) returns text comment ' +Description +----------- + +Takes an unquoted identifier (schema name, table name, etc.) and +returns the identifier quoted with backticks. + +Parameters +----------- + +in_identifier (TEXT): + The identifier to quote. + +Returns +----------- + +TEXT CHARSET UTF8MB4 + +Example +----------- + +mysql> SELECT sys.quote_identifier(''my_identifier'') AS Identifier; ++-----------------+ +| Identifier | ++-----------------+ +| `my_identifier` | ++-----------------+ +1 row in set (0.00 sec) + +mysql> SELECT sys.quote_identifier(''my`idenfier'') AS Identifier; ++----------------+ +| Identifier | ++----------------+ +| `my``idenfier` | ++----------------+ +1 row in set (0.00 sec) +' deterministic sql security invoker no sql +BEGIN + RETURN CONCAT('`', REPLACE(in_identifier, '`', '``'), '`'); +END; + diff --git a/IDEA/sys/schema_auto_increment_columns.sql b/IDEA/sys/schema_auto_increment_columns.sql new file mode 100644 index 00000000..e0c053e2 --- /dev/null +++ b/IDEA/sys/schema_auto_increment_columns.sql @@ -0,0 +1,47 @@ +create definer = `mysql.sys`@localhost view sys.schema_auto_increment_columns as +select `information_schema`.`columns`.`TABLE_SCHEMA` AS `TABLE_SCHEMA`, + `information_schema`.`columns`.`TABLE_NAME` AS `TABLE_NAME`, + `information_schema`.`columns`.`COLUMN_NAME` AS `COLUMN_NAME`, + `information_schema`.`columns`.`DATA_TYPE` AS `DATA_TYPE`, + `information_schema`.`columns`.`COLUMN_TYPE` AS `COLUMN_TYPE`, + (locate('unsigned', `information_schema`.`columns`.`COLUMN_TYPE`) = 0) AS `is_signed`, + (locate('unsigned', `information_schema`.`columns`.`COLUMN_TYPE`) > 0) AS `is_unsigned`, + ((case `information_schema`.`columns`.`DATA_TYPE` + when 'tinyint' then 255 + when 'smallint' then 65535 + when 'mediumint' then 16777215 + when 'int' then 4294967295 + when 'bigint' then 18446744073709551615 end) >> + if((locate('unsigned', `information_schema`.`columns`.`COLUMN_TYPE`) > 0), 0, 1)) AS `max_value`, + `information_schema`.`tables`.`AUTO_INCREMENT` AS `AUTO_INCREMENT`, + (`information_schema`.`tables`.`AUTO_INCREMENT` / ((case `information_schema`.`columns`.`DATA_TYPE` + when 'tinyint' then 255 + when 'smallint' then 65535 + when 'mediumint' then 16777215 + when 'int' then 4294967295 + when 'bigint' then 18446744073709551615 end) >> if( + (locate('unsigned', `information_schema`.`columns`.`COLUMN_TYPE`) > 0), + 0, 1))) AS `auto_increment_ratio` +from (`information_schema`.`COLUMNS` join `information_schema`.`TABLES` + on (((`information_schema`.`columns`.`TABLE_SCHEMA` = `information_schema`.`tables`.`TABLE_SCHEMA`) and + (`information_schema`.`columns`.`TABLE_NAME` = `information_schema`.`tables`.`TABLE_NAME`)))) +where ((`information_schema`.`columns`.`TABLE_SCHEMA` not in + ('mysql', 'sys', 'INFORMATION_SCHEMA', 'performance_schema')) and + (`information_schema`.`tables`.`TABLE_TYPE` = 'BASE TABLE') and + (`information_schema`.`columns`.`EXTRA` = 'auto_increment')) +order by (`information_schema`.`tables`.`AUTO_INCREMENT` / ((case `information_schema`.`columns`.`DATA_TYPE` + when 'tinyint' then 255 + when 'smallint' then 65535 + when 'mediumint' then 16777215 + when 'int' then 4294967295 + when 'bigint' then 18446744073709551615 end) >> if( + (locate('unsigned', `information_schema`.`columns`.`COLUMN_TYPE`) > 0), + 0, 1))) desc, + ((case `information_schema`.`columns`.`DATA_TYPE` + when 'tinyint' then 255 + when 'smallint' then 65535 + when 'mediumint' then 16777215 + when 'int' then 4294967295 + when 'bigint' then 18446744073709551615 end) >> + if((locate('unsigned', `information_schema`.`columns`.`COLUMN_TYPE`) > 0), 0, 1)); + diff --git a/IDEA/sys/schema_index_statistics.sql b/IDEA/sys/schema_index_statistics.sql new file mode 100644 index 00000000..e454e182 --- /dev/null +++ b/IDEA/sys/schema_index_statistics.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.schema_index_statistics as +select `performance_schema`.`table_io_waits_summary_by_index_usage`.`OBJECT_SCHEMA` AS `table_schema`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`OBJECT_NAME` AS `table_name`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`INDEX_NAME` AS `index_name`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_FETCH` AS `rows_selected`, + format_pico_time(`performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_FETCH`) AS `select_latency`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_INSERT` AS `rows_inserted`, + format_pico_time(`performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_INSERT`) AS `insert_latency`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_UPDATE` AS `rows_updated`, + format_pico_time(`performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_UPDATE`) AS `update_latency`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_DELETE` AS `rows_deleted`, + format_pico_time(`performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_DELETE`) AS `delete_latency` +from `performance_schema`.`table_io_waits_summary_by_index_usage` +where (`performance_schema`.`table_io_waits_summary_by_index_usage`.`INDEX_NAME` is not null) +order by `performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/schema_object_overview.sql b/IDEA/sys/schema_object_overview.sql new file mode 100644 index 00000000..38ffa4d4 --- /dev/null +++ b/IDEA/sys/schema_object_overview.sql @@ -0,0 +1,30 @@ +create definer = `mysql.sys`@localhost view sys.schema_object_overview as +select `information_schema`.`routines`.`ROUTINE_SCHEMA` AS `db`, + `information_schema`.`routines`.`ROUTINE_TYPE` AS `object_type`, + count(0) AS `count` +from `information_schema`.`ROUTINES` +group by `information_schema`.`routines`.`ROUTINE_SCHEMA`, `information_schema`.`routines`.`ROUTINE_TYPE` +union +select `information_schema`.`tables`.`TABLE_SCHEMA` AS `TABLE_SCHEMA`, + `information_schema`.`tables`.`TABLE_TYPE` AS `TABLE_TYPE`, + count(0) AS `COUNT(*)` +from `information_schema`.`TABLES` +group by `information_schema`.`tables`.`TABLE_SCHEMA`, `information_schema`.`tables`.`TABLE_TYPE` +union +select `information_schema`.`statistics`.`TABLE_SCHEMA` AS `TABLE_SCHEMA`, + concat('INDEX (', `information_schema`.`statistics`.`INDEX_TYPE`, ')') AS `CONCAT('INDEX (', INDEX_TYPE, ')')`, + count(0) AS `COUNT(*)` +from `information_schema`.`STATISTICS` +group by `information_schema`.`statistics`.`TABLE_SCHEMA`, `information_schema`.`statistics`.`INDEX_TYPE` +union +select `information_schema`.`triggers`.`TRIGGER_SCHEMA` AS `TRIGGER_SCHEMA`, + 'TRIGGER' AS `TRIGGER`, + count(0) AS `COUNT(*)` +from `information_schema`.`TRIGGERS` +group by `information_schema`.`triggers`.`TRIGGER_SCHEMA` +union +select `information_schema`.`events`.`EVENT_SCHEMA` AS `EVENT_SCHEMA`, 'EVENT' AS `EVENT`, count(0) AS `COUNT(*)` +from `information_schema`.`EVENTS` +group by `information_schema`.`events`.`EVENT_SCHEMA` +order by `db`, `object_type`; + diff --git a/IDEA/sys/schema_redundant_indexes.sql b/IDEA/sys/schema_redundant_indexes.sql new file mode 100644 index 00000000..005ae9d2 --- /dev/null +++ b/IDEA/sys/schema_redundant_indexes.sql @@ -0,0 +1,28 @@ +create definer = `mysql.sys`@localhost view sys.schema_redundant_indexes as +select `sys`.`redundant_keys`.`table_schema` AS `table_schema`, + `sys`.`redundant_keys`.`table_name` AS `table_name`, + `sys`.`redundant_keys`.`index_name` AS `redundant_index_name`, + `sys`.`redundant_keys`.`index_columns` AS `redundant_index_columns`, + `sys`.`redundant_keys`.`non_unique` AS `redundant_index_non_unique`, + `sys`.`dominant_keys`.`index_name` AS `dominant_index_name`, + `sys`.`dominant_keys`.`index_columns` AS `dominant_index_columns`, + `sys`.`dominant_keys`.`non_unique` AS `dominant_index_non_unique`, + if(((0 <> `sys`.`redundant_keys`.`subpart_exists`) or (0 <> `sys`.`dominant_keys`.`subpart_exists`)), 1, + 0) AS `subpart_exists`, + concat('ALTER TABLE `', `sys`.`redundant_keys`.`table_schema`, '`.`', `sys`.`redundant_keys`.`table_name`, + '` DROP INDEX `', `sys`.`redundant_keys`.`index_name`, + '`') AS `sql_drop_index` +from (`sys`.`x$schema_flattened_keys` `redundant_keys` join `sys`.`x$schema_flattened_keys` `dominant_keys` + on (((`sys`.`redundant_keys`.`table_schema` = `sys`.`dominant_keys`.`table_schema`) and + (`sys`.`redundant_keys`.`table_name` = `sys`.`dominant_keys`.`table_name`)))) +where ((`sys`.`redundant_keys`.`index_name` <> `sys`.`dominant_keys`.`index_name`) and + (((`sys`.`redundant_keys`.`index_columns` = `sys`.`dominant_keys`.`index_columns`) and + ((`sys`.`redundant_keys`.`non_unique` > `sys`.`dominant_keys`.`non_unique`) or + ((`sys`.`redundant_keys`.`non_unique` = `sys`.`dominant_keys`.`non_unique`) and + (if((`sys`.`redundant_keys`.`index_name` = 'PRIMARY'), '', `sys`.`redundant_keys`.`index_name`) > + if((`sys`.`dominant_keys`.`index_name` = 'PRIMARY'), '', `sys`.`dominant_keys`.`index_name`))))) or + ((locate(concat(`sys`.`redundant_keys`.`index_columns`, ','), `sys`.`dominant_keys`.`index_columns`) = 1) and + (`sys`.`redundant_keys`.`non_unique` = 1)) or + ((locate(concat(`sys`.`dominant_keys`.`index_columns`, ','), `sys`.`redundant_keys`.`index_columns`) = 1) and + (`sys`.`dominant_keys`.`non_unique` = 0)))); + diff --git a/IDEA/sys/schema_table_lock_waits.sql b/IDEA/sys/schema_table_lock_waits.sql new file mode 100644 index 00000000..fa9c74a9 --- /dev/null +++ b/IDEA/sys/schema_table_lock_waits.sql @@ -0,0 +1,29 @@ +create definer = `mysql.sys`@localhost view sys.schema_table_lock_waits as +select `g`.`OBJECT_SCHEMA` AS `object_schema`, + `g`.`OBJECT_NAME` AS `object_name`, + `pt`.`THREAD_ID` AS `waiting_thread_id`, + `pt`.`PROCESSLIST_ID` AS `waiting_pid`, + `sys`.`ps_thread_account`(`p`.`OWNER_THREAD_ID`) AS `waiting_account`, + `p`.`LOCK_TYPE` AS `waiting_lock_type`, + `p`.`LOCK_DURATION` AS `waiting_lock_duration`, + `sys`.`format_statement`(`pt`.`PROCESSLIST_INFO`) AS `waiting_query`, + `pt`.`PROCESSLIST_TIME` AS `waiting_query_secs`, + `ps`.`ROWS_AFFECTED` AS `waiting_query_rows_affected`, + `ps`.`ROWS_EXAMINED` AS `waiting_query_rows_examined`, + `gt`.`THREAD_ID` AS `blocking_thread_id`, + `gt`.`PROCESSLIST_ID` AS `blocking_pid`, + `sys`.`ps_thread_account`(`g`.`OWNER_THREAD_ID`) AS `blocking_account`, + `g`.`LOCK_TYPE` AS `blocking_lock_type`, + `g`.`LOCK_DURATION` AS `blocking_lock_duration`, + concat('KILL QUERY ', `gt`.`PROCESSLIST_ID`) AS `sql_kill_blocking_query`, + concat('KILL ', `gt`.`PROCESSLIST_ID`) AS `sql_kill_blocking_connection` +from (((((`performance_schema`.`metadata_locks` `g` join `performance_schema`.`metadata_locks` `p` + on (((`g`.`OBJECT_TYPE` = `p`.`OBJECT_TYPE`) and (`g`.`OBJECT_SCHEMA` = `p`.`OBJECT_SCHEMA`) and + (`g`.`OBJECT_NAME` = `p`.`OBJECT_NAME`) and (`g`.`LOCK_STATUS` = 'GRANTED') and + (`p`.`LOCK_STATUS` = 'PENDING')))) join `performance_schema`.`threads` `gt` + on ((`g`.`OWNER_THREAD_ID` = `gt`.`THREAD_ID`))) join `performance_schema`.`threads` `pt` + on ((`p`.`OWNER_THREAD_ID` = `pt`.`THREAD_ID`))) left join `performance_schema`.`events_statements_current` `gs` + on ((`g`.`OWNER_THREAD_ID` = `gs`.`THREAD_ID`))) left join `performance_schema`.`events_statements_current` `ps` + on ((`p`.`OWNER_THREAD_ID` = `ps`.`THREAD_ID`))) +where (`g`.`OBJECT_TYPE` = 'TABLE'); + diff --git a/IDEA/sys/schema_table_statistics.sql b/IDEA/sys/schema_table_statistics.sql new file mode 100644 index 00000000..11399d19 --- /dev/null +++ b/IDEA/sys/schema_table_statistics.sql @@ -0,0 +1,25 @@ +create definer = `mysql.sys`@localhost view sys.schema_table_statistics as +select `pst`.`OBJECT_SCHEMA` AS `table_schema`, + `pst`.`OBJECT_NAME` AS `table_name`, + format_pico_time(`pst`.`SUM_TIMER_WAIT`) AS `total_latency`, + `pst`.`COUNT_FETCH` AS `rows_fetched`, + format_pico_time(`pst`.`SUM_TIMER_FETCH`) AS `fetch_latency`, + `pst`.`COUNT_INSERT` AS `rows_inserted`, + format_pico_time(`pst`.`SUM_TIMER_INSERT`) AS `insert_latency`, + `pst`.`COUNT_UPDATE` AS `rows_updated`, + format_pico_time(`pst`.`SUM_TIMER_UPDATE`) AS `update_latency`, + `pst`.`COUNT_DELETE` AS `rows_deleted`, + format_pico_time(`pst`.`SUM_TIMER_DELETE`) AS `delete_latency`, + `sys`.`fsbi`.`count_read` AS `io_read_requests`, + format_bytes(`sys`.`fsbi`.`sum_number_of_bytes_read`) AS `io_read`, + format_pico_time(`sys`.`fsbi`.`sum_timer_read`) AS `io_read_latency`, + `sys`.`fsbi`.`count_write` AS `io_write_requests`, + format_bytes(`sys`.`fsbi`.`sum_number_of_bytes_write`) AS `io_write`, + format_pico_time(`sys`.`fsbi`.`sum_timer_write`) AS `io_write_latency`, + `sys`.`fsbi`.`count_misc` AS `io_misc_requests`, + format_pico_time(`sys`.`fsbi`.`sum_timer_misc`) AS `io_misc_latency` +from (`performance_schema`.`table_io_waits_summary_by_table` `pst` left join `sys`.`x$ps_schema_table_statistics_io` `fsbi` + on (((`pst`.`OBJECT_SCHEMA` = `sys`.`fsbi`.`table_schema`) and + (`pst`.`OBJECT_NAME` = `sys`.`fsbi`.`table_name`)))) +order by `pst`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/schema_table_statistics_with_buffer.sql b/IDEA/sys/schema_table_statistics_with_buffer.sql new file mode 100644 index 00000000..dd2c308c --- /dev/null +++ b/IDEA/sys/schema_table_statistics_with_buffer.sql @@ -0,0 +1,33 @@ +create definer = `mysql.sys`@localhost view sys.schema_table_statistics_with_buffer as +select `pst`.`OBJECT_SCHEMA` AS `table_schema`, + `pst`.`OBJECT_NAME` AS `table_name`, + `pst`.`COUNT_FETCH` AS `rows_fetched`, + format_pico_time(`pst`.`SUM_TIMER_FETCH`) AS `fetch_latency`, + `pst`.`COUNT_INSERT` AS `rows_inserted`, + format_pico_time(`pst`.`SUM_TIMER_INSERT`) AS `insert_latency`, + `pst`.`COUNT_UPDATE` AS `rows_updated`, + format_pico_time(`pst`.`SUM_TIMER_UPDATE`) AS `update_latency`, + `pst`.`COUNT_DELETE` AS `rows_deleted`, + format_pico_time(`pst`.`SUM_TIMER_DELETE`) AS `delete_latency`, + `sys`.`fsbi`.`count_read` AS `io_read_requests`, + format_bytes(`sys`.`fsbi`.`sum_number_of_bytes_read`) AS `io_read`, + format_pico_time(`sys`.`fsbi`.`sum_timer_read`) AS `io_read_latency`, + `sys`.`fsbi`.`count_write` AS `io_write_requests`, + format_bytes(`sys`.`fsbi`.`sum_number_of_bytes_write`) AS `io_write`, + format_pico_time(`sys`.`fsbi`.`sum_timer_write`) AS `io_write_latency`, + `sys`.`fsbi`.`count_misc` AS `io_misc_requests`, + format_pico_time(`sys`.`fsbi`.`sum_timer_misc`) AS `io_misc_latency`, + format_bytes(`sys`.`ibp`.`allocated`) AS `innodb_buffer_allocated`, + format_bytes(`sys`.`ibp`.`data`) AS `innodb_buffer_data`, + format_bytes((`sys`.`ibp`.`allocated` - `sys`.`ibp`.`data`)) AS `innodb_buffer_free`, + `sys`.`ibp`.`pages` AS `innodb_buffer_pages`, + `sys`.`ibp`.`pages_hashed` AS `innodb_buffer_pages_hashed`, + `sys`.`ibp`.`pages_old` AS `innodb_buffer_pages_old`, + `sys`.`ibp`.`rows_cached` AS `innodb_buffer_rows_cached` +from ((`performance_schema`.`table_io_waits_summary_by_table` `pst` left join `sys`.`x$ps_schema_table_statistics_io` `fsbi` + on (((`pst`.`OBJECT_SCHEMA` = `sys`.`fsbi`.`table_schema`) and + (`pst`.`OBJECT_NAME` = `sys`.`fsbi`.`table_name`)))) left join `sys`.`x$innodb_buffer_stats_by_table` `ibp` + on (((`pst`.`OBJECT_SCHEMA` = `sys`.`ibp`.`object_schema`) and + (`pst`.`OBJECT_NAME` = `sys`.`ibp`.`object_name`)))) +order by `pst`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/schema_tables_with_full_table_scans.sql b/IDEA/sys/schema_tables_with_full_table_scans.sql new file mode 100644 index 00000000..5821256d --- /dev/null +++ b/IDEA/sys/schema_tables_with_full_table_scans.sql @@ -0,0 +1,10 @@ +create definer = `mysql.sys`@localhost view sys.schema_tables_with_full_table_scans as +select `performance_schema`.`table_io_waits_summary_by_index_usage`.`OBJECT_SCHEMA` AS `object_schema`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`OBJECT_NAME` AS `object_name`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_READ` AS `rows_full_scanned`, + format_pico_time(`performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_WAIT`) AS `latency` +from `performance_schema`.`table_io_waits_summary_by_index_usage` +where ((`performance_schema`.`table_io_waits_summary_by_index_usage`.`INDEX_NAME` is null) and + (`performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_READ` > 0)) +order by `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_READ` desc; + diff --git a/IDEA/sys/schema_unused_indexes.sql b/IDEA/sys/schema_unused_indexes.sql new file mode 100644 index 00000000..6ea05fa9 --- /dev/null +++ b/IDEA/sys/schema_unused_indexes.sql @@ -0,0 +1,11 @@ +create definer = `mysql.sys`@localhost view sys.schema_unused_indexes as +select `t`.`OBJECT_SCHEMA` AS `object_schema`, `t`.`OBJECT_NAME` AS `object_name`, `t`.`INDEX_NAME` AS `index_name` +from (`performance_schema`.`table_io_waits_summary_by_index_usage` `t` join `information_schema`.`STATISTICS` `s` + on (((`t`.`OBJECT_SCHEMA` = `information_schema`.`s`.`TABLE_SCHEMA`) and + (`t`.`OBJECT_NAME` = `information_schema`.`s`.`TABLE_NAME`) and + (`t`.`INDEX_NAME` = `information_schema`.`s`.`INDEX_NAME`)))) +where ((`t`.`INDEX_NAME` is not null) and (`t`.`COUNT_STAR` = 0) and (`t`.`OBJECT_SCHEMA` <> 'mysql') and + (`t`.`INDEX_NAME` <> 'PRIMARY') and (`information_schema`.`s`.`NON_UNIQUE` = 1) and + (`information_schema`.`s`.`SEQ_IN_INDEX` = 1)) +order by `t`.`OBJECT_SCHEMA`, `t`.`OBJECT_NAME`; + diff --git a/IDEA/sys/session.sql b/IDEA/sys/session.sql new file mode 100644 index 00000000..5303d37f --- /dev/null +++ b/IDEA/sys/session.sql @@ -0,0 +1,34 @@ +create definer = `mysql.sys`@localhost view sys.session as +select `sys`.`processlist`.`thd_id` AS `thd_id`, + `sys`.`processlist`.`conn_id` AS `conn_id`, + `sys`.`processlist`.`user` AS `user`, + `sys`.`processlist`.`db` AS `db`, + `sys`.`processlist`.`command` AS `command`, + `sys`.`processlist`.`state` AS `state`, + `sys`.`processlist`.`time` AS `time`, + `sys`.`processlist`.`current_statement` AS `current_statement`, + `sys`.`processlist`.`execution_engine` AS `execution_engine`, + `sys`.`processlist`.`statement_latency` AS `statement_latency`, + `sys`.`processlist`.`progress` AS `progress`, + `sys`.`processlist`.`lock_latency` AS `lock_latency`, + `sys`.`processlist`.`cpu_latency` AS `cpu_latency`, + `sys`.`processlist`.`rows_examined` AS `rows_examined`, + `sys`.`processlist`.`rows_sent` AS `rows_sent`, + `sys`.`processlist`.`rows_affected` AS `rows_affected`, + `sys`.`processlist`.`tmp_tables` AS `tmp_tables`, + `sys`.`processlist`.`tmp_disk_tables` AS `tmp_disk_tables`, + `sys`.`processlist`.`full_scan` AS `full_scan`, + `sys`.`processlist`.`last_statement` AS `last_statement`, + `sys`.`processlist`.`last_statement_latency` AS `last_statement_latency`, + `sys`.`processlist`.`current_memory` AS `current_memory`, + `sys`.`processlist`.`last_wait` AS `last_wait`, + `sys`.`processlist`.`last_wait_latency` AS `last_wait_latency`, + `sys`.`processlist`.`source` AS `source`, + `sys`.`processlist`.`trx_latency` AS `trx_latency`, + `sys`.`processlist`.`trx_state` AS `trx_state`, + `sys`.`processlist`.`trx_autocommit` AS `trx_autocommit`, + `sys`.`processlist`.`pid` AS `pid`, + `sys`.`processlist`.`program_name` AS `program_name` +from `sys`.`processlist` +where ((`sys`.`processlist`.`conn_id` is not null) and (`sys`.`processlist`.`command` <> 'Daemon')); + diff --git a/IDEA/sys/session_ssl_status.sql b/IDEA/sys/session_ssl_status.sql new file mode 100644 index 00000000..8b593e84 --- /dev/null +++ b/IDEA/sys/session_ssl_status.sql @@ -0,0 +1,11 @@ +create definer = `mysql.sys`@localhost view sys.session_ssl_status as +select `sslver`.`THREAD_ID` AS `thread_id`, + `sslver`.`VARIABLE_VALUE` AS `ssl_version`, + `sslcip`.`VARIABLE_VALUE` AS `ssl_cipher`, + `sslreuse`.`VARIABLE_VALUE` AS `ssl_sessions_reused` +from ((`performance_schema`.`status_by_thread` `sslver` left join `performance_schema`.`status_by_thread` `sslcip` + on (((`sslcip`.`THREAD_ID` = `sslver`.`THREAD_ID`) and + (`sslcip`.`VARIABLE_NAME` = 'Ssl_cipher')))) left join `performance_schema`.`status_by_thread` `sslreuse` + on (((`sslreuse`.`THREAD_ID` = `sslver`.`THREAD_ID`) and (`sslreuse`.`VARIABLE_NAME` = 'Ssl_sessions_reused')))) +where (`sslver`.`VARIABLE_NAME` = 'Ssl_version'); + diff --git a/IDEA/sys/statement_analysis.sql b/IDEA/sys/statement_analysis.sql new file mode 100644 index 00000000..a4b60b73 --- /dev/null +++ b/IDEA/sys/statement_analysis.sql @@ -0,0 +1,38 @@ +create definer = `mysql.sys`@localhost view sys.statement_analysis as +select `sys`.`format_statement`(`performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT`) AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + if(((`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_GOOD_INDEX_USED` > 0) or + (`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` > 0)), '*', + '') AS `full_scan`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` AS `err_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` AS `warn_count`, + format_pico_time(`performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_digest`.`MAX_TIMER_WAIT`) AS `max_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_digest`.`AVG_TIMER_WAIT`) AS `avg_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_digest`.`SUM_LOCK_TIME`) AS `lock_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_digest`.`SUM_CPU_TIME`) AS `cpu_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_SENT` AS `rows_sent`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_SENT` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `rows_sent_avg`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_EXAMINED` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `rows_examined_avg`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_AFFECTED` AS `rows_affected`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_AFFECTED` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `rows_affected_avg`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` AS `tmp_tables`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_DISK_TABLES` AS `tmp_disk_tables`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_ROWS` AS `rows_sorted`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_MERGE_PASSES` AS `sort_merge_passes`, + format_bytes(`performance_schema`.`events_statements_summary_by_digest`.`MAX_CONTROLLED_MEMORY`) AS `max_controlled_memory`, + format_bytes(`performance_schema`.`events_statements_summary_by_digest`.`MAX_TOTAL_MEMORY`) AS `max_total_memory`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen` +from `performance_schema`.`events_statements_summary_by_digest` +order by `performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/statement_performance_analyzer.sql b/IDEA/sys/statement_performance_analyzer.sql new file mode 100644 index 00000000..346599ab --- /dev/null +++ b/IDEA/sys/statement_performance_analyzer.sql @@ -0,0 +1,675 @@ +create + definer = `mysql.sys`@localhost procedure sys.statement_performance_analyzer(IN in_action enum ('snapshot', 'overall', 'delta', 'create_table', 'create_tmp', 'save', 'cleanup'), + IN in_table varchar(129), + IN in_views set ('with_runtimes_in_95th_percentile', 'analysis', 'with_errors_or_warnings', 'with_full_table_scans', 'with_sorting', 'with_temp_tables', 'custom')) + comment ' +Description +----------- + +Create a report of the statements running on the server. + +The views are calculated based on the overall and/or delta activity. + +Requires the SUPER privilege for "SET sql_log_bin = 0;". + +Parameters +----------- + +in_action (ENUM(''snapshot'', ''overall'', ''delta'', ''create_tmp'', ''create_table'', ''save'', ''cleanup'')): + The action to take. Supported actions are: + * snapshot Store a snapshot. The default is to make a snapshot of the current content of + performance_schema.events_statements_summary_by_digest, but by setting in_table + this can be overwritten to copy the content of the specified table. + The snapshot is stored in the sys.tmp_digests temporary table. + * overall Generate analyzis based on the content specified by in_table. For the overall analyzis, + in_table can be NOW() to use a fresh snapshot. This will overwrite an existing snapshot. + Use NULL for in_table to use the existing snapshot. If in_table IS NULL and no snapshot + exists, a new will be created. + See also in_views and @sys.statement_performance_analyzer.limit. + * delta Generate a delta analysis. The delta will be calculated between the reference table in + in_table and the snapshot. An existing snapshot must exist. + The action uses the sys.tmp_digests_delta temporary table. + See also in_views and @sys.statement_performance_analyzer.limit. + * create_table Create a regular table suitable for storing the snapshot for later use, e.g. for + calculating deltas. + * create_tmp Create a temporary table suitable for storing the snapshot for later use, e.g. for + calculating deltas. + * save Save the snapshot in the table specified by in_table. The table must exists and have + the correct structure. + If no snapshot exists, a new is created. + * cleanup Remove the temporary tables used for the snapshot and delta. + +in_table (VARCHAR(129)): + The table argument used for some actions. Use the format ''db1.t1'' or ''t1'' without using any backticks (`) + for quoting. Periods (.) are not supported in the database and table names. + + The meaning of the table for each action supporting the argument is: + + * snapshot The snapshot is created based on the specified table. Set to NULL or NOW() to use + the current content of performance_schema.events_statements_summary_by_digest. + * overall The table with the content to create the overall analyzis for. The following values + can be used: + - A table name - use the content of that table. + - NOW() - create a fresh snapshot and overwrite the existing snapshot. + - NULL - use the last stored snapshot. + * delta The table name is mandatory and specified the reference view to compare the currently + stored snapshot against. If no snapshot exists, a new will be created. + * create_table The name of the regular table to create. + * create_tmp The name of the temporary table to create. + * save The name of the table to save the currently stored snapshot into. + +in_views (SET (''with_runtimes_in_95th_percentile'', ''analysis'', ''with_errors_or_warnings'', + ''with_full_table_scans'', ''with_sorting'', ''with_temp_tables'', ''custom'')) + Which views to include: + + * with_runtimes_in_95th_percentile Based on the sys.statements_with_runtimes_in_95th_percentile view + * analysis Based on the sys.statement_analysis view + * with_errors_or_warnings Based on the sys.statements_with_errors_or_warnings view + * with_full_table_scans Based on the sys.statements_with_full_table_scans view + * with_sorting Based on the sys.statements_with_sorting view + * with_temp_tables Based on the sys.statements_with_temp_tables view + * custom Use a custom view. This view must be specified in @sys.statement_performance_analyzer.view to an existing view or a query + +Default is to include all except ''custom''. + + +Configuration Options +---------------------- + +sys.statement_performance_analyzer.limit + The maximum number of rows to include for the views that does not have a built-in limit (e.g. the 95th percentile view). + If not set the limit is 100. + +sys.statement_performance_analyzer.view + Used together with the ''custom'' view. If the value contains a space, it is considered a query, otherwise it must be + an existing view querying the performance_schema.events_statements_summary_by_digest table. There cannot be any limit + clause including in the query or view definition if @sys.statement_performance_analyzer.limit > 0. + If specifying a view, use the same format as for in_table. + +sys.debug + Whether to provide debugging output. + Default is ''OFF''. Set to ''ON'' to include. + + +Example +-------- + +To create a report with the queries in the 95th percentile since last truncate of performance_schema.events_statements_summary_by_digest +and the delta for a 1 minute period: + + 1. Create a temporary table to store the initial snapshot. + 2. Create the initial snapshot. + 3. Save the initial snapshot in the temporary table. + 4. Wait one minute. + 5. Create a new snapshot. + 6. Perform analyzis based on the new snapshot. + 7. Perform analyzis based on the delta between the initial and new snapshots. + +mysql> CALL sys.statement_performance_analyzer(''create_tmp'', ''mydb.tmp_digests_ini'', NULL); +Query OK, 0 rows affected (0.08 sec) + +mysql> CALL sys.statement_performance_analyzer(''snapshot'', NULL, NULL); +Query OK, 0 rows affected (0.02 sec) + +mysql> CALL sys.statement_performance_analyzer(''save'', ''mydb.tmp_digests_ini'', NULL); +Query OK, 0 rows affected (0.00 sec) + +mysql> DO SLEEP(60); +Query OK, 0 rows affected (1 min 0.00 sec) + +mysql> CALL sys.statement_performance_analyzer(''snapshot'', NULL, NULL); +Query OK, 0 rows affected (0.02 sec) + +mysql> CALL sys.statement_performance_analyzer(''overall'', NULL, ''with_runtimes_in_95th_percentile''); ++-----------------------------------------+ +| Next Output | ++-----------------------------------------+ +| Queries with Runtime in 95th Percentile | ++-----------------------------------------+ +1 row in set (0.05 sec) + +... + +mysql> CALL sys.statement_performance_analyzer(''delta'', ''mydb.tmp_digests_ini'', ''with_runtimes_in_95th_percentile''); ++-----------------------------------------+ +| Next Output | ++-----------------------------------------+ +| Queries with Runtime in 95th Percentile | ++-----------------------------------------+ +1 row in set (0.03 sec) + +... + + +To create an overall report of the 95th percentile queries and the top 10 queries with full table scans: + +mysql> CALL sys.statement_performance_analyzer(''snapshot'', NULL, NULL); +Query OK, 0 rows affected (0.01 sec) + +mysql> SET @sys.statement_performance_analyzer.limit = 10; +Query OK, 0 rows affected (0.00 sec) + +mysql> CALL sys.statement_performance_analyzer(''overall'', NULL, ''with_runtimes_in_95th_percentile,with_full_table_scans''); ++-----------------------------------------+ +| Next Output | ++-----------------------------------------+ +| Queries with Runtime in 95th Percentile | ++-----------------------------------------+ +1 row in set (0.01 sec) + +... + ++-------------------------------------+ +| Next Output | ++-------------------------------------+ +| Top 10 Queries with Full Table Scan | ++-------------------------------------+ +1 row in set (0.09 sec) + +... + + +Use a custom view showing the top 10 query sorted by total execution time refreshing the view every minute using +the watch command in Linux. + +mysql> CREATE OR REPLACE VIEW mydb.my_statements AS + -> SELECT sys.format_statement(DIGEST_TEXT) AS query, + -> SCHEMA_NAME AS db, + -> COUNT_STAR AS exec_count, + -> format_pico_time(SUM_TIMER_WAIT) AS total_latency, + -> format_pico_time(AVG_TIMER_WAIT) AS avg_latency, + -> ROUND(IFNULL(SUM_ROWS_SENT / NULLIF(COUNT_STAR, 0), 0)) AS rows_sent_avg, + -> ROUND(IFNULL(SUM_ROWS_EXAMINED / NULLIF(COUNT_STAR, 0), 0)) AS rows_examined_avg, + -> ROUND(IFNULL(SUM_ROWS_AFFECTED / NULLIF(COUNT_STAR, 0), 0)) AS rows_affected_avg, + -> DIGEST AS digest + -> FROM performance_schema.events_statements_summary_by_digest + -> ORDER BY SUM_TIMER_WAIT DESC; +Query OK, 0 rows affected (0.01 sec) + +mysql> CALL sys.statement_performance_analyzer(''create_table'', ''mydb.digests_prev'', NULL); +Query OK, 0 rows affected (0.10 sec) + +shell$ watch -n 60 "mysql sys --table -e " +> SET @sys.statement_performance_analyzer.view = ''mydb.my_statements''; +> SET @sys.statement_performance_analyzer.limit = 10; +> CALL statement_performance_analyzer(''snapshot'', NULL, NULL); +> CALL statement_performance_analyzer(''delta'', ''mydb.digests_prev'', ''custom''); +> CALL statement_performance_analyzer(''save'', ''mydb.digests_prev'', NULL); +> "" + +Every 60.0s: mysql sys --table -e " ... Mon Dec 22 10:58:51 2014 + ++----------------------------------+ +| Next Output | ++----------------------------------+ +| Top 10 Queries Using Custom View | ++----------------------------------+ ++-------------------+-------+------------+---------------+-------------+---------------+-------------------+-------------------+----------------------------------+ +| query | db | exec_count | total_latency | avg_latency | rows_sent_avg | rows_examined_avg | rows_affected_avg | digest | ++-------------------+-------+------------+---------------+-------------+---------------+-------------------+-------------------+----------------------------------+ +... +' + sql security invoker +BEGIN + DECLARE v_table_exists, v_tmp_digests_table_exists, v_custom_view_exists ENUM('', 'BASE TABLE', 'VIEW', 'TEMPORARY') DEFAULT ''; + DECLARE v_this_thread_enabled ENUM('YES', 'NO'); + DECLARE v_force_new_snapshot BOOLEAN DEFAULT FALSE; + DECLARE v_digests_table VARCHAR(133); + DECLARE v_quoted_table, v_quoted_custom_view VARCHAR(133) DEFAULT ''; + DECLARE v_table_db, v_table_name, v_custom_db, v_custom_name VARCHAR(64); + DECLARE v_digest_table_template, v_checksum_ref, v_checksum_table text; + DECLARE v_sql longtext; + -- Maximum supported length for MESSAGE_TEXT with the SIGNAL command is 128 chars. + DECLARE v_error_msg VARCHAR(128); + DECLARE v_old_group_concat_max_len INT UNSIGNED DEFAULT 0; + -- Don't instrument this thread + SELECT INSTRUMENTED INTO v_this_thread_enabled FROM performance_schema.threads WHERE PROCESSLIST_ID = CONNECTION_ID(); + IF (v_this_thread_enabled = 'YES') THEN + CALL sys.ps_setup_disable_thread(CONNECTION_ID()); + END IF; + -- Temporary table are used - disable sql_log_bin if necessary to prevent them replicating + SET @log_bin := @@sql_log_bin; + IF ((@log_bin = 1) AND (@@binlog_format = 'STATEMENT')) THEN + SET sql_log_bin = 0; + END IF; + -- Set configuration options + IF (@sys.statement_performance_analyzer.limit IS NULL) THEN + SET @sys.statement_performance_analyzer.limit = sys.sys_get_config('statement_performance_analyzer.limit', '100'); + END IF; + IF (@sys.debug IS NULL) THEN + SET @sys.debug = sys.sys_get_config('debug' , 'OFF'); + END IF; + -- If in_table is set, break in_table into a db and table component and check whether it exists + -- in_table = NOW() is considered like it's not set. + IF (in_table = 'NOW()') THEN + SET v_force_new_snapshot = TRUE, + in_table = NULL; + ELSEIF (in_table IS NOT NULL) THEN + IF (NOT INSTR(in_table, '.')) THEN + -- No . in the table name - use current database + -- DATABASE() will be the database of the procedure + SET v_table_db = DATABASE(), + v_table_name = in_table; + ELSE + SET v_table_db = SUBSTRING_INDEX(in_table, '.', 1); + SET v_table_name = SUBSTRING(in_table, CHAR_LENGTH(v_table_db)+2); + END IF; + SET v_quoted_table = CONCAT('`', v_table_db, '`.`', v_table_name, '`'); + IF (@sys.debug = 'ON') THEN + SELECT CONCAT('in_table is: db = ''', v_table_db, ''', table = ''', v_table_name, '''') AS 'Debug'; + END IF; + IF (v_table_db = DATABASE() AND (v_table_name = 'tmp_digests' OR v_table_name = 'tmp_digests_delta')) THEN + SET v_error_msg = CONCAT('Invalid value for in_table: ', v_quoted_table, ' is reserved table name.'); + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = v_error_msg; + END IF; + CALL sys.table_exists(v_table_db, v_table_name, v_table_exists); + IF (@sys.debug = 'ON') THEN + SELECT CONCAT('v_table_exists = ', v_table_exists) AS 'Debug'; + END IF; + IF (v_table_exists = 'BASE TABLE') THEN + SET v_old_group_concat_max_len = @@session.group_concat_max_len; + SET @@session.group_concat_max_len = 2048; + -- Verify that the table has the correct table definition + -- This can only be done for base tables as temporary aren't in information_schema.COLUMNS. + -- This also minimises the risk of using a production table. + SET v_checksum_ref = ( + SELECT GROUP_CONCAT(CONCAT(COLUMN_NAME, COLUMN_TYPE) ORDER BY ORDINAL_POSITION) AS Checksum + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = 'performance_schema' AND TABLE_NAME = 'events_statements_summary_by_digest' + ), + v_checksum_table = ( + SELECT GROUP_CONCAT(CONCAT(COLUMN_NAME, COLUMN_TYPE) ORDER BY ORDINAL_POSITION) AS Checksum + FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = v_table_db AND TABLE_NAME = v_table_name + ); + SET @@session.group_concat_max_len = v_old_group_concat_max_len; + IF (v_checksum_ref <> v_checksum_table) THEN + -- The table does not have the correct definition, so abandon + SET v_error_msg = CONCAT('The table ', + IF(CHAR_LENGTH(v_quoted_table) > 93, CONCAT('...', SUBSTRING(v_quoted_table, -90)), v_quoted_table), + ' has the wrong definition.'); + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = v_error_msg; + END IF; + END IF; + END IF; + IF (in_views IS NULL OR in_views = '') THEN + -- Set to default + SET in_views = 'with_runtimes_in_95th_percentile,analysis,with_errors_or_warnings,with_full_table_scans,with_sorting,with_temp_tables'; + END IF; + -- Validate settings + CALL sys.table_exists(DATABASE(), 'tmp_digests', v_tmp_digests_table_exists); + IF (@sys.debug = 'ON') THEN + SELECT CONCAT('v_tmp_digests_table_exists = ', v_tmp_digests_table_exists) AS 'Debug'; + END IF; + CASE + WHEN in_action IN ('snapshot', 'overall') THEN + -- in_table must be NULL, NOW(), or an existing table + IF (in_table IS NOT NULL) THEN + IF (NOT v_table_exists IN ('TEMPORARY', 'BASE TABLE')) THEN + SET v_error_msg = CONCAT('The ', in_action, ' action requires in_table to be NULL, NOW() or specify an existing table.', + ' The table ', + IF(CHAR_LENGTH(v_quoted_table) > 16, CONCAT('...', SUBSTRING(v_quoted_table, -13)), v_quoted_table), + ' does not exist.'); + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = v_error_msg; + END IF; + END IF; + WHEN in_action IN ('delta', 'save') THEN + -- in_table must be an existing table + IF (v_table_exists NOT IN ('TEMPORARY', 'BASE TABLE')) THEN + SET v_error_msg = CONCAT('The ', in_action, ' action requires in_table to be an existing table.', + IF(in_table IS NOT NULL, CONCAT(' The table ', + IF(CHAR_LENGTH(v_quoted_table) > 39, CONCAT('...', SUBSTRING(v_quoted_table, -36)), v_quoted_table), + ' does not exist.'), '')); + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = v_error_msg; + END IF; + IF (in_action = 'delta' AND v_tmp_digests_table_exists <> 'TEMPORARY') THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'An existing snapshot generated with the statement_performance_analyzer() must exist.'; + END IF; + WHEN in_action = 'create_tmp' THEN + -- in_table must not exists as a temporary table + IF (v_table_exists = 'TEMPORARY') THEN + SET v_error_msg = CONCAT('Cannot create the table ', + IF(CHAR_LENGTH(v_quoted_table) > 72, CONCAT('...', SUBSTRING(v_quoted_table, -69)), v_quoted_table), + ' as it already exists.'); + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = v_error_msg; + END IF; + WHEN in_action = 'create_table' THEN + -- in_table must not exists at all + IF (v_table_exists <> '') THEN + SET v_error_msg = CONCAT('Cannot create the table ', + IF(CHAR_LENGTH(v_quoted_table) > 52, CONCAT('...', SUBSTRING(v_quoted_table, -49)), v_quoted_table), + ' as it already exists', + IF(v_table_exists = 'TEMPORARY', ' as a temporary table.', '.')); + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = v_error_msg; + END IF; + WHEN in_action = 'cleanup' THEN + -- doesn't use any of the arguments + DO (SELECT 1); + ELSE + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'Unknown action. Supported actions are: cleanup, create_table, create_tmp, delta, overall, save, snapshot'; + END CASE; + SET v_digest_table_template = 'CREATE %{TEMPORARY}TABLE %{TABLE_NAME} ( + `SCHEMA_NAME` varchar(64) DEFAULT NULL, + `DIGEST` varchar(64) DEFAULT NULL, + `DIGEST_TEXT` longtext, + `COUNT_STAR` bigint unsigned NOT NULL, + `SUM_TIMER_WAIT` bigint unsigned NOT NULL, + `MIN_TIMER_WAIT` bigint unsigned NOT NULL, + `AVG_TIMER_WAIT` bigint unsigned NOT NULL, + `MAX_TIMER_WAIT` bigint unsigned NOT NULL, + `SUM_LOCK_TIME` bigint unsigned NOT NULL, + `SUM_ERRORS` bigint unsigned NOT NULL, + `SUM_WARNINGS` bigint unsigned NOT NULL, + `SUM_ROWS_AFFECTED` bigint unsigned NOT NULL, + `SUM_ROWS_SENT` bigint unsigned NOT NULL, + `SUM_ROWS_EXAMINED` bigint unsigned NOT NULL, + `SUM_CREATED_TMP_DISK_TABLES` bigint unsigned NOT NULL, + `SUM_CREATED_TMP_TABLES` bigint unsigned NOT NULL, + `SUM_SELECT_FULL_JOIN` bigint unsigned NOT NULL, + `SUM_SELECT_FULL_RANGE_JOIN` bigint unsigned NOT NULL, + `SUM_SELECT_RANGE` bigint unsigned NOT NULL, + `SUM_SELECT_RANGE_CHECK` bigint unsigned NOT NULL, + `SUM_SELECT_SCAN` bigint unsigned NOT NULL, + `SUM_SORT_MERGE_PASSES` bigint unsigned NOT NULL, + `SUM_SORT_RANGE` bigint unsigned NOT NULL, + `SUM_SORT_ROWS` bigint unsigned NOT NULL, + `SUM_SORT_SCAN` bigint unsigned NOT NULL, + `SUM_NO_INDEX_USED` bigint unsigned NOT NULL, + `SUM_NO_GOOD_INDEX_USED` bigint unsigned NOT NULL, + `SUM_CPU_TIME` bigint unsigned NOT NULL, + `MAX_CONTROLLED_MEMORY` bigint unsigned NOT NULL, + `MAX_TOTAL_MEMORY` bigint unsigned NOT NULL, + `COUNT_SECONDARY` bigint unsigned NOT NULL, + `FIRST_SEEN` timestamp(6) NULL DEFAULT NULL, + `LAST_SEEN` timestamp(6) NULL DEFAULT NULL, + `QUANTILE_95` bigint unsigned NOT NULL, + `QUANTILE_99` bigint unsigned NOT NULL, + `QUANTILE_999` bigint unsigned NOT NULL, + `QUERY_SAMPLE_TEXT` longtext, + `QUERY_SAMPLE_SEEN` timestamp(6) NULL DEFAULT NULL, + `QUERY_SAMPLE_TIMER_WAIT` bigint unsigned NOT NULL, + INDEX (SCHEMA_NAME, DIGEST) +) DEFAULT CHARSET=utf8mb4'; + -- Do the action + -- The actions snapshot, ... requires a fresh snapshot - create it now + IF (v_force_new_snapshot + OR in_action = 'snapshot' + OR (in_action = 'overall' AND in_table IS NULL) + OR (in_action = 'save' AND v_tmp_digests_table_exists <> 'TEMPORARY') + ) THEN + IF (v_tmp_digests_table_exists = 'TEMPORARY') THEN + IF (@sys.debug = 'ON') THEN + SELECT 'DROP TEMPORARY TABLE IF EXISTS tmp_digests' AS 'Debug'; + END IF; + DROP TEMPORARY TABLE IF EXISTS tmp_digests; + END IF; + CALL sys.execute_prepared_stmt(REPLACE(REPLACE(v_digest_table_template, '%{TEMPORARY}', 'TEMPORARY '), '%{TABLE_NAME}', 'tmp_digests')); + SET v_sql = CONCAT('INSERT INTO tmp_digests SELECT * FROM ', + IF(in_table IS NULL OR in_action = 'save', 'performance_schema.events_statements_summary_by_digest', v_quoted_table)); + CALL sys.execute_prepared_stmt(v_sql); + END IF; + -- Go through the remaining actions + IF (in_action IN ('create_table', 'create_tmp')) THEN + IF (in_action = 'create_table') THEN + CALL sys.execute_prepared_stmt(REPLACE(REPLACE(v_digest_table_template, '%{TEMPORARY}', ''), '%{TABLE_NAME}', v_quoted_table)); + ELSE + CALL sys.execute_prepared_stmt(REPLACE(REPLACE(v_digest_table_template, '%{TEMPORARY}', 'TEMPORARY '), '%{TABLE_NAME}', v_quoted_table)); + END IF; + ELSEIF (in_action = 'save') THEN + CALL sys.execute_prepared_stmt(CONCAT('DELETE FROM ', v_quoted_table)); + CALL sys.execute_prepared_stmt(CONCAT('INSERT INTO ', v_quoted_table, ' SELECT * FROM tmp_digests')); + ELSEIF (in_action = 'cleanup') THEN + DROP TEMPORARY TABLE IF EXISTS sys.tmp_digests; + DROP TEMPORARY TABLE IF EXISTS sys.tmp_digests_delta; + ELSEIF (in_action IN ('overall', 'delta')) THEN + -- These are almost the same - for delta calculate the delta in tmp_digests_delta and use that instead of tmp_digests. + -- And overall allows overriding the table to use. + IF (in_action = 'overall') THEN + IF (in_table IS NULL) THEN + SET v_digests_table = 'tmp_digests'; + ELSE + SET v_digests_table = v_quoted_table; + END IF; + ELSE + SET v_digests_table = 'tmp_digests_delta'; + DROP TEMPORARY TABLE IF EXISTS tmp_digests_delta; + CREATE TEMPORARY TABLE tmp_digests_delta LIKE tmp_digests; + SET v_sql = CONCAT('INSERT INTO tmp_digests_delta +SELECT `d_end`.`SCHEMA_NAME`, + `d_end`.`DIGEST`, + `d_end`.`DIGEST_TEXT`, + `d_end`.`COUNT_STAR`-IFNULL(`d_start`.`COUNT_STAR`, 0) AS ''COUNT_STAR'', + `d_end`.`SUM_TIMER_WAIT`-IFNULL(`d_start`.`SUM_TIMER_WAIT`, 0) AS ''SUM_TIMER_WAIT'', + `d_end`.`MIN_TIMER_WAIT` AS ''MIN_TIMER_WAIT'', + IFNULL((`d_end`.`SUM_TIMER_WAIT`-IFNULL(`d_start`.`SUM_TIMER_WAIT`, 0))/NULLIF(`d_end`.`COUNT_STAR`-IFNULL(`d_start`.`COUNT_STAR`, 0), 0), 0) AS ''AVG_TIMER_WAIT'', + `d_end`.`MAX_TIMER_WAIT` AS ''MAX_TIMER_WAIT'', + `d_end`.`SUM_LOCK_TIME`-IFNULL(`d_start`.`SUM_LOCK_TIME`, 0) AS ''SUM_LOCK_TIME'', + `d_end`.`SUM_ERRORS`-IFNULL(`d_start`.`SUM_ERRORS`, 0) AS ''SUM_ERRORS'', + `d_end`.`SUM_WARNINGS`-IFNULL(`d_start`.`SUM_WARNINGS`, 0) AS ''SUM_WARNINGS'', + `d_end`.`SUM_ROWS_AFFECTED`-IFNULL(`d_start`.`SUM_ROWS_AFFECTED`, 0) AS ''SUM_ROWS_AFFECTED'', + `d_end`.`SUM_ROWS_SENT`-IFNULL(`d_start`.`SUM_ROWS_SENT`, 0) AS ''SUM_ROWS_SENT'', + `d_end`.`SUM_ROWS_EXAMINED`-IFNULL(`d_start`.`SUM_ROWS_EXAMINED`, 0) AS ''SUM_ROWS_EXAMINED'', + `d_end`.`SUM_CREATED_TMP_DISK_TABLES`-IFNULL(`d_start`.`SUM_CREATED_TMP_DISK_TABLES`, 0) AS ''SUM_CREATED_TMP_DISK_TABLES'', + `d_end`.`SUM_CREATED_TMP_TABLES`-IFNULL(`d_start`.`SUM_CREATED_TMP_TABLES`, 0) AS ''SUM_CREATED_TMP_TABLES'', + `d_end`.`SUM_SELECT_FULL_JOIN`-IFNULL(`d_start`.`SUM_SELECT_FULL_JOIN`, 0) AS ''SUM_SELECT_FULL_JOIN'', + `d_end`.`SUM_SELECT_FULL_RANGE_JOIN`-IFNULL(`d_start`.`SUM_SELECT_FULL_RANGE_JOIN`, 0) AS ''SUM_SELECT_FULL_RANGE_JOIN'', + `d_end`.`SUM_SELECT_RANGE`-IFNULL(`d_start`.`SUM_SELECT_RANGE`, 0) AS ''SUM_SELECT_RANGE'', + `d_end`.`SUM_SELECT_RANGE_CHECK`-IFNULL(`d_start`.`SUM_SELECT_RANGE_CHECK`, 0) AS ''SUM_SELECT_RANGE_CHECK'', + `d_end`.`SUM_SELECT_SCAN`-IFNULL(`d_start`.`SUM_SELECT_SCAN`, 0) AS ''SUM_SELECT_SCAN'', + `d_end`.`SUM_SORT_MERGE_PASSES`-IFNULL(`d_start`.`SUM_SORT_MERGE_PASSES`, 0) AS ''SUM_SORT_MERGE_PASSES'', + `d_end`.`SUM_SORT_RANGE`-IFNULL(`d_start`.`SUM_SORT_RANGE`, 0) AS ''SUM_SORT_RANGE'', + `d_end`.`SUM_SORT_ROWS`-IFNULL(`d_start`.`SUM_SORT_ROWS`, 0) AS ''SUM_SORT_ROWS'', + `d_end`.`SUM_SORT_SCAN`-IFNULL(`d_start`.`SUM_SORT_SCAN`, 0) AS ''SUM_SORT_SCAN'', + `d_end`.`SUM_NO_INDEX_USED`-IFNULL(`d_start`.`SUM_NO_INDEX_USED`, 0) AS ''SUM_NO_INDEX_USED'', + `d_end`.`SUM_NO_GOOD_INDEX_USED`-IFNULL(`d_start`.`SUM_NO_GOOD_INDEX_USED`, 0) AS ''SUM_NO_GOOD_INDEX_USED'', + `d_end`.`SUM_CPU_TIME`-IFNULL(`d_start`.`SUM_CPU_TIME`, 0) AS ''SUM_CPU_TIME'', + `d_end`.`MAX_CONTROLLED_MEMORY` AS ''MAX_CONTROLLED_MEMORY'', + `d_end`.`MAX_TOTAL_MEMORY` AS ''MAX_TOTAL_MEMORY'', + `d_end`.`COUNT_SECONDARY`-IFNULL(`d_start`.`COUNT_SECONDARY`, 0) AS ''COUNT_SECONDARY'', + `d_end`.`FIRST_SEEN`, + `d_end`.`LAST_SEEN`, + `d_end`.`QUANTILE_95`, + `d_end`.`QUANTILE_99`, + `d_end`.`QUANTILE_999`, + `d_end`.`QUERY_SAMPLE_TEXT`, + `d_end`.`QUERY_SAMPLE_SEEN`, + `d_end`.`QUERY_SAMPLE_TIMER_WAIT` + FROM tmp_digests d_end + LEFT OUTER JOIN ', v_quoted_table, ' d_start ON `d_start`.`DIGEST` = `d_end`.`DIGEST` + AND (`d_start`.`SCHEMA_NAME` = `d_end`.`SCHEMA_NAME` + OR (`d_start`.`SCHEMA_NAME` IS NULL AND `d_end`.`SCHEMA_NAME` IS NULL) + ) + WHERE `d_end`.`COUNT_STAR`-IFNULL(`d_start`.`COUNT_STAR`, 0) > 0'); + CALL sys.execute_prepared_stmt(v_sql); + END IF; + IF (FIND_IN_SET('with_runtimes_in_95th_percentile', in_views)) THEN + SELECT 'Queries with Runtime in 95th Percentile' AS 'Next Output'; + DROP TEMPORARY TABLE IF EXISTS tmp_digest_avg_latency_distribution1; + DROP TEMPORARY TABLE IF EXISTS tmp_digest_avg_latency_distribution2; + DROP TEMPORARY TABLE IF EXISTS tmp_digest_95th_percentile_by_avg_us; + CREATE TEMPORARY TABLE tmp_digest_avg_latency_distribution1 ( + cnt bigint unsigned NOT NULL, + avg_us decimal(21,0) NOT NULL, + PRIMARY KEY (avg_us) + ) ENGINE=InnoDB; + SET v_sql = CONCAT('INSERT INTO tmp_digest_avg_latency_distribution1 +SELECT COUNT(*) cnt, + ROUND(avg_timer_wait/1000000) AS avg_us + FROM ', v_digests_table, ' + GROUP BY avg_us'); + CALL sys.execute_prepared_stmt(v_sql); + CREATE TEMPORARY TABLE tmp_digest_avg_latency_distribution2 LIKE tmp_digest_avg_latency_distribution1; + INSERT INTO tmp_digest_avg_latency_distribution2 SELECT * FROM tmp_digest_avg_latency_distribution1; + CREATE TEMPORARY TABLE tmp_digest_95th_percentile_by_avg_us ( + avg_us decimal(21,0) NOT NULL, + percentile decimal(46,4) NOT NULL, + PRIMARY KEY (avg_us) + ) ENGINE=InnoDB; + SET v_sql = CONCAT('INSERT INTO tmp_digest_95th_percentile_by_avg_us +SELECT s2.avg_us avg_us, + IFNULL(SUM(s1.cnt)/NULLIF((SELECT COUNT(*) FROM ', v_digests_table, '), 0), 0) percentile + FROM tmp_digest_avg_latency_distribution1 AS s1 + JOIN tmp_digest_avg_latency_distribution2 AS s2 ON s1.avg_us <= s2.avg_us + GROUP BY s2.avg_us +HAVING percentile > 0.95 + ORDER BY percentile + LIMIT 1'); + CALL sys.execute_prepared_stmt(v_sql); + SET v_sql = + REPLACE( + REPLACE( + (SELECT VIEW_DEFINITION + FROM information_schema.VIEWS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_runtimes_in_95th_percentile' + ), + '`performance_schema`.`events_statements_summary_by_digest`', + v_digests_table + ), + 'sys.x$ps_digest_95th_percentile_by_avg_us', + '`sys`.`x$ps_digest_95th_percentile_by_avg_us`' + ); + CALL sys.execute_prepared_stmt(v_sql); + DROP TEMPORARY TABLE tmp_digest_avg_latency_distribution1; + DROP TEMPORARY TABLE tmp_digest_avg_latency_distribution2; + DROP TEMPORARY TABLE tmp_digest_95th_percentile_by_avg_us; + END IF; + IF (FIND_IN_SET('analysis', in_views)) THEN + SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries Ordered by Total Latency') AS 'Next Output'; + SET v_sql = + REPLACE( + (SELECT VIEW_DEFINITION + FROM information_schema.VIEWS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statement_analysis' + ), + '`performance_schema`.`events_statements_summary_by_digest`', + v_digests_table + ); + IF (@sys.statement_performance_analyzer.limit > 0) THEN + SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit); + END IF; + CALL sys.execute_prepared_stmt(v_sql); + END IF; + IF (FIND_IN_SET('with_errors_or_warnings', in_views)) THEN + SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Errors') AS 'Next Output'; + SET v_sql = + REPLACE( + (SELECT VIEW_DEFINITION + FROM information_schema.VIEWS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_errors_or_warnings' + ), + '`performance_schema`.`events_statements_summary_by_digest`', + v_digests_table + ); + IF (@sys.statement_performance_analyzer.limit > 0) THEN + SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit); + END IF; + CALL sys.execute_prepared_stmt(v_sql); + END IF; + IF (FIND_IN_SET('with_full_table_scans', in_views)) THEN + SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Full Table Scan') AS 'Next Output'; + SET v_sql = + REPLACE( + (SELECT VIEW_DEFINITION + FROM information_schema.VIEWS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_full_table_scans' + ), + '`performance_schema`.`events_statements_summary_by_digest`', + v_digests_table + ); + IF (@sys.statement_performance_analyzer.limit > 0) THEN + SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit); + END IF; + CALL sys.execute_prepared_stmt(v_sql); + END IF; + IF (FIND_IN_SET('with_sorting', in_views)) THEN + SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Sorting') AS 'Next Output'; + SET v_sql = + REPLACE( + (SELECT VIEW_DEFINITION + FROM information_schema.VIEWS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_sorting' + ), + '`performance_schema`.`events_statements_summary_by_digest`', + v_digests_table + ); + IF (@sys.statement_performance_analyzer.limit > 0) THEN + SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit); + END IF; + CALL sys.execute_prepared_stmt(v_sql); + END IF; + IF (FIND_IN_SET('with_temp_tables', in_views)) THEN + SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries with Internal Temporary Tables') AS 'Next Output'; + SET v_sql = + REPLACE( + (SELECT VIEW_DEFINITION + FROM information_schema.VIEWS + WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'statements_with_temp_tables' + ), + '`performance_schema`.`events_statements_summary_by_digest`', + v_digests_table + ); + IF (@sys.statement_performance_analyzer.limit > 0) THEN + SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit); + END IF; + CALL sys.execute_prepared_stmt(v_sql); + END IF; + IF (FIND_IN_SET('custom', in_views)) THEN + SELECT CONCAT('Top ', @sys.statement_performance_analyzer.limit, ' Queries Using Custom View') AS 'Next Output'; + IF (@sys.statement_performance_analyzer.view IS NULL) THEN + SET @sys.statement_performance_analyzer.view = sys.sys_get_config('statement_performance_analyzer.view', NULL); + END IF; + IF (@sys.statement_performance_analyzer.view IS NULL) THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'The @sys.statement_performance_analyzer.view user variable must be set with the view or query to use.'; + END IF; + IF (NOT INSTR(@sys.statement_performance_analyzer.view, ' ')) THEN + -- No spaces, so can't be a query + IF (NOT INSTR(@sys.statement_performance_analyzer.view, '.')) THEN + -- No . in the table name - use current database + -- DATABASE() will be the database of the procedure + SET v_custom_db = DATABASE(), + v_custom_name = @sys.statement_performance_analyzer.view; + ELSE + SET v_custom_db = SUBSTRING_INDEX(@sys.statement_performance_analyzer.view, '.', 1); + SET v_custom_name = SUBSTRING(@sys.statement_performance_analyzer.view, CHAR_LENGTH(v_custom_db)+2); + END IF; + CALL sys.table_exists(v_custom_db, v_custom_name, v_custom_view_exists); + IF (v_custom_view_exists <> 'VIEW') THEN + SIGNAL SQLSTATE '45000' + SET MESSAGE_TEXT = 'The @sys.statement_performance_analyzer.view user variable is set but specified neither an existing view nor a query.'; + END IF; + SET v_sql = + REPLACE( + (SELECT VIEW_DEFINITION + FROM information_schema.VIEWS + WHERE TABLE_SCHEMA = v_custom_db AND TABLE_NAME = v_custom_name + ), + '`performance_schema`.`events_statements_summary_by_digest`', + v_digests_table + ); + ELSE + SET v_sql = REPLACE(@sys.statement_performance_analyzer.view, '`performance_schema`.`events_statements_summary_by_digest`', v_digests_table); + END IF; + IF (@sys.statement_performance_analyzer.limit > 0) THEN + SET v_sql = CONCAT(v_sql, ' LIMIT ', @sys.statement_performance_analyzer.limit); + END IF; + CALL sys.execute_prepared_stmt(v_sql); + END IF; + END IF; + -- Restore INSTRUMENTED for this thread + IF (v_this_thread_enabled = 'YES') THEN + CALL sys.ps_setup_enable_thread(CONNECTION_ID()); + END IF; + IF ((@log_bin = 1) AND (@@binlog_format = 'STATEMENT')) THEN + SET sql_log_bin = @log_bin; + END IF; +END; + diff --git a/IDEA/sys/statements_with_errors_or_warnings.sql b/IDEA/sys/statements_with_errors_or_warnings.sql new file mode 100644 index 00000000..47dc8bbb --- /dev/null +++ b/IDEA/sys/statements_with_errors_or_warnings.sql @@ -0,0 +1,21 @@ +create definer = `mysql.sys`@localhost view sys.statements_with_errors_or_warnings as +select `sys`.`format_statement`(`performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT`) AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` AS `errors`, + (ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0) * + 100) AS `error_pct`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` AS `warnings`, + (ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0) * + 100) AS `warning_pct`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest` +from `performance_schema`.`events_statements_summary_by_digest` +where ((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` > 0) or + (`performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` > 0)) +order by `performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` desc, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` desc; + diff --git a/IDEA/sys/statements_with_full_table_scans.sql b/IDEA/sys/statements_with_full_table_scans.sql new file mode 100644 index 00000000..3f290f76 --- /dev/null +++ b/IDEA/sys/statements_with_full_table_scans.sql @@ -0,0 +1,30 @@ +create definer = `mysql.sys`@localhost view sys.statements_with_full_table_scans as +select `sys`.`format_statement`(`performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT`) AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + format_pico_time(`performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT`) AS `total_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` AS `no_index_used_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_GOOD_INDEX_USED` AS `no_good_index_used_count`, + round((ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0) * 100), + 0) AS `no_index_used_pct`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_SENT` AS `rows_sent`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + round((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_SENT` / + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`), + 0) AS `rows_sent_avg`, + round((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_EXAMINED` / + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`), + 0) AS `rows_examined_avg`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest` +from `performance_schema`.`events_statements_summary_by_digest` +where (((`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` > 0) or + (`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_GOOD_INDEX_USED` > 0)) and + (not ((`performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT` like 'SHOW%')))) +order by round((ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0) * 100), + 0) desc, + format_pico_time(`performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/statements_with_runtimes_in_95th_percentile.sql b/IDEA/sys/statements_with_runtimes_in_95th_percentile.sql new file mode 100644 index 00000000..83360bb1 --- /dev/null +++ b/IDEA/sys/statements_with_runtimes_in_95th_percentile.sql @@ -0,0 +1,22 @@ +create definer = `mysql.sys`@localhost view sys.statements_with_runtimes_in_95th_percentile as +select `sys`.`format_statement`(`stmts`.`DIGEST_TEXT`) AS `query`, + `stmts`.`SCHEMA_NAME` AS `db`, + if(((`stmts`.`SUM_NO_GOOD_INDEX_USED` > 0) or (`stmts`.`SUM_NO_INDEX_USED` > 0)), '*', '') AS `full_scan`, + `stmts`.`COUNT_STAR` AS `exec_count`, + `stmts`.`SUM_ERRORS` AS `err_count`, + `stmts`.`SUM_WARNINGS` AS `warn_count`, + format_pico_time(`stmts`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`stmts`.`MAX_TIMER_WAIT`) AS `max_latency`, + format_pico_time(`stmts`.`AVG_TIMER_WAIT`) AS `avg_latency`, + `stmts`.`SUM_ROWS_SENT` AS `rows_sent`, + round(ifnull((`stmts`.`SUM_ROWS_SENT` / nullif(`stmts`.`COUNT_STAR`, 0)), 0), 0) AS `rows_sent_avg`, + `stmts`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + round(ifnull((`stmts`.`SUM_ROWS_EXAMINED` / nullif(`stmts`.`COUNT_STAR`, 0)), 0), + 0) AS `rows_examined_avg`, + `stmts`.`FIRST_SEEN` AS `first_seen`, + `stmts`.`LAST_SEEN` AS `last_seen`, + `stmts`.`DIGEST` AS `digest` +from (`performance_schema`.`events_statements_summary_by_digest` `stmts` join `sys`.`x$ps_digest_95th_percentile_by_avg_us` `top_percentile` + on ((round((`stmts`.`AVG_TIMER_WAIT` / 1000000), 0) >= `sys`.`top_percentile`.`avg_us`))) +order by `stmts`.`AVG_TIMER_WAIT` desc; + diff --git a/IDEA/sys/statements_with_sorting.sql b/IDEA/sys/statements_with_sorting.sql new file mode 100644 index 00000000..894043cf --- /dev/null +++ b/IDEA/sys/statements_with_sorting.sql @@ -0,0 +1,22 @@ +create definer = `mysql.sys`@localhost view sys.statements_with_sorting as +select `sys`.`format_statement`(`performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT`) AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + format_pico_time(`performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT`) AS `total_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_MERGE_PASSES` AS `sort_merge_passes`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_MERGE_PASSES` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `avg_sort_merges`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_SCAN` AS `sorts_using_scans`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_RANGE` AS `sort_using_range`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_ROWS` AS `rows_sorted`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_ROWS` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `avg_rows_sorted`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest` +from `performance_schema`.`events_statements_summary_by_digest` +where (`performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_ROWS` > 0) +order by `performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/statements_with_temp_tables.sql b/IDEA/sys/statements_with_temp_tables.sql new file mode 100644 index 00000000..b70a5041 --- /dev/null +++ b/IDEA/sys/statements_with_temp_tables.sql @@ -0,0 +1,22 @@ +create definer = `mysql.sys`@localhost view sys.statements_with_temp_tables as +select `sys`.`format_statement`(`performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT`) AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + format_pico_time(`performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT`) AS `total_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` AS `memory_tmp_tables`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_DISK_TABLES` AS `disk_tmp_tables`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `avg_tmp_tables_per_query`, + round((ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_DISK_TABLES` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES`, 0)), + 0) * 100), + 0) AS `tmp_tables_to_disk_pct`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest` +from `performance_schema`.`events_statements_summary_by_digest` +where (`performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` > 0) +order by `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_DISK_TABLES` desc, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` desc; + diff --git a/IDEA/sys/sys_config.sql b/IDEA/sys/sys_config.sql new file mode 100644 index 00000000..a099d840 --- /dev/null +++ b/IDEA/sys/sys_config.sql @@ -0,0 +1,11 @@ +create table sys.sys_config +( + variable varchar(128) not null + primary key, + value varchar(128) null, + set_time timestamp default CURRENT_TIMESTAMP null on update CURRENT_TIMESTAMP, + set_by varchar(128) null +); + +grant select on table sys.sys_config to 'mysql.sys'@localhost; + diff --git a/IDEA/sys/sys_config_insert_set_user.sql b/IDEA/sys/sys_config_insert_set_user.sql new file mode 100644 index 00000000..d34a1abe --- /dev/null +++ b/IDEA/sys/sys_config_insert_set_user.sql @@ -0,0 +1,10 @@ +create definer = `mysql.sys`@localhost trigger sys.sys_config_insert_set_user + before insert + on sys.sys_config + for each row +BEGIN + IF @sys.ignore_sys_config_triggers != true AND NEW.set_by IS NULL THEN + SET NEW.set_by = USER(); + END IF; +END; + diff --git a/IDEA/sys/sys_config_update_set_user.sql b/IDEA/sys/sys_config_update_set_user.sql new file mode 100644 index 00000000..7f98cb14 --- /dev/null +++ b/IDEA/sys/sys_config_update_set_user.sql @@ -0,0 +1,10 @@ +create definer = `mysql.sys`@localhost trigger sys.sys_config_update_set_user + before update + on sys.sys_config + for each row +BEGIN + IF @sys.ignore_sys_config_triggers != true AND NEW.set_by IS NULL THEN + SET NEW.set_by = USER(); + END IF; +END; + diff --git a/IDEA/sys/sys_get_config.sql b/IDEA/sys/sys_get_config.sql new file mode 100644 index 00000000..a31e605b --- /dev/null +++ b/IDEA/sys/sys_get_config.sql @@ -0,0 +1,72 @@ +create + definer = `mysql.sys`@localhost function sys.sys_get_config(in_variable_name varchar(128), in_default_value varchar(128)) returns varchar(128) + comment ' +Description +----------- + +Returns the value for the requested variable using the following logic: + + 1. If the option exists in sys.sys_config return the value from there. + 2. Else fall back on the provided default value. + +Notes for using sys_get_config(): + + * If the default value argument to sys_get_config() is NULL and case 2. is reached, NULL is returned. + It is then expected that the caller is able to handle NULL for the given configuration option. + * The convention is to name the user variables @sys.. It is that + is stored in the sys_config table and is what is expected as the argument to sys_get_config(). + * If you want to check whether the configuration option has already been set and if not assign with + the return value of sys_get_config() you can use IFNULL(...) (see example below). However this should + not be done inside a loop (e.g. for each row in a result set) as for repeated calls where assignment + is only needed in the first iteration using IFNULL(...) is expected to be significantly slower than + using an IF (...) THEN ... END IF; block (see example below). + +Parameters +----------- + +in_variable_name (VARCHAR(128)): + The name of the config option to return the value for. + +in_default_value (VARCHAR(128)): + The default value to return if the variable does not exist in sys.sys_config. + +Returns +----------- + +VARCHAR(128) + +Example +----------- + +-- Get the configuration value from sys.sys_config falling back on 128 if the option is not present in the table. +mysql> SELECT sys.sys_get_config(''statement_truncate_len'', 128) AS Value; ++-------+ +| Value | ++-------+ +| 64 | ++-------+ +1 row in set (0.00 sec) + +-- Check whether the option is already set, if not assign - IFNULL(...) one liner example. +mysql> SET @sys.statement_truncate_len = IFNULL(@sys.statement_truncate_len, sys.sys_get_config(''statement_truncate_len'', 64)); +Query OK, 0 rows affected (0.00 sec) + +-- Check whether the option is already set, if not assign - IF ... THEN ... END IF example. +IF (@sys.statement_truncate_len IS NULL) THEN + SET @sys.statement_truncate_len = sys.sys_get_config(''statement_truncate_len'', 64); +END IF; +' + deterministic + sql security invoker + reads sql data +BEGIN + DECLARE v_value VARCHAR(128) DEFAULT NULL; + -- Check if we have the variable in the sys.sys_config table + SET v_value = (SELECT value FROM sys.sys_config WHERE variable = in_variable_name); + -- Protection against the variable not existing in sys_config + IF (v_value IS NULL) THEN + SET v_value = in_default_value; + END IF; + RETURN v_value; +END; + diff --git a/IDEA/sys/table_exists.sql b/IDEA/sys/table_exists.sql new file mode 100644 index 00000000..c3f40703 --- /dev/null +++ b/IDEA/sys/table_exists.sql @@ -0,0 +1,125 @@ +create + definer = `mysql.sys`@localhost procedure sys.table_exists(IN in_db varchar(64), IN in_table varchar(64), + OUT out_exists enum ('', 'BASE TABLE', 'VIEW', 'TEMPORARY')) + comment ' +Description +----------- + +Tests whether the table specified in in_db and in_table exists either as a regular +table, or as a temporary table. The returned value corresponds to the table that +will be used, so if there''s both a temporary and a permanent table with the given +name, then ''TEMPORARY'' will be returned. + +Parameters +----------- + +in_db (VARCHAR(64)): + The database name to check for the existance of the table in. + +in_table (VARCHAR(64)): + The name of the table to check the existance of. + +out_exists ENUM('''', ''BASE TABLE'', ''VIEW'', ''TEMPORARY''): + The return value: whether the table exists. The value is one of: + * '''' - the table does not exist neither as a base table, view, nor temporary table. + * ''BASE TABLE'' - the table name exists as a permanent base table table. + * ''VIEW'' - the table name exists as a view. + * ''TEMPORARY'' - the table name exists as a temporary table. + +Example +-------- + +mysql> CREATE DATABASE db1; +Query OK, 1 row affected (0.07 sec) + +mysql> use db1; +Database changed +mysql> CREATE TABLE t1 (id INT PRIMARY KEY); +Query OK, 0 rows affected (0.08 sec) + +mysql> CREATE TABLE t2 (id INT PRIMARY KEY); +Query OK, 0 rows affected (0.08 sec) + +mysql> CREATE view v_t1 AS SELECT * FROM t1; +Query OK, 0 rows affected (0.00 sec) + +mysql> CREATE TEMPORARY TABLE t1 (id INT PRIMARY KEY); +Query OK, 0 rows affected (0.00 sec) + +mysql> CALL sys.table_exists(''db1'', ''t1'', @exists); SELECT @exists; +Query OK, 0 rows affected (0.00 sec) + ++------------+ +| @exists | ++------------+ +| TEMPORARY | ++------------+ +1 row in set (0.00 sec) + +mysql> CALL sys.table_exists(''db1'', ''t2'', @exists); SELECT @exists; +Query OK, 0 rows affected (0.00 sec) + ++------------+ +| @exists | ++------------+ +| BASE TABLE | ++------------+ +1 row in set (0.01 sec) + +mysql> CALL sys.table_exists(''db1'', ''v_t1'', @exists); SELECT @exists; +Query OK, 0 rows affected (0.00 sec) + ++---------+ +| @exists | ++---------+ +| VIEW | ++---------+ +1 row in set (0.00 sec) + +mysql> CALL sys.table_exists(''db1'', ''t3'', @exists); SELECT @exists; +Query OK, 0 rows affected (0.01 sec) + ++---------+ +| @exists | ++---------+ +| | ++---------+ +1 row in set (0.00 sec) +' + sql security invoker +BEGIN + DECLARE v_error BOOLEAN DEFAULT FALSE; + DECLARE CONTINUE HANDLER FOR 1050 SET v_error = TRUE; + DECLARE CONTINUE HANDLER FOR 1146 SET v_error = TRUE; + SET out_exists = ''; + -- Verify whether the table name exists as a normal table + IF (EXISTS(SELECT 1 FROM information_schema.TABLES WHERE TABLE_SCHEMA = in_db AND TABLE_NAME = in_table)) THEN + -- Unfortunately the only way to determine whether there is also a temporary table is to try to create + -- a temporary table with the same name. If it succeeds the table didn't exist as a temporary table. + SET @sys.tmp.table_exists.SQL = CONCAT('CREATE TEMPORARY TABLE `', in_db, '`.`', in_table, '` (id INT PRIMARY KEY)'); + PREPARE stmt_create_table FROM @sys.tmp.table_exists.SQL; + EXECUTE stmt_create_table; + DEALLOCATE PREPARE stmt_create_table; + IF (v_error) THEN + SET out_exists = 'TEMPORARY'; + ELSE + -- The temporary table was created, i.e. it didn't exist. Remove it again so we don't leave garbage around. + SET @sys.tmp.table_exists.SQL = CONCAT('DROP TEMPORARY TABLE `', in_db, '`.`', in_table, '`'); + PREPARE stmt_drop_table FROM @sys.tmp.table_exists.SQL; + EXECUTE stmt_drop_table; + DEALLOCATE PREPARE stmt_drop_table; + SET out_exists = (SELECT TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = in_db AND TABLE_NAME = in_table); + END IF; + ELSE + -- Check whether a temporary table exists with the same name. + -- If it does it's possible to SELECT from the table without causing an error. + -- If it does not exist even a PREPARE using the table will fail. + SET @sys.tmp.table_exists.SQL = CONCAT('SELECT COUNT(*) FROM `', in_db, '`.`', in_table, '`'); + PREPARE stmt_select FROM @sys.tmp.table_exists.SQL; + IF (NOT v_error) THEN + DEALLOCATE PREPARE stmt_select; + SET out_exists = 'TEMPORARY'; + END IF; + END IF; +END; + diff --git a/IDEA/sys/user_summary.sql b/IDEA/sys/user_summary.sql new file mode 100644 index 00000000..31b89a6f --- /dev/null +++ b/IDEA/sys/user_summary.sql @@ -0,0 +1,25 @@ +create definer = `mysql.sys`@localhost view sys.user_summary as +select if((`performance_schema`.`accounts`.`USER` is null), 'background', + `performance_schema`.`accounts`.`USER`) AS `user`, + sum(`sys`.`stmt`.`total`) AS `statements`, + format_pico_time(sum(`sys`.`stmt`.`total_latency`)) AS `statement_latency`, + format_pico_time(ifnull((sum(`sys`.`stmt`.`total_latency`) / nullif(sum(`sys`.`stmt`.`total`), 0)), + 0)) AS `statement_avg_latency`, + sum(`sys`.`stmt`.`full_scans`) AS `table_scans`, + sum(`sys`.`io`.`ios`) AS `file_ios`, + format_pico_time(sum(`sys`.`io`.`io_latency`)) AS `file_io_latency`, + sum(`performance_schema`.`accounts`.`CURRENT_CONNECTIONS`) AS `current_connections`, + sum(`performance_schema`.`accounts`.`TOTAL_CONNECTIONS`) AS `total_connections`, + count(distinct `performance_schema`.`accounts`.`HOST`) AS `unique_hosts`, + format_bytes(sum(`sys`.`mem`.`current_allocated`)) AS `current_memory`, + format_bytes(sum(`sys`.`mem`.`total_allocated`)) AS `total_memory_allocated` +from (((`performance_schema`.`accounts` left join `sys`.`x$user_summary_by_statement_latency` `stmt` on (( + if((`performance_schema`.`accounts`.`USER` is null), 'background', `performance_schema`.`accounts`.`USER`) = + `sys`.`stmt`.`user`))) left join `sys`.`x$user_summary_by_file_io` `io` + on ((if((`performance_schema`.`accounts`.`USER` is null), 'background', `performance_schema`.`accounts`.`USER`) = + `sys`.`io`.`user`))) left join `sys`.`x$memory_by_user_by_current_bytes` `mem` + on ((if((`performance_schema`.`accounts`.`USER` is null), 'background', `performance_schema`.`accounts`.`USER`) = + `sys`.`mem`.`user`))) +group by if((`performance_schema`.`accounts`.`USER` is null), 'background', `performance_schema`.`accounts`.`USER`) +order by sum(`sys`.`stmt`.`total_latency`) desc; + diff --git a/IDEA/sys/user_summary_by_file_io.sql b/IDEA/sys/user_summary_by_file_io.sql new file mode 100644 index 00000000..bf1a158b --- /dev/null +++ b/IDEA/sys/user_summary_by_file_io.sql @@ -0,0 +1,11 @@ +create definer = `mysql.sys`@localhost view sys.user_summary_by_file_io as +select if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`) AS `user`, + sum(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`COUNT_STAR`) AS `ios`, + format_pico_time(sum(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`)) AS `io_latency` +from `performance_schema`.`events_waits_summary_by_user_by_event_name` +where (`performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') +group by if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`) +order by sum(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/user_summary_by_file_io_type.sql b/IDEA/sys/user_summary_by_file_io_type.sql new file mode 100644 index 00000000..f0692b7d --- /dev/null +++ b/IDEA/sys/user_summary_by_file_io_type.sql @@ -0,0 +1,14 @@ +create definer = `mysql.sys`@localhost view sys.user_summary_by_file_io_type as +select if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`) AS `user`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) AS `latency`, + format_pico_time(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency` +from `performance_schema`.`events_waits_summary_by_user_by_event_name` +where ((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` like 'wait/io/file%') and + (`performance_schema`.`events_waits_summary_by_user_by_event_name`.`COUNT_STAR` > 0)) +order by if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`), + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/user_summary_by_stages.sql b/IDEA/sys/user_summary_by_stages.sql new file mode 100644 index 00000000..777035bc --- /dev/null +++ b/IDEA/sys/user_summary_by_stages.sql @@ -0,0 +1,13 @@ +create definer = `mysql.sys`@localhost view sys.user_summary_by_stages as +select if((`performance_schema`.`events_stages_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`USER`) AS `user`, + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`events_stages_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`events_stages_summary_by_user_by_event_name`.`AVG_TIMER_WAIT`) AS `avg_latency` +from `performance_schema`.`events_stages_summary_by_user_by_event_name` +where (`performance_schema`.`events_stages_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` <> 0) +order by if((`performance_schema`.`events_stages_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`USER`), + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/user_summary_by_statement_latency.sql b/IDEA/sys/user_summary_by_statement_latency.sql new file mode 100644 index 00000000..3ffab937 --- /dev/null +++ b/IDEA/sys/user_summary_by_statement_latency.sql @@ -0,0 +1,18 @@ +create definer = `mysql.sys`@localhost view sys.user_summary_by_statement_latency as +select if((`performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER`) AS `user`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`COUNT_STAR`) AS `total`, + format_pico_time(sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`)) AS `total_latency`, + format_pico_time(sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`MAX_TIMER_WAIT`)) AS `max_latency`, + format_pico_time(sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_LOCK_TIME`)) AS `lock_latency`, + format_pico_time(sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_CPU_TIME`)) AS `cpu_latency`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_SENT`) AS `rows_sent`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_EXAMINED`) AS `rows_examined`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_AFFECTED`) AS `rows_affected`, + (sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_NO_INDEX_USED`) + + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_NO_GOOD_INDEX_USED`)) AS `full_scans` +from `performance_schema`.`events_statements_summary_by_user_by_event_name` +group by if((`performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER`) +order by sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/user_summary_by_statement_type.sql b/IDEA/sys/user_summary_by_statement_type.sql new file mode 100644 index 00000000..2e24f62c --- /dev/null +++ b/IDEA/sys/user_summary_by_statement_type.sql @@ -0,0 +1,21 @@ +create definer = `mysql.sys`@localhost view sys.user_summary_by_statement_type as +select if((`performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER`) AS `user`, + substring_index(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`EVENT_NAME`, '/', + -(1)) AS `statement`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_LOCK_TIME`) AS `lock_latency`, + format_pico_time(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_CPU_TIME`) AS `cpu_latency`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_SENT` AS `rows_sent`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_AFFECTED` AS `rows_affected`, + (`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_NO_INDEX_USED` + + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_NO_GOOD_INDEX_USED`) AS `full_scans` +from `performance_schema`.`events_statements_summary_by_user_by_event_name` +where (`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` <> 0) +order by if((`performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER`), + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/version.sql b/IDEA/sys/version.sql new file mode 100644 index 00000000..1b7b6c17 --- /dev/null +++ b/IDEA/sys/version.sql @@ -0,0 +1,3 @@ +create definer = `mysql.sys`@localhost view sys.version as +select '2.1.3' AS `sys_version`, version() AS `mysql_version`; + diff --git a/IDEA/sys/version_major.sql b/IDEA/sys/version_major.sql new file mode 100644 index 00000000..1b341c68 --- /dev/null +++ b/IDEA/sys/version_major.sql @@ -0,0 +1,27 @@ +create + definer = `mysql.sys`@localhost function sys.version_major() returns tinyint unsigned comment ' +Description +----------- + +Returns the major version of MySQL Server. + +Returns +----------- + +TINYINT UNSIGNED + +Example +----------- + +mysql> SELECT VERSION(), sys.version_major(); ++--------------------------------------+---------------------+ +| VERSION() | sys.version_major() | ++--------------------------------------+---------------------+ +| 5.7.9-enterprise-commercial-advanced | 5 | ++--------------------------------------+---------------------+ +1 row in set (0.00 sec) +' sql security invoker no sql +BEGIN + RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', 1); +END; + diff --git a/IDEA/sys/version_minor.sql b/IDEA/sys/version_minor.sql new file mode 100644 index 00000000..4d7c3831 --- /dev/null +++ b/IDEA/sys/version_minor.sql @@ -0,0 +1,27 @@ +create + definer = `mysql.sys`@localhost function sys.version_minor() returns tinyint unsigned comment ' +Description +----------- + +Returns the minor (release series) version of MySQL Server. + +Returns +----------- + +TINYINT UNSIGNED + +Example +----------- + +mysql> SELECT VERSION(), sys.server_minor(); ++--------------------------------------+---------------------+ +| VERSION() | sys.version_minor() | ++--------------------------------------+---------------------+ +| 5.7.9-enterprise-commercial-advanced | 7 | ++--------------------------------------+---------------------+ +1 row in set (0.00 sec) +' sql security invoker no sql +BEGIN + RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', 2), '.', -1); +END; + diff --git a/IDEA/sys/version_patch.sql b/IDEA/sys/version_patch.sql new file mode 100644 index 00000000..e6f3b03e --- /dev/null +++ b/IDEA/sys/version_patch.sql @@ -0,0 +1,27 @@ +create + definer = `mysql.sys`@localhost function sys.version_patch() returns tinyint unsigned comment ' +Description +----------- + +Returns the patch release version of MySQL Server. + +Returns +----------- + +TINYINT UNSIGNED + +Example +----------- + +mysql> SELECT VERSION(), sys.version_patch(); ++--------------------------------------+---------------------+ +| VERSION() | sys.version_patch() | ++--------------------------------------+---------------------+ +| 5.7.9-enterprise-commercial-advanced | 9 | ++--------------------------------------+---------------------+ +1 row in set (0.00 sec) +' sql security invoker no sql +BEGIN + RETURN SUBSTRING_INDEX(SUBSTRING_INDEX(VERSION(), '-', 1), '.', -1); +END; + diff --git a/IDEA/sys/wait_classes_global_by_avg_latency.sql b/IDEA/sys/wait_classes_global_by_avg_latency.sql new file mode 100644 index 00000000..4950b9bd --- /dev/null +++ b/IDEA/sys/wait_classes_global_by_avg_latency.sql @@ -0,0 +1,20 @@ +create definer = `mysql.sys`@localhost view sys.wait_classes_global_by_avg_latency as +select substring_index(`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME`, '/', + 3) AS `event_class`, + sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`) AS `total`, + format_pico_time(cast(sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) as unsigned)) AS `total_latency`, + format_pico_time(min(`performance_schema`.`events_waits_summary_global_by_event_name`.`MIN_TIMER_WAIT`)) AS `min_latency`, + format_pico_time(ifnull((sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) / + nullif( + sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`), + 0)), + 0)) AS `avg_latency`, + format_pico_time(cast(max(`performance_schema`.`events_waits_summary_global_by_event_name`.`MAX_TIMER_WAIT`) as unsigned)) AS `max_latency` +from `performance_schema`.`events_waits_summary_global_by_event_name` +where ((`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT` > 0) and + (`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME` <> 'idle')) +group by `event_class` +order by ifnull((sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) / + nullif(sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`), 0)), + 0) desc; + diff --git a/IDEA/sys/wait_classes_global_by_latency.sql b/IDEA/sys/wait_classes_global_by_latency.sql new file mode 100644 index 00000000..aee57c4f --- /dev/null +++ b/IDEA/sys/wait_classes_global_by_latency.sql @@ -0,0 +1,18 @@ +create definer = `mysql.sys`@localhost view sys.wait_classes_global_by_latency as +select substring_index(`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME`, '/', + 3) AS `event_class`, + sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`) AS `total`, + format_pico_time(sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`)) AS `total_latency`, + format_pico_time(min(`performance_schema`.`events_waits_summary_global_by_event_name`.`MIN_TIMER_WAIT`)) AS `min_latency`, + format_pico_time(ifnull((sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) / + nullif( + sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`), + 0)), + 0)) AS `avg_latency`, + format_pico_time(max(`performance_schema`.`events_waits_summary_global_by_event_name`.`MAX_TIMER_WAIT`)) AS `max_latency` +from `performance_schema`.`events_waits_summary_global_by_event_name` +where ((`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT` > 0) and + (`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME` <> 'idle')) +group by substring_index(`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME`, '/', 3) +order by sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/waits_by_host_by_latency.sql b/IDEA/sys/waits_by_host_by_latency.sql new file mode 100644 index 00000000..db5c5631 --- /dev/null +++ b/IDEA/sys/waits_by_host_by_latency.sql @@ -0,0 +1,15 @@ +create definer = `mysql.sys`@localhost view sys.waits_by_host_by_latency as +select if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`) AS `host`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` AS `event`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`AVG_TIMER_WAIT`) AS `avg_latency`, + format_pico_time(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency` +from `performance_schema`.`events_waits_summary_by_host_by_event_name` +where ((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` <> 'idle') and + (`performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` > 0)) +order by if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`), + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/waits_by_user_by_latency.sql b/IDEA/sys/waits_by_user_by_latency.sql new file mode 100644 index 00000000..3f59d80b --- /dev/null +++ b/IDEA/sys/waits_by_user_by_latency.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.waits_by_user_by_latency as +select if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`) AS `user`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` AS `event`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`AVG_TIMER_WAIT`) AS `avg_latency`, + format_pico_time(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency` +from `performance_schema`.`events_waits_summary_by_user_by_event_name` +where ((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` <> 'idle') and + (`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is not null) and + (`performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` > 0)) +order by if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`), + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/waits_global_by_latency.sql b/IDEA/sys/waits_global_by_latency.sql new file mode 100644 index 00000000..5d5ac0f2 --- /dev/null +++ b/IDEA/sys/waits_global_by_latency.sql @@ -0,0 +1,11 @@ +create definer = `mysql.sys`@localhost view sys.waits_global_by_latency as +select `performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME` AS `event`, + `performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR` AS `total`, + format_pico_time(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + format_pico_time(`performance_schema`.`events_waits_summary_global_by_event_name`.`AVG_TIMER_WAIT`) AS `avg_latency`, + format_pico_time(`performance_schema`.`events_waits_summary_global_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency` +from `performance_schema`.`events_waits_summary_global_by_event_name` +where ((`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME` <> 'idle') and + (`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT` > 0)) +order by `performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$host_summary.sql b/IDEA/sys/x$host_summary.sql new file mode 100644 index 00000000..1cb1e19d --- /dev/null +++ b/IDEA/sys/x$host_summary.sql @@ -0,0 +1,20 @@ +create definer = `mysql.sys`@localhost view sys.x$host_summary as +select if((`performance_schema`.`accounts`.`HOST` is null), 'background', + `performance_schema`.`accounts`.`HOST`) AS `host`, + sum(`sys`.`stmt`.`total`) AS `statements`, + sum(`sys`.`stmt`.`total_latency`) AS `statement_latency`, + (sum(`sys`.`stmt`.`total_latency`) / sum(`sys`.`stmt`.`total`)) AS `statement_avg_latency`, + sum(`sys`.`stmt`.`full_scans`) AS `table_scans`, + sum(`sys`.`io`.`ios`) AS `file_ios`, + sum(`sys`.`io`.`io_latency`) AS `file_io_latency`, + sum(`performance_schema`.`accounts`.`CURRENT_CONNECTIONS`) AS `current_connections`, + sum(`performance_schema`.`accounts`.`TOTAL_CONNECTIONS`) AS `total_connections`, + count(distinct `performance_schema`.`accounts`.`USER`) AS `unique_users`, + sum(`sys`.`mem`.`current_allocated`) AS `current_memory`, + sum(`sys`.`mem`.`total_allocated`) AS `total_memory_allocated` +from (((`performance_schema`.`accounts` join `sys`.`x$host_summary_by_statement_latency` `stmt` + on ((`performance_schema`.`accounts`.`HOST` = `sys`.`stmt`.`host`))) join `sys`.`x$host_summary_by_file_io` `io` + on ((`performance_schema`.`accounts`.`HOST` = `sys`.`io`.`host`))) join `sys`.`x$memory_by_host_by_current_bytes` `mem` + on ((`performance_schema`.`accounts`.`HOST` = `sys`.`mem`.`host`))) +group by if((`performance_schema`.`accounts`.`HOST` is null), 'background', `performance_schema`.`accounts`.`HOST`); + diff --git a/IDEA/sys/x$host_summary_by_file_io.sql b/IDEA/sys/x$host_summary_by_file_io.sql new file mode 100644 index 00000000..86bccf92 --- /dev/null +++ b/IDEA/sys/x$host_summary_by_file_io.sql @@ -0,0 +1,11 @@ +create definer = `mysql.sys`@localhost view sys.x$host_summary_by_file_io as +select if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`) AS `host`, + sum(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`COUNT_STAR`) AS `ios`, + sum(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) AS `io_latency` +from `performance_schema`.`events_waits_summary_by_host_by_event_name` +where (`performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') +group by if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`) +order by sum(`performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/x$host_summary_by_file_io_type.sql b/IDEA/sys/x$host_summary_by_file_io_type.sql new file mode 100644 index 00000000..023fab0b --- /dev/null +++ b/IDEA/sys/x$host_summary_by_file_io_type.sql @@ -0,0 +1,14 @@ +create definer = `mysql.sys`@localhost view sys.x$host_summary_by_file_io_type as +select if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`) AS `host`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`MAX_TIMER_WAIT` AS `max_latency` +from `performance_schema`.`events_waits_summary_by_host_by_event_name` +where ((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` like 'wait/io/file%') and + (`performance_schema`.`events_waits_summary_by_host_by_event_name`.`COUNT_STAR` > 0)) +order by if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`), + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$host_summary_by_stages.sql b/IDEA/sys/x$host_summary_by_stages.sql new file mode 100644 index 00000000..05d96c12 --- /dev/null +++ b/IDEA/sys/x$host_summary_by_stages.sql @@ -0,0 +1,13 @@ +create definer = `mysql.sys`@localhost view sys.x$host_summary_by_stages as +select if((`performance_schema`.`events_stages_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`HOST`) AS `host`, + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`AVG_TIMER_WAIT` AS `avg_latency` +from `performance_schema`.`events_stages_summary_by_host_by_event_name` +where (`performance_schema`.`events_stages_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` <> 0) +order by if((`performance_schema`.`events_stages_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`HOST`), + `performance_schema`.`events_stages_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$host_summary_by_statement_latency.sql b/IDEA/sys/x$host_summary_by_statement_latency.sql new file mode 100644 index 00000000..1c8af06e --- /dev/null +++ b/IDEA/sys/x$host_summary_by_statement_latency.sql @@ -0,0 +1,18 @@ +create definer = `mysql.sys`@localhost view sys.x$host_summary_by_statement_latency as +select if((`performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST`) AS `host`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`COUNT_STAR`) AS `total`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + max(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_LOCK_TIME`) AS `lock_latency`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_CPU_TIME`) AS `cpu_latency`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_SENT`) AS `rows_sent`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_EXAMINED`) AS `rows_examined`, + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_AFFECTED`) AS `rows_affected`, + (sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_NO_INDEX_USED`) + + sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_NO_GOOD_INDEX_USED`)) AS `full_scans` +from `performance_schema`.`events_statements_summary_by_host_by_event_name` +group by if((`performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST`) +order by sum(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/x$host_summary_by_statement_type.sql b/IDEA/sys/x$host_summary_by_statement_type.sql new file mode 100644 index 00000000..9bdcbf82 --- /dev/null +++ b/IDEA/sys/x$host_summary_by_statement_type.sql @@ -0,0 +1,21 @@ +create definer = `mysql.sys`@localhost view sys.x$host_summary_by_statement_type as +select if((`performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST`) AS `host`, + substring_index(`performance_schema`.`events_statements_summary_by_host_by_event_name`.`EVENT_NAME`, '/', + -(1)) AS `statement`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`MAX_TIMER_WAIT` AS `max_latency`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_LOCK_TIME` AS `lock_latency`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_CPU_TIME` AS `cpu_latency`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_SENT` AS `rows_sent`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_ROWS_AFFECTED` AS `rows_affected`, + (`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_NO_INDEX_USED` + + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_NO_GOOD_INDEX_USED`) AS `full_scans` +from `performance_schema`.`events_statements_summary_by_host_by_event_name` +where (`performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` <> 0) +order by if((`performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`HOST`), + `performance_schema`.`events_statements_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$innodb_buffer_stats_by_schema.sql b/IDEA/sys/x$innodb_buffer_stats_by_schema.sql new file mode 100644 index 00000000..62b3339a --- /dev/null +++ b/IDEA/sys/x$innodb_buffer_stats_by_schema.sql @@ -0,0 +1,15 @@ +create definer = `mysql.sys`@localhost view sys.x$innodb_buffer_stats_by_schema as +select if((locate('.', `ibp`.`TABLE_NAME`) = 0), 'InnoDB System', + replace(substring_index(`ibp`.`TABLE_NAME`, '.', 1), '`', '')) AS `object_schema`, + sum(if((`ibp`.`COMPRESSED_SIZE` = 0), 16384, `ibp`.`COMPRESSED_SIZE`)) AS `allocated`, + sum(`ibp`.`DATA_SIZE`) AS `data`, + count(`ibp`.`PAGE_NUMBER`) AS `pages`, + count(if((`ibp`.`IS_HASHED` = 'YES'), 1, NULL)) AS `pages_hashed`, + count(if((`ibp`.`IS_OLD` = 'YES'), 1, NULL)) AS `pages_old`, + round(ifnull((sum(`ibp`.`NUMBER_RECORDS`) / nullif(count(distinct `ibp`.`INDEX_NAME`), 0)), 0), + 0) AS `rows_cached` +from `information_schema`.`INNODB_BUFFER_PAGE` `ibp` +where (`ibp`.`TABLE_NAME` is not null) +group by `object_schema` +order by sum(if((`ibp`.`COMPRESSED_SIZE` = 0), 16384, `ibp`.`COMPRESSED_SIZE`)) desc; + diff --git a/IDEA/sys/x$innodb_buffer_stats_by_table.sql b/IDEA/sys/x$innodb_buffer_stats_by_table.sql new file mode 100644 index 00000000..c5080f00 --- /dev/null +++ b/IDEA/sys/x$innodb_buffer_stats_by_table.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.x$innodb_buffer_stats_by_table as +select if((locate('.', `ibp`.`TABLE_NAME`) = 0), 'InnoDB System', + replace(substring_index(`ibp`.`TABLE_NAME`, '.', 1), '`', '')) AS `object_schema`, + replace(substring_index(`ibp`.`TABLE_NAME`, '.', -(1)), '`', '') AS `object_name`, + sum(if((`ibp`.`COMPRESSED_SIZE` = 0), 16384, `ibp`.`COMPRESSED_SIZE`)) AS `allocated`, + sum(`ibp`.`DATA_SIZE`) AS `data`, + count(`ibp`.`PAGE_NUMBER`) AS `pages`, + count(if((`ibp`.`IS_HASHED` = 'YES'), 1, NULL)) AS `pages_hashed`, + count(if((`ibp`.`IS_OLD` = 'YES'), 1, NULL)) AS `pages_old`, + round(ifnull((sum(`ibp`.`NUMBER_RECORDS`) / nullif(count(distinct `ibp`.`INDEX_NAME`), 0)), 0), + 0) AS `rows_cached` +from `information_schema`.`INNODB_BUFFER_PAGE` `ibp` +where (`ibp`.`TABLE_NAME` is not null) +group by `object_schema`, `object_name` +order by sum(if((`ibp`.`COMPRESSED_SIZE` = 0), 16384, `ibp`.`COMPRESSED_SIZE`)) desc; + diff --git a/IDEA/sys/x$innodb_lock_waits.sql b/IDEA/sys/x$innodb_lock_waits.sql new file mode 100644 index 00000000..7dd01957 --- /dev/null +++ b/IDEA/sys/x$innodb_lock_waits.sql @@ -0,0 +1,41 @@ +create definer = `mysql.sys`@localhost view sys.x$innodb_lock_waits as +select `r`.`trx_wait_started` AS `wait_started`, + timediff(now(), `r`.`trx_wait_started`) AS `wait_age`, + timestampdiff(SECOND, `r`.`trx_wait_started`, now()) AS `wait_age_secs`, + concat(`sys`.`quote_identifier`(`rl`.`OBJECT_SCHEMA`), '.', + `sys`.`quote_identifier`(`rl`.`OBJECT_NAME`)) AS `locked_table`, + `rl`.`OBJECT_SCHEMA` AS `locked_table_schema`, + `rl`.`OBJECT_NAME` AS `locked_table_name`, + `rl`.`PARTITION_NAME` AS `locked_table_partition`, + `rl`.`SUBPARTITION_NAME` AS `locked_table_subpartition`, + `rl`.`INDEX_NAME` AS `locked_index`, + `rl`.`LOCK_TYPE` AS `locked_type`, + `r`.`trx_id` AS `waiting_trx_id`, + `r`.`trx_started` AS `waiting_trx_started`, + timediff(now(), `r`.`trx_started`) AS `waiting_trx_age`, + `r`.`trx_rows_locked` AS `waiting_trx_rows_locked`, + `r`.`trx_rows_modified` AS `waiting_trx_rows_modified`, + `r`.`trx_mysql_thread_id` AS `waiting_pid`, + `r`.`trx_query` AS `waiting_query`, + `rl`.`ENGINE_LOCK_ID` AS `waiting_lock_id`, + `rl`.`LOCK_MODE` AS `waiting_lock_mode`, + `b`.`trx_id` AS `blocking_trx_id`, + `b`.`trx_mysql_thread_id` AS `blocking_pid`, + `b`.`trx_query` AS `blocking_query`, + `bl`.`ENGINE_LOCK_ID` AS `blocking_lock_id`, + `bl`.`LOCK_MODE` AS `blocking_lock_mode`, + `b`.`trx_started` AS `blocking_trx_started`, + timediff(now(), `b`.`trx_started`) AS `blocking_trx_age`, + `b`.`trx_rows_locked` AS `blocking_trx_rows_locked`, + `b`.`trx_rows_modified` AS `blocking_trx_rows_modified`, + concat('KILL QUERY ', `b`.`trx_mysql_thread_id`) AS `sql_kill_blocking_query`, + concat('KILL ', `b`.`trx_mysql_thread_id`) AS `sql_kill_blocking_connection` +from ((((`performance_schema`.`data_lock_waits` `w` join `information_schema`.`INNODB_TRX` `b` on ((`b`.`trx_id` = + cast(`w`.`BLOCKING_ENGINE_TRANSACTION_ID` as char charset utf8mb4)))) join `information_schema`.`INNODB_TRX` `r` + on ((`r`.`trx_id` = + cast(`w`.`REQUESTING_ENGINE_TRANSACTION_ID` as char charset utf8mb4)))) join `performance_schema`.`data_locks` `bl` + on (((`bl`.`ENGINE_LOCK_ID` = `w`.`BLOCKING_ENGINE_LOCK_ID`) and + (`bl`.`ENGINE` = `w`.`ENGINE`)))) join `performance_schema`.`data_locks` `rl` + on (((`rl`.`ENGINE_LOCK_ID` = `w`.`REQUESTING_ENGINE_LOCK_ID`) and (`rl`.`ENGINE` = `w`.`ENGINE`)))) +order by `r`.`trx_wait_started`; + diff --git a/IDEA/sys/x$io_by_thread_by_latency.sql b/IDEA/sys/x$io_by_thread_by_latency.sql new file mode 100644 index 00000000..20c9f5c3 --- /dev/null +++ b/IDEA/sys/x$io_by_thread_by_latency.sql @@ -0,0 +1,21 @@ +create definer = `mysql.sys`@localhost view sys.x$io_by_thread_by_latency as +select if((`performance_schema`.`threads`.`PROCESSLIST_ID` is null), + substring_index(`performance_schema`.`threads`.`NAME`, '/', -(1)), + concat(`performance_schema`.`threads`.`PROCESSLIST_USER`, '@', + convert(`performance_schema`.`threads`.`PROCESSLIST_HOST` using utf8mb4))) AS `user`, + sum(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`COUNT_STAR`) AS `total`, + sum(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + min(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`MIN_TIMER_WAIT`) AS `min_latency`, + avg(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`AVG_TIMER_WAIT`) AS `avg_latency`, + max(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency`, + `performance_schema`.`events_waits_summary_by_thread_by_event_name`.`THREAD_ID` AS `thread_id`, + `performance_schema`.`threads`.`PROCESSLIST_ID` AS `processlist_id` +from (`performance_schema`.`events_waits_summary_by_thread_by_event_name` left join `performance_schema`.`threads` + on ((`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`THREAD_ID` = + `performance_schema`.`threads`.`THREAD_ID`))) +where ((`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') and + (`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`SUM_TIMER_WAIT` > 0)) +group by `performance_schema`.`events_waits_summary_by_thread_by_event_name`.`THREAD_ID`, + `performance_schema`.`threads`.`PROCESSLIST_ID`, `user` +order by sum(`performance_schema`.`events_waits_summary_by_thread_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/x$io_global_by_file_by_bytes.sql b/IDEA/sys/x$io_global_by_file_by_bytes.sql new file mode 100644 index 00000000..49d524b8 --- /dev/null +++ b/IDEA/sys/x$io_global_by_file_by_bytes.sql @@ -0,0 +1,22 @@ +create definer = `mysql.sys`@localhost view sys.x$io_global_by_file_by_bytes as +select `performance_schema`.`file_summary_by_instance`.`FILE_NAME` AS `file`, + `performance_schema`.`file_summary_by_instance`.`COUNT_READ` AS `count_read`, + `performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` AS `total_read`, + ifnull((`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` / + nullif(`performance_schema`.`file_summary_by_instance`.`COUNT_READ`, 0)), + 0) AS `avg_read`, + `performance_schema`.`file_summary_by_instance`.`COUNT_WRITE` AS `count_write`, + `performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE` AS `total_written`, + ifnull((`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE` / + nullif(`performance_schema`.`file_summary_by_instance`.`COUNT_WRITE`, 0)), + 0.00) AS `avg_write`, + (`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` + + `performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE`) AS `total`, + ifnull(round((100 - ((`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` / nullif( + (`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` + + `performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE`), 0)) * 100)), 2), + 0.00) AS `write_pct` +from `performance_schema`.`file_summary_by_instance` +order by (`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ` + + `performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE`) desc; + diff --git a/IDEA/sys/x$io_global_by_file_by_latency.sql b/IDEA/sys/x$io_global_by_file_by_latency.sql new file mode 100644 index 00000000..83ee7699 --- /dev/null +++ b/IDEA/sys/x$io_global_by_file_by_latency.sql @@ -0,0 +1,13 @@ +create definer = `mysql.sys`@localhost view sys.x$io_global_by_file_by_latency as +select `performance_schema`.`file_summary_by_instance`.`FILE_NAME` AS `file`, + `performance_schema`.`file_summary_by_instance`.`COUNT_STAR` AS `total`, + `performance_schema`.`file_summary_by_instance`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`file_summary_by_instance`.`COUNT_READ` AS `count_read`, + `performance_schema`.`file_summary_by_instance`.`SUM_TIMER_READ` AS `read_latency`, + `performance_schema`.`file_summary_by_instance`.`COUNT_WRITE` AS `count_write`, + `performance_schema`.`file_summary_by_instance`.`SUM_TIMER_WRITE` AS `write_latency`, + `performance_schema`.`file_summary_by_instance`.`COUNT_MISC` AS `count_misc`, + `performance_schema`.`file_summary_by_instance`.`SUM_TIMER_MISC` AS `misc_latency` +from `performance_schema`.`file_summary_by_instance` +order by `performance_schema`.`file_summary_by_instance`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$io_global_by_wait_by_bytes.sql b/IDEA/sys/x$io_global_by_wait_by_bytes.sql new file mode 100644 index 00000000..ca20383a --- /dev/null +++ b/IDEA/sys/x$io_global_by_wait_by_bytes.sql @@ -0,0 +1,23 @@ +create definer = `mysql.sys`@localhost view sys.x$io_global_by_wait_by_bytes as +select substring_index(`performance_schema`.`file_summary_by_event_name`.`EVENT_NAME`, '/', -(2)) AS `event_name`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`file_summary_by_event_name`.`MIN_TIMER_WAIT` AS `min_latency`, + `performance_schema`.`file_summary_by_event_name`.`AVG_TIMER_WAIT` AS `avg_latency`, + `performance_schema`.`file_summary_by_event_name`.`MAX_TIMER_WAIT` AS `max_latency`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_READ` AS `count_read`, + `performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ` AS `total_read`, + ifnull((`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ` / + nullif(`performance_schema`.`file_summary_by_event_name`.`COUNT_READ`, 0)), 0) AS `avg_read`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_WRITE` AS `count_write`, + `performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` AS `total_written`, + ifnull((`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` / + nullif(`performance_schema`.`file_summary_by_event_name`.`COUNT_WRITE`, 0)), 0) AS `avg_written`, + (`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` + + `performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ`) AS `total_requested` +from `performance_schema`.`file_summary_by_event_name` +where ((`performance_schema`.`file_summary_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') and + (`performance_schema`.`file_summary_by_event_name`.`COUNT_STAR` > 0)) +order by (`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` + + `performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ`) desc; + diff --git a/IDEA/sys/x$io_global_by_wait_by_latency.sql b/IDEA/sys/x$io_global_by_wait_by_latency.sql new file mode 100644 index 00000000..01247e03 --- /dev/null +++ b/IDEA/sys/x$io_global_by_wait_by_latency.sql @@ -0,0 +1,22 @@ +create definer = `mysql.sys`@localhost view sys.x$io_global_by_wait_by_latency as +select substring_index(`performance_schema`.`file_summary_by_event_name`.`EVENT_NAME`, '/', -(2)) AS `event_name`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`file_summary_by_event_name`.`AVG_TIMER_WAIT` AS `avg_latency`, + `performance_schema`.`file_summary_by_event_name`.`MAX_TIMER_WAIT` AS `max_latency`, + `performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_READ` AS `read_latency`, + `performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_WRITE` AS `write_latency`, + `performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_MISC` AS `misc_latency`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_READ` AS `count_read`, + `performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ` AS `total_read`, + ifnull((`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_READ` / + nullif(`performance_schema`.`file_summary_by_event_name`.`COUNT_READ`, 0)), 0) AS `avg_read`, + `performance_schema`.`file_summary_by_event_name`.`COUNT_WRITE` AS `count_write`, + `performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` AS `total_written`, + ifnull((`performance_schema`.`file_summary_by_event_name`.`SUM_NUMBER_OF_BYTES_WRITE` / + nullif(`performance_schema`.`file_summary_by_event_name`.`COUNT_WRITE`, 0)), 0) AS `avg_written` +from `performance_schema`.`file_summary_by_event_name` +where ((`performance_schema`.`file_summary_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') and + (`performance_schema`.`file_summary_by_event_name`.`COUNT_STAR` > 0)) +order by `performance_schema`.`file_summary_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$latest_file_io.sql b/IDEA/sys/x$latest_file_io.sql new file mode 100644 index 00000000..a2469cd4 --- /dev/null +++ b/IDEA/sys/x$latest_file_io.sql @@ -0,0 +1,18 @@ +create definer = `mysql.sys`@localhost view sys.x$latest_file_io as +select if((`information_schema`.`processlist`.`ID` is null), + concat(substring_index(`performance_schema`.`threads`.`NAME`, '/', -(1)), ':', + `performance_schema`.`events_waits_history_long`.`THREAD_ID`), convert( + concat(`information_schema`.`processlist`.`USER`, '@', `information_schema`.`processlist`.`HOST`, ':', + `information_schema`.`processlist`.`ID`) using utf8mb4)) AS `thread`, + `performance_schema`.`events_waits_history_long`.`OBJECT_NAME` AS `file`, + `performance_schema`.`events_waits_history_long`.`TIMER_WAIT` AS `latency`, + `performance_schema`.`events_waits_history_long`.`OPERATION` AS `operation`, + `performance_schema`.`events_waits_history_long`.`NUMBER_OF_BYTES` AS `requested` +from ((`performance_schema`.`events_waits_history_long` join `performance_schema`.`threads` + on ((`performance_schema`.`events_waits_history_long`.`THREAD_ID` = + `performance_schema`.`threads`.`THREAD_ID`))) left join `information_schema`.`PROCESSLIST` + on ((`performance_schema`.`threads`.`PROCESSLIST_ID` = `information_schema`.`processlist`.`ID`))) +where ((`performance_schema`.`events_waits_history_long`.`OBJECT_NAME` is not null) and + (`performance_schema`.`events_waits_history_long`.`EVENT_NAME` like 'wait/io/file/%')) +order by `performance_schema`.`events_waits_history_long`.`TIMER_START`; + diff --git a/IDEA/sys/x$memory_by_host_by_current_bytes.sql b/IDEA/sys/x$memory_by_host_by_current_bytes.sql new file mode 100644 index 00000000..c3cac63a --- /dev/null +++ b/IDEA/sys/x$memory_by_host_by_current_bytes.sql @@ -0,0 +1,15 @@ +create definer = `mysql.sys`@localhost view sys.x$memory_by_host_by_current_bytes as +select if((`performance_schema`.`memory_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`memory_summary_by_host_by_event_name`.`HOST`) AS `host`, + sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_COUNT_USED`) AS `current_count_used`, + sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) AS `current_allocated`, + ifnull((sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) / + nullif(sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_COUNT_USED`), 0)), + 0) AS `current_avg_alloc`, + max(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) AS `current_max_alloc`, + sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`SUM_NUMBER_OF_BYTES_ALLOC`) AS `total_allocated` +from `performance_schema`.`memory_summary_by_host_by_event_name` +group by if((`performance_schema`.`memory_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`memory_summary_by_host_by_event_name`.`HOST`) +order by sum(`performance_schema`.`memory_summary_by_host_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) desc; + diff --git a/IDEA/sys/x$memory_by_thread_by_current_bytes.sql b/IDEA/sys/x$memory_by_thread_by_current_bytes.sql new file mode 100644 index 00000000..d7ed1226 --- /dev/null +++ b/IDEA/sys/x$memory_by_thread_by_current_bytes.sql @@ -0,0 +1,19 @@ +create definer = `mysql.sys`@localhost view sys.x$memory_by_thread_by_current_bytes as +select `t`.`THREAD_ID` AS `thread_id`, + if((`t`.`NAME` = 'thread/sql/one_connection'), + concat(`t`.`PROCESSLIST_USER`, '@', convert(`t`.`PROCESSLIST_HOST` using utf8mb4)), + replace(`t`.`NAME`, 'thread/', '')) AS `user`, + sum(`mt`.`CURRENT_COUNT_USED`) AS `current_count_used`, + sum(`mt`.`CURRENT_NUMBER_OF_BYTES_USED`) AS `current_allocated`, + ifnull((sum(`mt`.`CURRENT_NUMBER_OF_BYTES_USED`) / nullif(sum(`mt`.`CURRENT_COUNT_USED`), 0)), + 0) AS `current_avg_alloc`, + max(`mt`.`CURRENT_NUMBER_OF_BYTES_USED`) AS `current_max_alloc`, + sum(`mt`.`SUM_NUMBER_OF_BYTES_ALLOC`) AS `total_allocated` +from (`performance_schema`.`memory_summary_by_thread_by_event_name` `mt` join `performance_schema`.`threads` `t` + on ((`mt`.`THREAD_ID` = `t`.`THREAD_ID`))) +group by `t`.`THREAD_ID`, + if((`t`.`NAME` = 'thread/sql/one_connection'), + concat(`t`.`PROCESSLIST_USER`, '@', convert(`t`.`PROCESSLIST_HOST` using utf8mb4)), + replace(`t`.`NAME`, 'thread/', '')) +order by sum(`mt`.`CURRENT_NUMBER_OF_BYTES_USED`) desc; + diff --git a/IDEA/sys/x$memory_by_user_by_current_bytes.sql b/IDEA/sys/x$memory_by_user_by_current_bytes.sql new file mode 100644 index 00000000..5bc81553 --- /dev/null +++ b/IDEA/sys/x$memory_by_user_by_current_bytes.sql @@ -0,0 +1,15 @@ +create definer = `mysql.sys`@localhost view sys.x$memory_by_user_by_current_bytes as +select if((`performance_schema`.`memory_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`memory_summary_by_user_by_event_name`.`USER`) AS `user`, + sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_COUNT_USED`) AS `current_count_used`, + sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) AS `current_allocated`, + ifnull((sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) / + nullif(sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_COUNT_USED`), 0)), + 0) AS `current_avg_alloc`, + max(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) AS `current_max_alloc`, + sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`SUM_NUMBER_OF_BYTES_ALLOC`) AS `total_allocated` +from `performance_schema`.`memory_summary_by_user_by_event_name` +group by if((`performance_schema`.`memory_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`memory_summary_by_user_by_event_name`.`USER`) +order by sum(`performance_schema`.`memory_summary_by_user_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) desc; + diff --git a/IDEA/sys/x$memory_global_by_current_bytes.sql b/IDEA/sys/x$memory_global_by_current_bytes.sql new file mode 100644 index 00000000..0181cfe3 --- /dev/null +++ b/IDEA/sys/x$memory_global_by_current_bytes.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.x$memory_global_by_current_bytes as +select `performance_schema`.`memory_summary_global_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_COUNT_USED` AS `current_count`, + `performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` AS `current_alloc`, + ifnull((`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` / + nullif(`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_COUNT_USED`, 0)), + 0) AS `current_avg_alloc`, + `performance_schema`.`memory_summary_global_by_event_name`.`HIGH_COUNT_USED` AS `high_count`, + `performance_schema`.`memory_summary_global_by_event_name`.`HIGH_NUMBER_OF_BYTES_USED` AS `high_alloc`, + ifnull((`performance_schema`.`memory_summary_global_by_event_name`.`HIGH_NUMBER_OF_BYTES_USED` / + nullif(`performance_schema`.`memory_summary_global_by_event_name`.`HIGH_COUNT_USED`, 0)), + 0) AS `high_avg_alloc` +from `performance_schema`.`memory_summary_global_by_event_name` +where (`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` > 0) +order by `performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED` desc; + diff --git a/IDEA/sys/x$memory_global_total.sql b/IDEA/sys/x$memory_global_total.sql new file mode 100644 index 00000000..18f9826a --- /dev/null +++ b/IDEA/sys/x$memory_global_total.sql @@ -0,0 +1,4 @@ +create definer = `mysql.sys`@localhost view sys.x$memory_global_total as +select sum(`performance_schema`.`memory_summary_global_by_event_name`.`CURRENT_NUMBER_OF_BYTES_USED`) AS `total_allocated` +from `performance_schema`.`memory_summary_global_by_event_name`; + diff --git a/IDEA/sys/x$processlist.sql b/IDEA/sys/x$processlist.sql new file mode 100644 index 00000000..c83f4226 --- /dev/null +++ b/IDEA/sys/x$processlist.sql @@ -0,0 +1,48 @@ +create definer = `mysql.sys`@localhost view sys.x$processlist as +select `pps`.`THREAD_ID` AS `thd_id`, + `pps`.`PROCESSLIST_ID` AS `conn_id`, + if((`pps`.`NAME` in ('thread/sql/one_connection', 'thread/thread_pool/tp_one_connection')), + concat(`pps`.`PROCESSLIST_USER`, '@', convert(`pps`.`PROCESSLIST_HOST` using utf8mb4)), + replace(`pps`.`NAME`, 'thread/', '')) AS `user`, + `pps`.`PROCESSLIST_DB` AS `db`, + `pps`.`PROCESSLIST_COMMAND` AS `command`, + `pps`.`PROCESSLIST_STATE` AS `state`, + `pps`.`PROCESSLIST_TIME` AS `time`, + `pps`.`PROCESSLIST_INFO` AS `current_statement`, + `pps`.`EXECUTION_ENGINE` AS `execution_engine`, + if((`esc`.`END_EVENT_ID` is null), `esc`.`TIMER_WAIT`, NULL) AS `statement_latency`, + if((`esc`.`END_EVENT_ID` is null), round((100 * (`estc`.`WORK_COMPLETED` / `estc`.`WORK_ESTIMATED`)), 2), + NULL) AS `progress`, + `esc`.`LOCK_TIME` AS `lock_latency`, + `esc`.`CPU_TIME` AS `cpu_latency`, + `esc`.`ROWS_EXAMINED` AS `rows_examined`, + `esc`.`ROWS_SENT` AS `rows_sent`, + `esc`.`ROWS_AFFECTED` AS `rows_affected`, + `esc`.`CREATED_TMP_TABLES` AS `tmp_tables`, + `esc`.`CREATED_TMP_DISK_TABLES` AS `tmp_disk_tables`, + if(((`esc`.`NO_GOOD_INDEX_USED` > 0) or (`esc`.`NO_INDEX_USED` > 0)), 'YES', + 'NO') AS `full_scan`, + if((`esc`.`END_EVENT_ID` is not null), `esc`.`SQL_TEXT`, NULL) AS `last_statement`, + if((`esc`.`END_EVENT_ID` is not null), `esc`.`TIMER_WAIT`, NULL) AS `last_statement_latency`, + `sys`.`mem`.`current_allocated` AS `current_memory`, + `ewc`.`EVENT_NAME` AS `last_wait`, + if(((`ewc`.`END_EVENT_ID` is null) and (`ewc`.`EVENT_NAME` is not null)), 'Still Waiting', + `ewc`.`TIMER_WAIT`) AS `last_wait_latency`, + `ewc`.`SOURCE` AS `source`, + `etc`.`TIMER_WAIT` AS `trx_latency`, + `etc`.`STATE` AS `trx_state`, + `etc`.`AUTOCOMMIT` AS `trx_autocommit`, + `conattr_pid`.`ATTR_VALUE` AS `pid`, + `conattr_progname`.`ATTR_VALUE` AS `program_name` +from (((((((`performance_schema`.`threads` `pps` left join `performance_schema`.`events_waits_current` `ewc` + on ((`pps`.`THREAD_ID` = `ewc`.`THREAD_ID`))) left join `performance_schema`.`events_stages_current` `estc` + on ((`pps`.`THREAD_ID` = `estc`.`THREAD_ID`))) left join `performance_schema`.`events_statements_current` `esc` + on ((`pps`.`THREAD_ID` = `esc`.`THREAD_ID`))) left join `performance_schema`.`events_transactions_current` `etc` + on ((`pps`.`THREAD_ID` = `etc`.`THREAD_ID`))) left join `sys`.`x$memory_by_thread_by_current_bytes` `mem` + on ((`pps`.`THREAD_ID` = `sys`.`mem`.`thread_id`))) left join `performance_schema`.`session_connect_attrs` `conattr_pid` + on (((`conattr_pid`.`PROCESSLIST_ID` = `pps`.`PROCESSLIST_ID`) and + (`conattr_pid`.`ATTR_NAME` = '_pid')))) left join `performance_schema`.`session_connect_attrs` `conattr_progname` + on (((`conattr_progname`.`PROCESSLIST_ID` = `pps`.`PROCESSLIST_ID`) and + (`conattr_progname`.`ATTR_NAME` = 'program_name')))) +order by `pps`.`PROCESSLIST_TIME` desc, `last_wait_latency` desc; + diff --git a/IDEA/sys/x$ps_digest_95th_percentile_by_avg_us.sql b/IDEA/sys/x$ps_digest_95th_percentile_by_avg_us.sql new file mode 100644 index 00000000..891d1699 --- /dev/null +++ b/IDEA/sys/x$ps_digest_95th_percentile_by_avg_us.sql @@ -0,0 +1,14 @@ +create definer = `mysql.sys`@localhost view sys.x$ps_digest_95th_percentile_by_avg_us as +select `sys`.`s2`.`avg_us` AS `avg_us`, + ifnull((sum(`sys`.`s1`.`cnt`) / + nullif((select count(0) from `performance_schema`.`events_statements_summary_by_digest`), 0)), + 0) AS `percentile` +from (`sys`.`x$ps_digest_avg_latency_distribution` `s1` join `sys`.`x$ps_digest_avg_latency_distribution` `s2` + on ((`sys`.`s1`.`avg_us` <= `sys`.`s2`.`avg_us`))) +group by `sys`.`s2`.`avg_us` +having (ifnull((sum(`sys`.`s1`.`cnt`) / + nullif((select count(0) from `performance_schema`.`events_statements_summary_by_digest`), 0)), 0) > + 0.95) +order by `percentile` +limit 1; + diff --git a/IDEA/sys/x$ps_digest_avg_latency_distribution.sql b/IDEA/sys/x$ps_digest_avg_latency_distribution.sql new file mode 100644 index 00000000..705e558b --- /dev/null +++ b/IDEA/sys/x$ps_digest_avg_latency_distribution.sql @@ -0,0 +1,6 @@ +create definer = `mysql.sys`@localhost view sys.x$ps_digest_avg_latency_distribution as +select count(0) AS `cnt`, + round((`performance_schema`.`events_statements_summary_by_digest`.`AVG_TIMER_WAIT` / 1000000), 0) AS `avg_us` +from `performance_schema`.`events_statements_summary_by_digest` +group by `avg_us`; + diff --git a/IDEA/sys/x$ps_schema_table_statistics_io.sql b/IDEA/sys/x$ps_schema_table_statistics_io.sql new file mode 100644 index 00000000..52423c24 --- /dev/null +++ b/IDEA/sys/x$ps_schema_table_statistics_io.sql @@ -0,0 +1,14 @@ +create definer = `mysql.sys`@localhost view sys.x$ps_schema_table_statistics_io as +select `extract_schema_from_file_name`(`performance_schema`.`file_summary_by_instance`.`FILE_NAME`) AS `table_schema`, + `extract_table_from_file_name`(`performance_schema`.`file_summary_by_instance`.`FILE_NAME`) AS `table_name`, + sum(`performance_schema`.`file_summary_by_instance`.`COUNT_READ`) AS `count_read`, + sum(`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_READ`) AS `sum_number_of_bytes_read`, + sum(`performance_schema`.`file_summary_by_instance`.`SUM_TIMER_READ`) AS `sum_timer_read`, + sum(`performance_schema`.`file_summary_by_instance`.`COUNT_WRITE`) AS `count_write`, + sum(`performance_schema`.`file_summary_by_instance`.`SUM_NUMBER_OF_BYTES_WRITE`) AS `sum_number_of_bytes_write`, + sum(`performance_schema`.`file_summary_by_instance`.`SUM_TIMER_WRITE`) AS `sum_timer_write`, + sum(`performance_schema`.`file_summary_by_instance`.`COUNT_MISC`) AS `count_misc`, + sum(`performance_schema`.`file_summary_by_instance`.`SUM_TIMER_MISC`) AS `sum_timer_misc` +from `performance_schema`.`file_summary_by_instance` +group by `table_schema`, `table_name`; + diff --git a/IDEA/sys/x$schema_flattened_keys.sql b/IDEA/sys/x$schema_flattened_keys.sql new file mode 100644 index 00000000..bae5ba6b --- /dev/null +++ b/IDEA/sys/x$schema_flattened_keys.sql @@ -0,0 +1,15 @@ +create definer = `mysql.sys`@localhost view sys.x$schema_flattened_keys as +select `information_schema`.`statistics`.`TABLE_SCHEMA` AS `TABLE_SCHEMA`, + `information_schema`.`statistics`.`TABLE_NAME` AS `TABLE_NAME`, + `information_schema`.`statistics`.`INDEX_NAME` AS `INDEX_NAME`, + max(`information_schema`.`statistics`.`NON_UNIQUE`) AS `non_unique`, + max(if((`information_schema`.`statistics`.`SUB_PART` is null), 0, 1)) AS `subpart_exists`, + group_concat(`information_schema`.`statistics`.`COLUMN_NAME` order by + `information_schema`.`statistics`.`SEQ_IN_INDEX` ASC separator ',') AS `index_columns` +from `information_schema`.`STATISTICS` +where ((`information_schema`.`statistics`.`INDEX_TYPE` = 'BTREE') and + (`information_schema`.`statistics`.`TABLE_SCHEMA` not in + ('mysql', 'sys', 'INFORMATION_SCHEMA', 'PERFORMANCE_SCHEMA'))) +group by `information_schema`.`statistics`.`TABLE_SCHEMA`, `information_schema`.`statistics`.`TABLE_NAME`, + `information_schema`.`statistics`.`INDEX_NAME`; + diff --git a/IDEA/sys/x$schema_index_statistics.sql b/IDEA/sys/x$schema_index_statistics.sql new file mode 100644 index 00000000..47cd41cc --- /dev/null +++ b/IDEA/sys/x$schema_index_statistics.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.x$schema_index_statistics as +select `performance_schema`.`table_io_waits_summary_by_index_usage`.`OBJECT_SCHEMA` AS `table_schema`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`OBJECT_NAME` AS `table_name`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`INDEX_NAME` AS `index_name`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_FETCH` AS `rows_selected`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_FETCH` AS `select_latency`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_INSERT` AS `rows_inserted`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_INSERT` AS `insert_latency`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_UPDATE` AS `rows_updated`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_UPDATE` AS `update_latency`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_DELETE` AS `rows_deleted`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_DELETE` AS `delete_latency` +from `performance_schema`.`table_io_waits_summary_by_index_usage` +where (`performance_schema`.`table_io_waits_summary_by_index_usage`.`INDEX_NAME` is not null) +order by `performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$schema_table_lock_waits.sql b/IDEA/sys/x$schema_table_lock_waits.sql new file mode 100644 index 00000000..8284f226 --- /dev/null +++ b/IDEA/sys/x$schema_table_lock_waits.sql @@ -0,0 +1,29 @@ +create definer = `mysql.sys`@localhost view sys.x$schema_table_lock_waits as +select `g`.`OBJECT_SCHEMA` AS `object_schema`, + `g`.`OBJECT_NAME` AS `object_name`, + `pt`.`THREAD_ID` AS `waiting_thread_id`, + `pt`.`PROCESSLIST_ID` AS `waiting_pid`, + `sys`.`ps_thread_account`(`p`.`OWNER_THREAD_ID`) AS `waiting_account`, + `p`.`LOCK_TYPE` AS `waiting_lock_type`, + `p`.`LOCK_DURATION` AS `waiting_lock_duration`, + `pt`.`PROCESSLIST_INFO` AS `waiting_query`, + `pt`.`PROCESSLIST_TIME` AS `waiting_query_secs`, + `ps`.`ROWS_AFFECTED` AS `waiting_query_rows_affected`, + `ps`.`ROWS_EXAMINED` AS `waiting_query_rows_examined`, + `gt`.`THREAD_ID` AS `blocking_thread_id`, + `gt`.`PROCESSLIST_ID` AS `blocking_pid`, + `sys`.`ps_thread_account`(`g`.`OWNER_THREAD_ID`) AS `blocking_account`, + `g`.`LOCK_TYPE` AS `blocking_lock_type`, + `g`.`LOCK_DURATION` AS `blocking_lock_duration`, + concat('KILL QUERY ', `gt`.`PROCESSLIST_ID`) AS `sql_kill_blocking_query`, + concat('KILL ', `gt`.`PROCESSLIST_ID`) AS `sql_kill_blocking_connection` +from (((((`performance_schema`.`metadata_locks` `g` join `performance_schema`.`metadata_locks` `p` + on (((`g`.`OBJECT_TYPE` = `p`.`OBJECT_TYPE`) and (`g`.`OBJECT_SCHEMA` = `p`.`OBJECT_SCHEMA`) and + (`g`.`OBJECT_NAME` = `p`.`OBJECT_NAME`) and (`g`.`LOCK_STATUS` = 'GRANTED') and + (`p`.`LOCK_STATUS` = 'PENDING')))) join `performance_schema`.`threads` `gt` + on ((`g`.`OWNER_THREAD_ID` = `gt`.`THREAD_ID`))) join `performance_schema`.`threads` `pt` + on ((`p`.`OWNER_THREAD_ID` = `pt`.`THREAD_ID`))) left join `performance_schema`.`events_statements_current` `gs` + on ((`g`.`OWNER_THREAD_ID` = `gs`.`THREAD_ID`))) left join `performance_schema`.`events_statements_current` `ps` + on ((`p`.`OWNER_THREAD_ID` = `ps`.`THREAD_ID`))) +where (`g`.`OBJECT_TYPE` = 'TABLE'); + diff --git a/IDEA/sys/x$schema_table_statistics.sql b/IDEA/sys/x$schema_table_statistics.sql new file mode 100644 index 00000000..26cc7647 --- /dev/null +++ b/IDEA/sys/x$schema_table_statistics.sql @@ -0,0 +1,25 @@ +create definer = `mysql.sys`@localhost view sys.x$schema_table_statistics as +select `pst`.`OBJECT_SCHEMA` AS `table_schema`, + `pst`.`OBJECT_NAME` AS `table_name`, + `pst`.`SUM_TIMER_WAIT` AS `total_latency`, + `pst`.`COUNT_FETCH` AS `rows_fetched`, + `pst`.`SUM_TIMER_FETCH` AS `fetch_latency`, + `pst`.`COUNT_INSERT` AS `rows_inserted`, + `pst`.`SUM_TIMER_INSERT` AS `insert_latency`, + `pst`.`COUNT_UPDATE` AS `rows_updated`, + `pst`.`SUM_TIMER_UPDATE` AS `update_latency`, + `pst`.`COUNT_DELETE` AS `rows_deleted`, + `pst`.`SUM_TIMER_DELETE` AS `delete_latency`, + `sys`.`fsbi`.`count_read` AS `io_read_requests`, + `sys`.`fsbi`.`sum_number_of_bytes_read` AS `io_read`, + `sys`.`fsbi`.`sum_timer_read` AS `io_read_latency`, + `sys`.`fsbi`.`count_write` AS `io_write_requests`, + `sys`.`fsbi`.`sum_number_of_bytes_write` AS `io_write`, + `sys`.`fsbi`.`sum_timer_write` AS `io_write_latency`, + `sys`.`fsbi`.`count_misc` AS `io_misc_requests`, + `sys`.`fsbi`.`sum_timer_misc` AS `io_misc_latency` +from (`performance_schema`.`table_io_waits_summary_by_table` `pst` left join `sys`.`x$ps_schema_table_statistics_io` `fsbi` + on (((`pst`.`OBJECT_SCHEMA` = `sys`.`fsbi`.`table_schema`) and + (`pst`.`OBJECT_NAME` = `sys`.`fsbi`.`table_name`)))) +order by `pst`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$schema_table_statistics_with_buffer.sql b/IDEA/sys/x$schema_table_statistics_with_buffer.sql new file mode 100644 index 00000000..359e0587 --- /dev/null +++ b/IDEA/sys/x$schema_table_statistics_with_buffer.sql @@ -0,0 +1,33 @@ +create definer = `mysql.sys`@localhost view sys.x$schema_table_statistics_with_buffer as +select `pst`.`OBJECT_SCHEMA` AS `table_schema`, + `pst`.`OBJECT_NAME` AS `table_name`, + `pst`.`COUNT_FETCH` AS `rows_fetched`, + `pst`.`SUM_TIMER_FETCH` AS `fetch_latency`, + `pst`.`COUNT_INSERT` AS `rows_inserted`, + `pst`.`SUM_TIMER_INSERT` AS `insert_latency`, + `pst`.`COUNT_UPDATE` AS `rows_updated`, + `pst`.`SUM_TIMER_UPDATE` AS `update_latency`, + `pst`.`COUNT_DELETE` AS `rows_deleted`, + `pst`.`SUM_TIMER_DELETE` AS `delete_latency`, + `sys`.`fsbi`.`count_read` AS `io_read_requests`, + `sys`.`fsbi`.`sum_number_of_bytes_read` AS `io_read`, + `sys`.`fsbi`.`sum_timer_read` AS `io_read_latency`, + `sys`.`fsbi`.`count_write` AS `io_write_requests`, + `sys`.`fsbi`.`sum_number_of_bytes_write` AS `io_write`, + `sys`.`fsbi`.`sum_timer_write` AS `io_write_latency`, + `sys`.`fsbi`.`count_misc` AS `io_misc_requests`, + `sys`.`fsbi`.`sum_timer_misc` AS `io_misc_latency`, + `sys`.`ibp`.`allocated` AS `innodb_buffer_allocated`, + `sys`.`ibp`.`data` AS `innodb_buffer_data`, + (`sys`.`ibp`.`allocated` - `sys`.`ibp`.`data`) AS `innodb_buffer_free`, + `sys`.`ibp`.`pages` AS `innodb_buffer_pages`, + `sys`.`ibp`.`pages_hashed` AS `innodb_buffer_pages_hashed`, + `sys`.`ibp`.`pages_old` AS `innodb_buffer_pages_old`, + `sys`.`ibp`.`rows_cached` AS `innodb_buffer_rows_cached` +from ((`performance_schema`.`table_io_waits_summary_by_table` `pst` left join `sys`.`x$ps_schema_table_statistics_io` `fsbi` + on (((`pst`.`OBJECT_SCHEMA` = `sys`.`fsbi`.`table_schema`) and + (`pst`.`OBJECT_NAME` = `sys`.`fsbi`.`table_name`)))) left join `sys`.`x$innodb_buffer_stats_by_table` `ibp` + on (((`pst`.`OBJECT_SCHEMA` = `sys`.`ibp`.`object_schema`) and + (`pst`.`OBJECT_NAME` = `sys`.`ibp`.`object_name`)))) +order by `pst`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$schema_tables_with_full_table_scans.sql b/IDEA/sys/x$schema_tables_with_full_table_scans.sql new file mode 100644 index 00000000..03ad9502 --- /dev/null +++ b/IDEA/sys/x$schema_tables_with_full_table_scans.sql @@ -0,0 +1,10 @@ +create definer = `mysql.sys`@localhost view sys.x$schema_tables_with_full_table_scans as +select `performance_schema`.`table_io_waits_summary_by_index_usage`.`OBJECT_SCHEMA` AS `object_schema`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`OBJECT_NAME` AS `object_name`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_READ` AS `rows_full_scanned`, + `performance_schema`.`table_io_waits_summary_by_index_usage`.`SUM_TIMER_WAIT` AS `latency` +from `performance_schema`.`table_io_waits_summary_by_index_usage` +where ((`performance_schema`.`table_io_waits_summary_by_index_usage`.`INDEX_NAME` is null) and + (`performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_READ` > 0)) +order by `performance_schema`.`table_io_waits_summary_by_index_usage`.`COUNT_READ` desc; + diff --git a/IDEA/sys/x$session.sql b/IDEA/sys/x$session.sql new file mode 100644 index 00000000..c8e3d2e5 --- /dev/null +++ b/IDEA/sys/x$session.sql @@ -0,0 +1,34 @@ +create definer = `mysql.sys`@localhost view sys.x$session as +select `sys`.`x$processlist`.`thd_id` AS `thd_id`, + `sys`.`x$processlist`.`conn_id` AS `conn_id`, + `sys`.`x$processlist`.`user` AS `user`, + `sys`.`x$processlist`.`db` AS `db`, + `sys`.`x$processlist`.`command` AS `command`, + `sys`.`x$processlist`.`state` AS `state`, + `sys`.`x$processlist`.`time` AS `time`, + `sys`.`x$processlist`.`current_statement` AS `current_statement`, + `sys`.`x$processlist`.`execution_engine` AS `execution_engine`, + `sys`.`x$processlist`.`statement_latency` AS `statement_latency`, + `sys`.`x$processlist`.`progress` AS `progress`, + `sys`.`x$processlist`.`lock_latency` AS `lock_latency`, + `sys`.`x$processlist`.`cpu_latency` AS `cpu_latency`, + `sys`.`x$processlist`.`rows_examined` AS `rows_examined`, + `sys`.`x$processlist`.`rows_sent` AS `rows_sent`, + `sys`.`x$processlist`.`rows_affected` AS `rows_affected`, + `sys`.`x$processlist`.`tmp_tables` AS `tmp_tables`, + `sys`.`x$processlist`.`tmp_disk_tables` AS `tmp_disk_tables`, + `sys`.`x$processlist`.`full_scan` AS `full_scan`, + `sys`.`x$processlist`.`last_statement` AS `last_statement`, + `sys`.`x$processlist`.`last_statement_latency` AS `last_statement_latency`, + `sys`.`x$processlist`.`current_memory` AS `current_memory`, + `sys`.`x$processlist`.`last_wait` AS `last_wait`, + `sys`.`x$processlist`.`last_wait_latency` AS `last_wait_latency`, + `sys`.`x$processlist`.`source` AS `source`, + `sys`.`x$processlist`.`trx_latency` AS `trx_latency`, + `sys`.`x$processlist`.`trx_state` AS `trx_state`, + `sys`.`x$processlist`.`trx_autocommit` AS `trx_autocommit`, + `sys`.`x$processlist`.`pid` AS `pid`, + `sys`.`x$processlist`.`program_name` AS `program_name` +from `sys`.`x$processlist` +where ((`sys`.`x$processlist`.`conn_id` is not null) and (`sys`.`x$processlist`.`command` <> 'Daemon')); + diff --git a/IDEA/sys/x$statement_analysis.sql b/IDEA/sys/x$statement_analysis.sql new file mode 100644 index 00000000..dcff0312 --- /dev/null +++ b/IDEA/sys/x$statement_analysis.sql @@ -0,0 +1,39 @@ +create definer = `mysql.sys`@localhost view sys.x$statement_analysis as +select `performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT` AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + if(((`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_GOOD_INDEX_USED` > 0) or + (`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` > 0)), '*', + '') AS `full_scan`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_SECONDARY` AS `exec_secondary_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` AS `err_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` AS `warn_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`MAX_TIMER_WAIT` AS `max_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`AVG_TIMER_WAIT` AS `avg_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_LOCK_TIME` AS `lock_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CPU_TIME` AS `cpu_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_SENT` AS `rows_sent`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_SENT` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `rows_sent_avg`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_EXAMINED` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `rows_examined_avg`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_AFFECTED` AS `rows_affected`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_AFFECTED` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `rows_affected_avg`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` AS `tmp_tables`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_DISK_TABLES` AS `tmp_disk_tables`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_ROWS` AS `rows_sorted`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_MERGE_PASSES` AS `sort_merge_passes`, + `performance_schema`.`events_statements_summary_by_digest`.`MAX_CONTROLLED_MEMORY` AS `max_controlled_memory`, + `performance_schema`.`events_statements_summary_by_digest`.`MAX_TOTAL_MEMORY` AS `max_total_memory`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen` +from `performance_schema`.`events_statements_summary_by_digest` +order by `performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$statements_with_errors_or_warnings.sql b/IDEA/sys/x$statements_with_errors_or_warnings.sql new file mode 100644 index 00000000..709d0fd1 --- /dev/null +++ b/IDEA/sys/x$statements_with_errors_or_warnings.sql @@ -0,0 +1,21 @@ +create definer = `mysql.sys`@localhost view sys.x$statements_with_errors_or_warnings as +select `performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT` AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` AS `errors`, + (ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0) * + 100) AS `error_pct`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` AS `warnings`, + (ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0) * + 100) AS `warning_pct`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest` +from `performance_schema`.`events_statements_summary_by_digest` +where ((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` > 0) or + (`performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` > 0)) +order by `performance_schema`.`events_statements_summary_by_digest`.`SUM_ERRORS` desc, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_WARNINGS` desc; + diff --git a/IDEA/sys/x$statements_with_full_table_scans.sql b/IDEA/sys/x$statements_with_full_table_scans.sql new file mode 100644 index 00000000..c7598690 --- /dev/null +++ b/IDEA/sys/x$statements_with_full_table_scans.sql @@ -0,0 +1,27 @@ +create definer = `mysql.sys`@localhost view sys.x$statements_with_full_table_scans as +select `performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT` AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` AS `no_index_used_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_GOOD_INDEX_USED` AS `no_good_index_used_count`, + round((ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0) * 100), + 0) AS `no_index_used_pct`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_SENT` AS `rows_sent`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + round((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_SENT` / + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`), 0) AS `rows_sent_avg`, + round((`performance_schema`.`events_statements_summary_by_digest`.`SUM_ROWS_EXAMINED` / + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`), 0) AS `rows_examined_avg`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest` +from `performance_schema`.`events_statements_summary_by_digest` +where (((`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` > 0) or + (`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_GOOD_INDEX_USED` > 0)) and + (not ((`performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT` like 'SHOW%')))) +order by round((ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_NO_INDEX_USED` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0) * 100), + 0) desc, `performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$statements_with_runtimes_in_95th_percentile.sql b/IDEA/sys/x$statements_with_runtimes_in_95th_percentile.sql new file mode 100644 index 00000000..9c8e6d3c --- /dev/null +++ b/IDEA/sys/x$statements_with_runtimes_in_95th_percentile.sql @@ -0,0 +1,22 @@ +create definer = `mysql.sys`@localhost view sys.x$statements_with_runtimes_in_95th_percentile as +select `stmts`.`DIGEST_TEXT` AS `query`, + `stmts`.`SCHEMA_NAME` AS `db`, + if(((`stmts`.`SUM_NO_GOOD_INDEX_USED` > 0) or (`stmts`.`SUM_NO_INDEX_USED` > 0)), '*', '') AS `full_scan`, + `stmts`.`COUNT_STAR` AS `exec_count`, + `stmts`.`SUM_ERRORS` AS `err_count`, + `stmts`.`SUM_WARNINGS` AS `warn_count`, + `stmts`.`SUM_TIMER_WAIT` AS `total_latency`, + `stmts`.`MAX_TIMER_WAIT` AS `max_latency`, + `stmts`.`AVG_TIMER_WAIT` AS `avg_latency`, + `stmts`.`SUM_ROWS_SENT` AS `rows_sent`, + round(ifnull((`stmts`.`SUM_ROWS_SENT` / nullif(`stmts`.`COUNT_STAR`, 0)), 0), 0) AS `rows_sent_avg`, + `stmts`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + round(ifnull((`stmts`.`SUM_ROWS_EXAMINED` / nullif(`stmts`.`COUNT_STAR`, 0)), 0), + 0) AS `rows_examined_avg`, + `stmts`.`FIRST_SEEN` AS `first_seen`, + `stmts`.`LAST_SEEN` AS `last_seen`, + `stmts`.`DIGEST` AS `digest` +from (`performance_schema`.`events_statements_summary_by_digest` `stmts` join `sys`.`x$ps_digest_95th_percentile_by_avg_us` `top_percentile` + on ((round((`stmts`.`AVG_TIMER_WAIT` / 1000000), 0) >= `sys`.`top_percentile`.`avg_us`))) +order by `stmts`.`AVG_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$statements_with_sorting.sql b/IDEA/sys/x$statements_with_sorting.sql new file mode 100644 index 00000000..47755ef7 --- /dev/null +++ b/IDEA/sys/x$statements_with_sorting.sql @@ -0,0 +1,22 @@ +create definer = `mysql.sys`@localhost view sys.x$statements_with_sorting as +select `performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT` AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_MERGE_PASSES` AS `sort_merge_passes`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_MERGE_PASSES` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `avg_sort_merges`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_SCAN` AS `sorts_using_scans`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_RANGE` AS `sort_using_range`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_ROWS` AS `rows_sorted`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_ROWS` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `avg_rows_sorted`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest` +from `performance_schema`.`events_statements_summary_by_digest` +where (`performance_schema`.`events_statements_summary_by_digest`.`SUM_SORT_ROWS` > 0) +order by `performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$statements_with_temp_tables.sql b/IDEA/sys/x$statements_with_temp_tables.sql new file mode 100644 index 00000000..7ac89121 --- /dev/null +++ b/IDEA/sys/x$statements_with_temp_tables.sql @@ -0,0 +1,22 @@ +create definer = `mysql.sys`@localhost view sys.x$statements_with_temp_tables as +select `performance_schema`.`events_statements_summary_by_digest`.`DIGEST_TEXT` AS `query`, + `performance_schema`.`events_statements_summary_by_digest`.`SCHEMA_NAME` AS `db`, + `performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR` AS `exec_count`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` AS `memory_tmp_tables`, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_DISK_TABLES` AS `disk_tmp_tables`, + round(ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`COUNT_STAR`, 0)), 0), + 0) AS `avg_tmp_tables_per_query`, + round((ifnull((`performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_DISK_TABLES` / + nullif(`performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES`, 0)), + 0) * 100), + 0) AS `tmp_tables_to_disk_pct`, + `performance_schema`.`events_statements_summary_by_digest`.`FIRST_SEEN` AS `first_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`LAST_SEEN` AS `last_seen`, + `performance_schema`.`events_statements_summary_by_digest`.`DIGEST` AS `digest` +from `performance_schema`.`events_statements_summary_by_digest` +where (`performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` > 0) +order by `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_DISK_TABLES` desc, + `performance_schema`.`events_statements_summary_by_digest`.`SUM_CREATED_TMP_TABLES` desc; + diff --git a/IDEA/sys/x$user_summary.sql b/IDEA/sys/x$user_summary.sql new file mode 100644 index 00000000..13243a64 --- /dev/null +++ b/IDEA/sys/x$user_summary.sql @@ -0,0 +1,24 @@ +create definer = `mysql.sys`@localhost view sys.x$user_summary as +select if((`performance_schema`.`accounts`.`USER` is null), 'background', + `performance_schema`.`accounts`.`USER`) AS `user`, + sum(`sys`.`stmt`.`total`) AS `statements`, + sum(`sys`.`stmt`.`total_latency`) AS `statement_latency`, + ifnull((sum(`sys`.`stmt`.`total_latency`) / nullif(sum(`sys`.`stmt`.`total`), 0)), 0) AS `statement_avg_latency`, + sum(`sys`.`stmt`.`full_scans`) AS `table_scans`, + sum(`sys`.`io`.`ios`) AS `file_ios`, + sum(`sys`.`io`.`io_latency`) AS `file_io_latency`, + sum(`performance_schema`.`accounts`.`CURRENT_CONNECTIONS`) AS `current_connections`, + sum(`performance_schema`.`accounts`.`TOTAL_CONNECTIONS`) AS `total_connections`, + count(distinct `performance_schema`.`accounts`.`HOST`) AS `unique_hosts`, + sum(`sys`.`mem`.`current_allocated`) AS `current_memory`, + sum(`sys`.`mem`.`total_allocated`) AS `total_memory_allocated` +from (((`performance_schema`.`accounts` left join `sys`.`x$user_summary_by_statement_latency` `stmt` on (( + if((`performance_schema`.`accounts`.`USER` is null), 'background', `performance_schema`.`accounts`.`USER`) = + `sys`.`stmt`.`user`))) left join `sys`.`x$user_summary_by_file_io` `io` + on ((if((`performance_schema`.`accounts`.`USER` is null), 'background', `performance_schema`.`accounts`.`USER`) = + `sys`.`io`.`user`))) left join `sys`.`x$memory_by_user_by_current_bytes` `mem` + on ((if((`performance_schema`.`accounts`.`USER` is null), 'background', `performance_schema`.`accounts`.`USER`) = + `sys`.`mem`.`user`))) +group by if((`performance_schema`.`accounts`.`USER` is null), 'background', `performance_schema`.`accounts`.`USER`) +order by sum(`sys`.`stmt`.`total_latency`) desc; + diff --git a/IDEA/sys/x$user_summary_by_file_io.sql b/IDEA/sys/x$user_summary_by_file_io.sql new file mode 100644 index 00000000..1fcf2757 --- /dev/null +++ b/IDEA/sys/x$user_summary_by_file_io.sql @@ -0,0 +1,11 @@ +create definer = `mysql.sys`@localhost view sys.x$user_summary_by_file_io as +select if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`) AS `user`, + sum(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`COUNT_STAR`) AS `ios`, + sum(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) AS `io_latency` +from `performance_schema`.`events_waits_summary_by_user_by_event_name` +where (`performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` like 'wait/io/file/%') +group by if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`) +order by sum(`performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/x$user_summary_by_file_io_type.sql b/IDEA/sys/x$user_summary_by_file_io_type.sql new file mode 100644 index 00000000..85a06cb8 --- /dev/null +++ b/IDEA/sys/x$user_summary_by_file_io_type.sql @@ -0,0 +1,14 @@ +create definer = `mysql.sys`@localhost view sys.x$user_summary_by_file_io_type as +select if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`) AS `user`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` AS `latency`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`MAX_TIMER_WAIT` AS `max_latency` +from `performance_schema`.`events_waits_summary_by_user_by_event_name` +where ((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` like 'wait/io/file%') and + (`performance_schema`.`events_waits_summary_by_user_by_event_name`.`COUNT_STAR` > 0)) +order by if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`), + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$user_summary_by_stages.sql b/IDEA/sys/x$user_summary_by_stages.sql new file mode 100644 index 00000000..4528f3fd --- /dev/null +++ b/IDEA/sys/x$user_summary_by_stages.sql @@ -0,0 +1,13 @@ +create definer = `mysql.sys`@localhost view sys.x$user_summary_by_stages as +select if((`performance_schema`.`events_stages_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`USER`) AS `user`, + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`EVENT_NAME` AS `event_name`, + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`AVG_TIMER_WAIT` AS `avg_latency` +from `performance_schema`.`events_stages_summary_by_user_by_event_name` +where (`performance_schema`.`events_stages_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` <> 0) +order by if((`performance_schema`.`events_stages_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`USER`), + `performance_schema`.`events_stages_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$user_summary_by_statement_latency.sql b/IDEA/sys/x$user_summary_by_statement_latency.sql new file mode 100644 index 00000000..57db7161 --- /dev/null +++ b/IDEA/sys/x$user_summary_by_statement_latency.sql @@ -0,0 +1,18 @@ +create definer = `mysql.sys`@localhost view sys.x$user_summary_by_statement_latency as +select if((`performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER`) AS `user`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`COUNT_STAR`) AS `total`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_LOCK_TIME`) AS `lock_latency`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_CPU_TIME`) AS `cpu_latency`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_SENT`) AS `rows_sent`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_EXAMINED`) AS `rows_examined`, + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_AFFECTED`) AS `rows_affected`, + (sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_NO_INDEX_USED`) + + sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_NO_GOOD_INDEX_USED`)) AS `full_scans` +from `performance_schema`.`events_statements_summary_by_user_by_event_name` +group by if((`performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER`) +order by sum(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/x$user_summary_by_statement_type.sql b/IDEA/sys/x$user_summary_by_statement_type.sql new file mode 100644 index 00000000..95e8c129 --- /dev/null +++ b/IDEA/sys/x$user_summary_by_statement_type.sql @@ -0,0 +1,21 @@ +create definer = `mysql.sys`@localhost view sys.x$user_summary_by_statement_type as +select if((`performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER`) AS `user`, + substring_index(`performance_schema`.`events_statements_summary_by_user_by_event_name`.`EVENT_NAME`, '/', + -(1)) AS `statement`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`MAX_TIMER_WAIT` AS `max_latency`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_LOCK_TIME` AS `lock_latency`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_CPU_TIME` AS `cpu_latency`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_SENT` AS `rows_sent`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_EXAMINED` AS `rows_examined`, + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_ROWS_AFFECTED` AS `rows_affected`, + (`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_NO_INDEX_USED` + + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_NO_GOOD_INDEX_USED`) AS `full_scans` +from `performance_schema`.`events_statements_summary_by_user_by_event_name` +where (`performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` <> 0) +order by if((`performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`USER`), + `performance_schema`.`events_statements_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$wait_classes_global_by_avg_latency.sql b/IDEA/sys/x$wait_classes_global_by_avg_latency.sql new file mode 100644 index 00000000..2c68e51c --- /dev/null +++ b/IDEA/sys/x$wait_classes_global_by_avg_latency.sql @@ -0,0 +1,18 @@ +create definer = `mysql.sys`@localhost view sys.x$wait_classes_global_by_avg_latency as +select substring_index(`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME`, '/', + 3) AS `event_class`, + sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`) AS `total`, + sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + min(`performance_schema`.`events_waits_summary_global_by_event_name`.`MIN_TIMER_WAIT`) AS `min_latency`, + ifnull((sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) / + nullif(sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`), 0)), + 0) AS `avg_latency`, + max(`performance_schema`.`events_waits_summary_global_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency` +from `performance_schema`.`events_waits_summary_global_by_event_name` +where ((`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT` > 0) and + (`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME` <> 'idle')) +group by `event_class` +order by ifnull((sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) / + nullif(sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`), 0)), + 0) desc; + diff --git a/IDEA/sys/x$wait_classes_global_by_latency.sql b/IDEA/sys/x$wait_classes_global_by_latency.sql new file mode 100644 index 00000000..333c2b21 --- /dev/null +++ b/IDEA/sys/x$wait_classes_global_by_latency.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.x$wait_classes_global_by_latency as +select substring_index(`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME`, '/', + 3) AS `event_class`, + sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`) AS `total`, + sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) AS `total_latency`, + min(`performance_schema`.`events_waits_summary_global_by_event_name`.`MIN_TIMER_WAIT`) AS `min_latency`, + ifnull((sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) / + nullif(sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR`), 0)), + 0) AS `avg_latency`, + max(`performance_schema`.`events_waits_summary_global_by_event_name`.`MAX_TIMER_WAIT`) AS `max_latency` +from `performance_schema`.`events_waits_summary_global_by_event_name` +where ((`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT` > 0) and + (`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME` <> 'idle')) +group by substring_index(`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME`, '/', 3) +order by sum(`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT`) desc; + diff --git a/IDEA/sys/x$waits_by_host_by_latency.sql b/IDEA/sys/x$waits_by_host_by_latency.sql new file mode 100644 index 00000000..ab3a3016 --- /dev/null +++ b/IDEA/sys/x$waits_by_host_by_latency.sql @@ -0,0 +1,15 @@ +create definer = `mysql.sys`@localhost view sys.x$waits_by_host_by_latency as +select if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`) AS `host`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` AS `event`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`AVG_TIMER_WAIT` AS `avg_latency`, + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`MAX_TIMER_WAIT` AS `max_latency` +from `performance_schema`.`events_waits_summary_by_host_by_event_name` +where ((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`EVENT_NAME` <> 'idle') and + (`performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` > 0)) +order by if((`performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST` is null), 'background', + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`HOST`), + `performance_schema`.`events_waits_summary_by_host_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$waits_by_user_by_latency.sql b/IDEA/sys/x$waits_by_user_by_latency.sql new file mode 100644 index 00000000..901f60e3 --- /dev/null +++ b/IDEA/sys/x$waits_by_user_by_latency.sql @@ -0,0 +1,16 @@ +create definer = `mysql.sys`@localhost view sys.x$waits_by_user_by_latency as +select if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`) AS `user`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` AS `event`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`AVG_TIMER_WAIT` AS `avg_latency`, + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`MAX_TIMER_WAIT` AS `max_latency` +from `performance_schema`.`events_waits_summary_by_user_by_event_name` +where ((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`EVENT_NAME` <> 'idle') and + (`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is not null) and + (`performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` > 0)) +order by if((`performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER` is null), 'background', + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`USER`), + `performance_schema`.`events_waits_summary_by_user_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/sys/x$waits_global_by_latency.sql b/IDEA/sys/x$waits_global_by_latency.sql new file mode 100644 index 00000000..a506c5c0 --- /dev/null +++ b/IDEA/sys/x$waits_global_by_latency.sql @@ -0,0 +1,11 @@ +create definer = `mysql.sys`@localhost view sys.x$waits_global_by_latency as +select `performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME` AS `event`, + `performance_schema`.`events_waits_summary_global_by_event_name`.`COUNT_STAR` AS `total`, + `performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT` AS `total_latency`, + `performance_schema`.`events_waits_summary_global_by_event_name`.`AVG_TIMER_WAIT` AS `avg_latency`, + `performance_schema`.`events_waits_summary_global_by_event_name`.`MAX_TIMER_WAIT` AS `max_latency` +from `performance_schema`.`events_waits_summary_global_by_event_name` +where ((`performance_schema`.`events_waits_summary_global_by_event_name`.`EVENT_NAME` <> 'idle') and + (`performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT` > 0)) +order by `performance_schema`.`events_waits_summary_global_by_event_name`.`SUM_TIMER_WAIT` desc; + diff --git a/IDEA/wmsadmin.sql b/IDEA/wmsadmin.sql new file mode 100644 index 00000000..a5ac5054 --- /dev/null +++ b/IDEA/wmsadmin.sql @@ -0,0 +1,692 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 80023 + Source Host : localhost:3306 + Source Schema : wmsadmin + + Target Server Type : MySQL + Target Server Version : 80023 + File Encoding : 65001 + + Date: 23/02/2023 10:44:11 +*/ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for admin +-- ---------------------------- +DROP TABLE IF EXISTS `admin`; +CREATE TABLE `admin` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `roles` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of admin +-- ---------------------------- +INSERT INTO `admin` VALUES ('12598638-f94f-46af-88e5-b87b40b55bf5', '2023-02-15 21:00:06', 'lop@qq.com', '123456', ''); +INSERT INTO `admin` VALUES ('20b81c11-0881-4f3a-9bfe-3df6c25d5921', '2022-11-28 13:52:15', 'abc@qq.com', '123456', 'ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('37ecf396-cf13-44a6-9715-6d14e8643fb6', '2022-12-18 11:28:21', 'admin@qq.com', '123456', 'ROLE_EMPLOYEE;ROLE_WAREHOUSE;ROLE_SALE;ROLE_COMMODITY;ROLE_ADMIN;ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('38eb6904-785c-4e3a-a386-2dc2b9d92204', '2022-11-27 20:15:04', 'jiegod_8ck@126.com', '123456', 'ROLE_ADMIN;ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('3f33b767-d6cd-4736-9a51-6c1ff27e0663', '2023-02-20 20:00:08', 'lop@qq.com', '123456', 'ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('6462544b-50cc-4638-9f14-c81f63188fc2', '2022-11-29 20:25:48', 'cccccc@qq.com', '123456', 'ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('b20814b6-d955-4563-9164-95415d2450f6', '2022-11-24 23:58:04', '1402014577@qq.com', '123456', 'ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('b2297ef7-fe6e-41da-92a9-030ef30b6daf', '2023-01-11 13:42:38', '123@qq.com', '123456', 'ROLE_SUPER_ADMIN'); + +-- ---------------------------- +-- Table structure for code +-- ---------------------------- +DROP TABLE IF EXISTS `code`; +CREATE TABLE `code` ( + `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `exp` bigint(0) NOT NULL, + `value` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`email`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of code +-- ---------------------------- +INSERT INTO `code` VALUES ('1402014577@qq.com', 1669615938121, '276237'); +INSERT INTO `code` VALUES ('cccccc@qq.com', 1669725702342, '858227'); + +-- ---------------------------- +-- Table structure for commodity +-- ---------------------------- +DROP TABLE IF EXISTS `commodity`; +CREATE TABLE `commodity` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `count` int(0) NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `price` double NOT NULL, + `update_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of commodity +-- ---------------------------- +INSERT INTO `commodity` VALUES ('1dade9ff-ba00-4f78-bd27-55771dc65061', 0, '2022-12-18 11:30:17', '商品简介', '抽纸', 9.99, NULL); +INSERT INTO `commodity` VALUES ('52fdac99-f224-469e-8af8-ed49c166bb23', 20, '2022-11-22 14:14:29', '搭载麒麟980芯片', 'HUWAI MATE 30 Pro', 4000, NULL); +INSERT INTO `commodity` VALUES ('5fcb392b-39aa-4381-b5ad-b1ccd8d5b74e', 20081, '2022-12-02 20:36:04', 'Mac笔记本', 'Mac', 7400, NULL); +INSERT INTO `commodity` VALUES ('91eb39e3-d664-4aa8-8826-750d0a45bc67', 0, '2022-12-14 17:45:04', '键盘', '青柚', 34, NULL); +INSERT INTO `commodity` VALUES ('b3a8f5a2-2dac-4194-b806-687b7f08e82f', 50, '2023-01-11 13:35:52', '商品简介', '鼠标', 9.99, NULL); +INSERT INTO `commodity` VALUES ('eda4215d-82d8-4a08-a3f3-981b19274006', 70, '2022-11-24 23:56:52', '商品简介', 'Apple', 40000, NULL); + +-- ---------------------------- +-- Table structure for company +-- ---------------------------- +DROP TABLE IF EXISTS `company`; +CREATE TABLE `company` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of company +-- ---------------------------- + +-- ---------------------------- +-- Table structure for distribution +-- ---------------------------- +DROP TABLE IF EXISTS `distribution`; +CREATE TABLE `distribution` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `care` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `did` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `driver` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `status` int(0) NULL DEFAULT NULL, + `time` datetime(6) NULL DEFAULT NULL, + `urgent` bit(1) NOT NULL, + `vid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of distribution +-- ---------------------------- +INSERT INTO `distribution` VALUES ('3036e2cf-28db-4d4c-b52d-5f590540b74b', 'sad', '冰柜冷藏, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', 'sad', 2, '2022-11-09 13:09:23.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); +INSERT INTO `distribution` VALUES ('77a6b6b9-682c-4aba-926b-6d7645895037', '2343', '注意易碎, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', '234', 0, '2022-12-08 12:58:27.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); +INSERT INTO `distribution` VALUES ('7c6c52fd-abbe-4505-a7c0-ea12f68ed6cb', 'asd345', '冰柜冷藏, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', 'sd435345', 0, '2022-12-07 13:01:39.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); +INSERT INTO `distribution` VALUES ('ae587e56-1d74-4edf-9707-ef7235eebd91', '324234', '冰柜冷藏, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', '235352', 0, '2022-12-06 12:59:04.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); +INSERT INTO `distribution` VALUES ('ff9bcb29-5e7b-4462-b789-a92576711ef7', 'asd', '冰柜冷藏, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', 'sd', 0, '2022-12-07 13:01:39.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); + +-- ---------------------------- +-- Table structure for driver +-- ---------------------------- +DROP TABLE IF EXISTS `driver`; +CREATE TABLE `driver` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `create_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `driving` bit(1) NOT NULL, + `gender` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `id_card` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `license` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `score` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `update_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of driver +-- ---------------------------- +INSERT INTO `driver` VALUES ('a4a88363-a438-4847-a4bf-b25e6fa5ae6e', 'xxx', '2023-01-11 13:38:53', b'0', '男性', '423423424', 'xxx', '李四', '13793242563', '12', NULL); +INSERT INTO `driver` VALUES ('ea3bba9b-cda6-438d-b196-7c81e97b5040', '', '2022-11-27 12:26:46', b'0', '男性', '4412242003423345534', '34', '王五', '231325345345', '12', NULL); + +-- ---------------------------- +-- Table structure for employee +-- ---------------------------- +DROP TABLE IF EXISTS `employee`; +CREATE TABLE `employee` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `create_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `department` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `gender` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `id_card` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `update_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of employee +-- ---------------------------- +INSERT INTO `employee` VALUES ('18d600a1-8184-43bc-b46d-11c66ff2561d', 'xxx', '2023-01-11 11:07:38', 'A号仓库', '男性', '434242341', '张师傅', '1373242363', NULL); +INSERT INTO `employee` VALUES ('8ba9bf53-7e1d-43ff-ab71-b9d6af299c26', '广州', '2022-12-18 11:38:16', 'A号仓库', '男性', '441253546456234', '王师傅', '13729532464', NULL); + +-- ---------------------------- +-- Table structure for inventory +-- ---------------------------- +DROP TABLE IF EXISTS `inventory`; +CREATE TABLE `inventory` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `cid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `count` int(0) NULL DEFAULT NULL, + `location` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `wid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of inventory +-- ---------------------------- +INSERT INTO `inventory` VALUES ('0ff7a831-0824-428d-b140-ab41de52d5a4', 'eda4215d-82d8-4a08-a3f3-981b19274006', 70, NULL, 'Apple', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory` VALUES ('3c6f0c42-25e8-4ccb-b30a-2622d9740c87', '52fdac99-f224-469e-8af8-ed49c166bb23', 20, NULL, 'HUWAI MATE 30 Pro', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory` VALUES ('ca7f8e97-1edf-4fc8-b9a1-783a7d053131', '5fcb392b-39aa-4381-b5ad-b1ccd8d5b74e', 20081, NULL, 'Mac', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory` VALUES ('d9afc86f-a782-4d00-9300-78484f72c117', '2283b0a2-5e0b-4c1e-b651-d2e3b51b87ee', 80, NULL, '手机支架', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory` VALUES ('e8e63bfa-be44-4cb8-abe3-0b6baf3159fa', 'b3a8f5a2-2dac-4194-b806-687b7f08e82f', 50, NULL, '鼠标', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); + +-- ---------------------------- +-- Table structure for inventory_record +-- ---------------------------- +DROP TABLE IF EXISTS `inventory_record`; +CREATE TABLE `inventory_record` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `cid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `count` int(0) NULL DEFAULT NULL, + `create_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `type` int(0) NULL DEFAULT NULL, + `wid` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of inventory_record +-- ---------------------------- +INSERT INTO `inventory_record` VALUES ('0327e497-6349-4a33-816e-38f680bd48f4', 'b3a8f5a2-2dac-4194-b806-687b7f08e82f', 100, '2023-01-11 13:36:27', 'xxx', '鼠标', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('2c141734-d0d0-4f4e-bf66-ae60667f0709', 'eda4215d-82d8-4a08-a3f3-981b19274006', 20, '2022-11-25 00:01:09', 'ss', 'Apple', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('4197fbfb-78a5-4cae-b825-955099da1943', '52fdac99-f224-469e-8af8-ed49c166bb23', 20, '2022-11-22 14:16:57', '', 'HUWAI MATE 30 Pro', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('51f8cee5-a238-41dc-b031-40b05cd83abf', '2283b0a2-5e0b-4c1e-b651-d2e3b51b87ee', 100, '2023-01-11 11:06:12', 'xxxxx', '手机支架', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('6ff4d4dc-326c-4fd3-a782-06b799f9931a', '5fcb392b-39aa-4381-b5ad-b1ccd8d5b74e', 21312, '2022-12-02 20:36:52', '213', 'Mac', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('b1bdf63a-3c77-45b6-8841-8d149986f709', '5fcb392b-39aa-4381-b5ad-b1ccd8d5b74e', 1231, '2022-12-02 20:37:18', '123', 'Mac', -1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('b49e8ba9-30c8-4794-ab1f-c807c5dbc8c2', '2283b0a2-5e0b-4c1e-b651-d2e3b51b87ee', 20, '2023-01-11 11:08:25', 'xxxx', '手机支架', -1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('e99dd646-bbd0-42d9-a315-72d081af8544', 'b3a8f5a2-2dac-4194-b806-687b7f08e82f', 50, '2023-01-11 13:39:15', '50', '鼠标', -1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('fa51e39c-f210-4bcf-928f-e1036c6bdffb', 'eda4215d-82d8-4a08-a3f3-981b19274006', 50, '2023-01-11 09:27:00', '入库苹果手机', 'Apple', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); + +-- ---------------------------- +-- Table structure for login_log +-- ---------------------------- +DROP TABLE IF EXISTS `login_log`; +CREATE TABLE `login_log` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `browser` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `date` datetime(6) NULL DEFAULT NULL, + `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `status` int(0) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of login_log +-- ---------------------------- +INSERT INTO `login_log` VALUES ('121ae1ef-be5d-443a-b1de-6578302d9934', 'Chrome', '2022-12-06 15:05:58.830000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('1af75d04-fca0-49a1-89d7-95aa9212a24d', 'Chrome', '2022-12-17 23:15:17.620000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('1cd90c0f-8b99-40b9-9778-e667c30d9bbf', 'Chrome', '2022-12-18 11:28:31.718000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('36b25d1b-ba49-4673-abd0-16a136930305', 'Chrome', '2022-12-14 19:56:04.265000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('3f9b2ecf-fac0-4f52-aa7f-0a202f09a841', 'Chrome', '2022-12-19 13:10:24.253000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('40b51d68-749e-4859-b72f-45fc635f9d0a', 'Chrome', '2022-12-13 12:00:23.181000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('4c3fe589-07c2-4003-b463-dfd5f96d6722', 'Chrome', '2023-02-03 10:08:02.093000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('6cbe1050-6f2b-4b70-b761-e7997e01a9dc', 'Chrome', '2023-01-11 13:34:48.773000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('85301f24-d3e7-4349-8d2b-27c3ac3ee0d2', 'Chrome', '2022-12-13 14:26:11.472000', 'abc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('879f7917-8182-4b98-94d3-081a9497e89b', 'Chrome', '2022-12-18 11:27:24.102000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('8915ba3f-74dc-434b-af25-cf07dac74ded', 'Chrome', '2022-12-12 23:37:24.703000', 'admin@qq.com', '127.0.0.1', 0); +INSERT INTO `login_log` VALUES ('899f8c58-0d5b-46e0-a784-1c3f448719e7', 'Chrome', '2022-12-17 23:47:52.145000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('8d46124b-548e-4f8c-8719-56cf3226c55b', 'Chrome', '2022-12-18 17:09:53.910000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('917934f4-9f8e-48aa-b59e-d174248ed7b6', 'Chrome', '2023-02-16 10:30:12.742000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('93467357-7699-42f2-957b-a0a1a4cdc13d', 'Chrome', '2022-12-06 15:34:35.701000', 'adc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('93b213c5-e2ec-4558-af3e-12b2bc8f5217', 'Chrome', '2022-12-14 17:51:18.412000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('947b62e7-aeb1-46c3-9b0b-8e257cc72aac', 'Chrome', '2023-01-11 10:15:23.854000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('9482f3dd-7e8a-444b-ae95-596076056592', 'Chrome', '2022-12-12 23:37:31.175000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('97db4f45-e842-4822-9410-54fb04bfb042', 'Chrome', '2022-12-17 11:47:49.852000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('9961cc66-63ad-47c6-9c1e-c81cb08ed949', 'Chrome', '2023-02-15 20:57:44.695000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('9d827736-01fd-4d3e-b971-4554944c9356', 'Chrome', '2022-12-17 23:06:03.771000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('a149603d-ac88-4b85-a860-188036776615', 'Chrome', '2023-01-11 13:43:06.172000', '123@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('a82f5725-da5d-49b3-b7b5-90b544ae1296', 'Chrome', '2023-01-11 09:22:38.737000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('b30b9c6f-251b-49a1-9835-c8536f5c23bb', 'Chrome', '2022-12-12 23:36:42.313000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('b965a1cb-a354-41db-8099-b217505c4dc4', 'Chrome', '2022-12-06 15:10:23.878000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('c1f7f2e3-6355-4c91-91f2-58cacae7e463', 'Chrome', '2023-01-11 09:10:50.767000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('c7e666b4-bdac-45e8-8731-05f3274f7787', 'Chrome', '2022-12-14 17:37:48.504000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('ca38e16e-ba6f-45e7-8a46-fb78abbbf9cc', 'Chrome', '2023-02-03 09:43:42.628000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('cbf4e04f-2d40-4384-87dd-7767ae103c6b', 'Chrome', '2022-12-06 15:09:47.524000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('cc34263b-7082-4e24-805f-947d289c3c61', 'Chrome', '2023-02-20 19:50:49.392000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('d55f21f4-01e6-45a5-abb9-a9d61de1f4da', 'Chrome', '2023-02-20 19:50:41.017000', 'admin@qq.com', '127.0.0.1', 0); +INSERT INTO `login_log` VALUES ('e1a5b794-2f16-4bf3-8db1-924755326af0', 'Chrome', '2022-12-17 23:33:24.419000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('e6678543-7f24-4c3f-ba66-96bf97f83243', 'Chrome', '2022-12-06 15:31:35.868000', 'adc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('ea676457-0dde-4e7b-8fec-e01837c12333', 'Chrome', '2023-01-11 09:20:22.825000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('eaa7939a-833a-487e-81c9-10ad128f1d93', 'Chrome', '2022-12-02 20:27:24.135000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('eb531c48-ea7b-4ef3-9517-1224c26f62e8', 'Chrome', '2022-12-18 11:37:31.447000', 'abc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('f32bc9de-3d76-4db9-8d71-96d6ef145dca', 'Chrome', '2022-12-12 13:54:11.044000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('f719c3e7-1547-43ee-8416-a9939c504f6f', 'Chrome', '2022-12-13 14:25:14.960000', 'jack@qq.com', '127.0.0.1', 0); +INSERT INTO `login_log` VALUES ('f8384696-b37a-4f1b-9456-1f224427cf25', 'Chrome', '2022-12-18 10:54:04.371000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('f97fd7af-5a59-42ad-bbfb-b5fd065c0c1f', 'Chrome', '2022-12-18 11:28:02.712000', 'abc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('fc5588a9-287c-41e7-9adc-36c925d74418', 'Chrome', '2022-12-12 23:37:20.666000', 'admin@qq.com', '127.0.0.1', 0); +INSERT INTO `login_log` VALUES ('fe4e4ea1-41af-406e-b246-2e1e48eb045d', 'Chrome', '2023-01-11 11:04:37.010000', 'admin@qq.com', '127.0.0.1', 1); + +-- ---------------------------- +-- Table structure for sale +-- ---------------------------- +DROP TABLE IF EXISTS `sale`; +CREATE TABLE `sale` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `commodity` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `company` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `count` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `create_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `pay` bit(1) NOT NULL, + `phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `price` double NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sale +-- ---------------------------- +INSERT INTO `sale` VALUES ('0da2a4b7-208d-4c1d-bdd2-8966590f46c5', 'HUWAI MATE 30 Pro', '2', '500', '2022-12-13 14:23:44', 'ccc', '2342', b'1', '232423', 2000000); +INSERT INTO `sale` VALUES ('1307750a-78eb-4b07-8fb7-5b75bb3c6dc9', '手机支架', '中兴', '50', '2023-01-11 11:07:12', 'xxx', '234234', b'1', '213123', 499.5); +INSERT INTO `sale` VALUES ('38214342-a785-4929-9208-94762c16a7d0', 'Apple', '小米', '20', '2023-01-11 10:15:35', 'xxx', '428354352', b'1', '13789253421', 800000); +INSERT INTO `sale` VALUES ('b97a82bf-6aa8-47a7-a3a6-03e0df570038', '鼠标', '亚马逊', '50', '2023-01-11 13:37:50', '2341234', '342342', b'1', '214234', 499.5); +INSERT INTO `sale` VALUES ('bbcb2f8d-9ab4-4b6b-b0ff-1edae383c7a5', 'HUWAI MATE 30 Pro', '华为', '50', '2023-01-11 10:11:07', '234', '2134', b'1', '12332542342', 200000); + +-- ---------------------------- +-- Table structure for system_log +-- ---------------------------- +DROP TABLE IF EXISTS `system_log`; +CREATE TABLE `system_log` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `account` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `busincess_type` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'LTD', + `ip` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `method` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `module` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `time` datetime(6) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of system_log +-- ---------------------------- +INSERT INTO `system_log` VALUES ('022ec005-f15b-4a14-81d1-375bbad1bbe2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 14:59:33.348000'); +INSERT INTO `system_log` VALUES ('031ab444-46a8-448a-85cf-9b7033987bbc', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:03:01.678000'); +INSERT INTO `system_log` VALUES ('04ce3b48-3532-4ea3-8622-92c918afc5aa', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:50:59.325000'); +INSERT INTO `system_log` VALUES ('06f52601-980b-4f51-97c4-e88843dbf31a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:24:27.359000'); +INSERT INTO `system_log` VALUES ('07030b17-920b-45fe-a459-69559742a66d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 13:38:08.920000'); +INSERT INTO `system_log` VALUES ('0711615f-f8b1-4d8c-b0c5-72b08a90e51b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 11:08:04.405000'); +INSERT INTO `system_log` VALUES ('07824ae3-73fd-4045-b50c-28c949d35807', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:56:46.374000'); +INSERT INTO `system_log` VALUES ('083252f8-81e1-472f-b6e5-f4adce4e5e3b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:11:05.517000'); +INSERT INTO `system_log` VALUES ('0877caa9-0be0-4065-beb7-b9b16976a0b7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 21:57:03.526000'); +INSERT INTO `system_log` VALUES ('088be4cc-6648-4433-bd66-bd17c5a593d1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:37:08.319000'); +INSERT INTO `system_log` VALUES ('09ee1842-610c-4ead-800c-b08138eff2c6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:49.204000'); +INSERT INTO `system_log` VALUES ('0a3e9653-fddd-46cb-b120-7189745e9023', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-16 10:30:22.900000'); +INSERT INTO `system_log` VALUES ('0c49d9ba-00fc-439e-a122-fc4b750154eb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2022-12-23 19:05:11.634000'); +INSERT INTO `system_log` VALUES ('0d1f0d04-fc68-48cf-955a-385452717ce6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 10:58:59.954000'); +INSERT INTO `system_log` VALUES ('0e127759-729d-4762-8e51-016799b91ea1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:26:11.478000'); +INSERT INTO `system_log` VALUES ('0e6e972a-114c-4b9a-9115-68d70bf8304a', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 12:15:25.465000'); +INSERT INTO `system_log` VALUES ('0e749bc2-ce9d-4ba4-90ae-a4535caef592', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 13:10:57.580000'); +INSERT INTO `system_log` VALUES ('11a1e510-11e1-406b-b377-4bc0076b538e', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:28:03.896000'); +INSERT INTO `system_log` VALUES ('11a3e607-18ee-41da-bcba-2c8b419eb5d0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:04:38.532000'); +INSERT INTO `system_log` VALUES ('12ba136e-da1c-4e56-93b1-caa50b1ced20', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:41.743000'); +INSERT INTO `system_log` VALUES ('12f8f420-e25d-4e5e-95ed-a58f20b5427e', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 11:37:41.214000'); +INSERT INTO `system_log` VALUES ('1518cd8f-0ab0-48c9-9c6b-7b24bf0a1e0a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:28.747000'); +INSERT INTO `system_log` VALUES ('152742ba-d32d-4ec3-8954-5ac342900137', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:39:02.791000'); +INSERT INTO `system_log` VALUES ('164d9a8a-4361-40cb-a72e-7f3f09393275', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 11:07:54.695000'); +INSERT INTO `system_log` VALUES ('17155240-f711-4ad3-beaa-caf0ed5c93d9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:16:35.107000'); +INSERT INTO `system_log` VALUES ('187a6ed0-8352-4426-b87d-99e31b977714', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:19:07.892000'); +INSERT INTO `system_log` VALUES ('189cec0a-d3ea-4c70-8c60-9151b6cf2937', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:34:42.856000'); +INSERT INTO `system_log` VALUES ('19629465-d4b0-4972-99bb-dc7b497b2357', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:39:02.459000'); +INSERT INTO `system_log` VALUES ('19998a8b-79e8-4725-878d-87f4ca22a491', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:56:21.871000'); +INSERT INTO `system_log` VALUES ('1a1a8ca4-dd00-476d-8202-7050968b89be', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:15:25.052000'); +INSERT INTO `system_log` VALUES ('1a801db2-06ab-47b5-bbe9-17b1a55b567c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 13:15:42.052000'); +INSERT INTO `system_log` VALUES ('1abccede-c3f2-4590-a4c6-4fb217591fe4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 12:48:25.474000'); +INSERT INTO `system_log` VALUES ('1b6eff65-712b-4ec6-b252-2e73f5e531e8', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2022-12-19 12:58:39.642000'); +INSERT INTO `system_log` VALUES ('1c472a75-72cf-474c-987c-09ad35e35bb6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:20:23.990000'); +INSERT INTO `system_log` VALUES ('1c4c3b10-8668-4426-9653-c1a06fa2b47d', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 12:15:45.300000'); +INSERT INTO `system_log` VALUES ('1d1db78d-54d1-4d98-8f67-7bd4a3188959', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:19:36.060000'); +INSERT INTO `system_log` VALUES ('1d3e6c4d-ffd7-4382-b215-0b8428b79587', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:07:45.793000'); +INSERT INTO `system_log` VALUES ('1f9c1f26-7bf7-4133-9dc3-06b9242753c0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:56:44.467000'); +INSERT INTO `system_log` VALUES ('206f05d8-2362-4f74-9229-6f72389a16e6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 10:03:27.726000'); +INSERT INTO `system_log` VALUES ('2087ff2a-3c06-454e-a56d-e9576e1b54cc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:16:28.053000'); +INSERT INTO `system_log` VALUES ('20a280a3-3733-4097-ab14-2017bdbc45c3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:19:03.541000'); +INSERT INTO `system_log` VALUES ('22f051ae-e9da-4487-8d32-ae579fbab261', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-03 10:08:53.122000'); +INSERT INTO `system_log` VALUES ('230bbf27-928b-4c8b-8c41-5ec8100c2d82', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:18:59.066000'); +INSERT INTO `system_log` VALUES ('25946777-5079-423e-9bad-5a39ecfc8a66', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 12:15:45.235000'); +INSERT INTO `system_log` VALUES ('26819e0b-7ae7-4d23-bfde-eca7b34cc9d9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 14:59:37.515000'); +INSERT INTO `system_log` VALUES ('26a081b9-b630-4864-8ded-4e0c9e88d3aa', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 12:15:56.064000'); +INSERT INTO `system_log` VALUES ('275817ea-15f0-4875-b727-d754a4053d2d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:35:05.878000'); +INSERT INTO `system_log` VALUES ('2760b8cc-ab8c-4beb-9625-185d3221f933', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:59.663000'); +INSERT INTO `system_log` VALUES ('2ae76013-4dcd-4ab8-a9a9-b711d16f9419', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:40.933000'); +INSERT INTO `system_log` VALUES ('2afc457d-cbf1-420f-8c17-d36f9f56deb3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:18:49.210000'); +INSERT INTO `system_log` VALUES ('2b24e668-b1bf-4bf2-a890-e9abb953834f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 11:19:40.142000'); +INSERT INTO `system_log` VALUES ('2b59abf3-f3fe-4475-9a27-8145dadc3306', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:20:59.984000'); +INSERT INTO `system_log` VALUES ('2cebfee1-a906-4cad-b585-c3f0f456a0cb', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2022-12-18 11:29:28.045000'); +INSERT INTO `system_log` VALUES ('2f8c7838-775c-4b8a-82a1-6a73be964abd', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.EmployeeController.save', '员工管理', '2023-01-11 11:07:38.361000'); +INSERT INTO `system_log` VALUES ('2fa51b9f-8841-485d-a4a2-7bf33af92b1c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:08:12.464000'); +INSERT INTO `system_log` VALUES ('31d038fc-ce82-45c9-8aaa-b40f92882625', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:08:28.522000'); +INSERT INTO `system_log` VALUES ('31ecd48c-7a32-4167-a683-e6bdacf785e5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 15:36:52.551000'); +INSERT INTO `system_log` VALUES ('32ba899c-4984-4d13-a504-3b4ff630de37', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 10:16:36.294000'); +INSERT INTO `system_log` VALUES ('33cf72b3-98aa-4975-9834-38c3b61c99a2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:20:44.559000'); +INSERT INTO `system_log` VALUES ('38cedbb8-228f-4965-ad15-7fd5c9162781', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 09:20:28.320000'); +INSERT INTO `system_log` VALUES ('3906d078-a520-45c6-967a-4158107dd8b5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:10:55.388000'); +INSERT INTO `system_log` VALUES ('3c672095-3fb4-499a-97bb-a75d7b15f60d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:56:45.661000'); +INSERT INTO `system_log` VALUES ('3d01c743-3b7e-46b8-aca2-f25e726b3216', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:18:25.728000'); +INSERT INTO `system_log` VALUES ('3d348641-6af5-4b00-a2d7-1d554a11f373', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:20:29.946000'); +INSERT INTO `system_log` VALUES ('3d548509-df88-4305-ba98-cf42f57f0339', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2022-12-19 13:02:16.459000'); +INSERT INTO `system_log` VALUES ('3dbe797b-6c60-4f5a-aa89-51614814c47a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:01:36.018000'); +INSERT INTO `system_log` VALUES ('3e458605-cad4-46b0-b760-c67af93f5e26', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:58:52.210000'); +INSERT INTO `system_log` VALUES ('3f27f1ec-4ebb-4258-a224-a1243a36a201', 'admin@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.CommodityController.delete', '商品管理', '2023-01-11 13:15:34.845000'); +INSERT INTO `system_log` VALUES ('3f6c948f-5227-4020-9a46-bdc93f0d1f98', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:27.597000'); +INSERT INTO `system_log` VALUES ('40259f31-a500-490a-95b3-c896840c3a86', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-16 10:30:20.213000'); +INSERT INTO `system_log` VALUES ('405950ed-3091-43d6-bc56-2a6786da7e9c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:18:34.088000'); +INSERT INTO `system_log` VALUES ('412d46e8-de45-482e-a2c7-a67f0cb32aac', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 11:36:37.580000'); +INSERT INTO `system_log` VALUES ('412faf77-7cb5-4098-8474-ae743f4ade8c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-03 10:08:39.314000'); +INSERT INTO `system_log` VALUES ('418af412-c363-400e-abaa-2d0d65368638', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:36:23.498000'); +INSERT INTO `system_log` VALUES ('4286d9ef-9a4c-4be5-b846-e6dad0699f9d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:28.128000'); +INSERT INTO `system_log` VALUES ('43a9c757-823a-49cc-9545-2971a33baa87', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 11:06:00.026000'); +INSERT INTO `system_log` VALUES ('48d387fd-5948-4558-9a54-ce4cb92c6322', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 11:19:31.867000'); +INSERT INTO `system_log` VALUES ('491e8e68-6c4e-4f22-8278-8ec06796ab12', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-16 10:31:56.789000'); +INSERT INTO `system_log` VALUES ('4990230f-7a78-4d75-bd5d-74dd255557f1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 11:08:08.819000'); +INSERT INTO `system_log` VALUES ('4a958c89-7537-419f-8a3c-26d5454b0134', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2022-12-19 12:59:22.957000'); +INSERT INTO `system_log` VALUES ('4ae005f3-a2f2-4ae2-8f71-8d76d74e5dee', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.VehicleController.save', '车辆管理', '2023-01-11 13:38:19.566000'); +INSERT INTO `system_log` VALUES ('4af110c7-9d7d-4958-819b-d1186cd2e090', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 09:21:00.124000'); +INSERT INTO `system_log` VALUES ('4b266054-8109-483d-91d3-b3e9457e89f2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:28:32.927000'); +INSERT INTO `system_log` VALUES ('4b3e167a-542a-4d4c-8962-ac45fbb2e950', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:40.423000'); +INSERT INTO `system_log` VALUES ('4b97d469-01c7-4ddc-a66e-d5e8f22f3d62', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 10:16:42.295000'); +INSERT INTO `system_log` VALUES ('4c41f964-a415-4c8c-bfcd-a0b90d50649a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:21:10.080000'); +INSERT INTO `system_log` VALUES ('4c5a201b-e749-450e-962d-05d239e9917f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 14:59:35.709000'); +INSERT INTO `system_log` VALUES ('4ca0dd67-fa02-4495-9f7c-5fe414b0720f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 12:46:47.691000'); +INSERT INTO `system_log` VALUES ('4dd0a93f-b1db-429e-aecc-00184ee8da03', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2023-01-11 13:35:52.107000'); +INSERT INTO `system_log` VALUES ('4ec70883-e787-42e5-8c56-d3ca309c98ca', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:39.853000'); +INSERT INTO `system_log` VALUES ('4f297bc1-8424-4d2b-9bc3-84c17500a892', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-19 14:59:35.712000'); +INSERT INTO `system_log` VALUES ('4fc7b4e1-51ca-467c-960d-aa006e0df18c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:18:30.097000'); +INSERT INTO `system_log` VALUES ('5047c752-e010-4245-b948-569783561c09', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:58:26.204000'); +INSERT INTO `system_log` VALUES ('509b6d47-eb41-489d-99c1-58745b767433', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:56:50.377000'); +INSERT INTO `system_log` VALUES ('519b3f8b-640f-4222-badb-af223a5029ae', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 13:38:53.725000'); +INSERT INTO `system_log` VALUES ('535fc79e-3e5b-4efe-8b98-4683f0d82f2e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:10:52.320000'); +INSERT INTO `system_log` VALUES ('53e15098-b2fb-4590-88ce-c462c9aa8430', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:16:05.984000'); +INSERT INTO `system_log` VALUES ('5514e7a9-3338-428c-a73c-ca5197090caa', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-16 10:30:22.084000'); +INSERT INTO `system_log` VALUES ('558c92ed-86e8-434d-b664-e9a40c265154', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:56:43.500000'); +INSERT INTO `system_log` VALUES ('56be44a7-ad6b-4c9f-bd5e-1ca515065951', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:47.209000'); +INSERT INTO `system_log` VALUES ('5750f90d-9089-42a4-9797-9ff3b9e90836', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:27:11.699000'); +INSERT INTO `system_log` VALUES ('57c199bc-56b2-4822-b2cb-2a986c6e3854', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:16:01.501000'); +INSERT INTO `system_log` VALUES ('59636bf3-923a-40de-9658-e29c30fcc5bc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:02:17.474000'); +INSERT INTO `system_log` VALUES ('59ed5fe8-70d7-4b1a-8a29-e6c0f8e3161c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 09:23:34.586000'); +INSERT INTO `system_log` VALUES ('5be162cd-6932-419f-a301-36573f4efa83', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:45.451000'); +INSERT INTO `system_log` VALUES ('5c990212-4723-4ed2-9236-e65e64250b0f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 13:38:19.649000'); +INSERT INTO `system_log` VALUES ('5cca92dc-618d-42bc-845a-f031023ea875', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 11:08:02.124000'); +INSERT INTO `system_log` VALUES ('5d1ed86b-6a65-4726-ab76-51f86620e350', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2022-12-18 17:03:10.144000'); +INSERT INTO `system_log` VALUES ('5dd519bf-6334-4039-b74d-c3e05d52165b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 09:22:55.919000'); +INSERT INTO `system_log` VALUES ('5ddaaa2e-845e-4280-afc7-a61ad8a0b0ad', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:25.728000'); +INSERT INTO `system_log` VALUES ('5e10f646-15de-434b-a2c9-e057a0d8c194', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 13:36:09.637000'); +INSERT INTO `system_log` VALUES ('5f347fa2-f2cf-4857-98b4-afd1f99450af', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 10:16:37.153000'); +INSERT INTO `system_log` VALUES ('5fe8d44e-cb13-4007-8fca-860a9e4838a1', 'abc@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.EmployeeController.save', '员工管理', '2022-12-18 11:38:16.711000'); +INSERT INTO `system_log` VALUES ('6010ec17-8a3f-4597-8819-f1a80427b2a5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 20:24:14.407000'); +INSERT INTO `system_log` VALUES ('602100e8-9a16-4d24-9134-f2d21b376855', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-20 19:56:41.891000'); +INSERT INTO `system_log` VALUES ('60f76113-5a05-4fe8-93ab-d05170d38f41', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-01-11 09:23:25.714000'); +INSERT INTO `system_log` VALUES ('610ccf87-1757-498c-bd8d-1b91db31e976', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 12:47:18.969000'); +INSERT INTO `system_log` VALUES ('61287a93-c46f-4205-8b2b-c5ddb901c9b4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-19 14:59:38.573000'); +INSERT INTO `system_log` VALUES ('615b26ab-abdb-4d2a-9950-38ccbc6c0832', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:57:16.179000'); +INSERT INTO `system_log` VALUES ('62027433-5b3f-4d27-8015-7f44115115d9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-03 10:08:39.317000'); +INSERT INTO `system_log` VALUES ('62052353-d251-4af3-808e-81855ef072d4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:48:03.923000'); +INSERT INTO `system_log` VALUES ('63a3a61c-d18e-4fc3-9b7b-9b90bd66f485', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 14:59:38.571000'); +INSERT INTO `system_log` VALUES ('64363773-4c6d-414f-a8bc-987f7a917452', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:34.884000'); +INSERT INTO `system_log` VALUES ('6436f3ba-3e87-4057-81a0-7940369dadc8', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-17 23:50:43.855000'); +INSERT INTO `system_log` VALUES ('6465e428-f585-4d6e-b5d0-a3cfc2d6fbd5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:30:06.124000'); +INSERT INTO `system_log` VALUES ('650487e1-9ebd-4e94-8253-790e1697b0d1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-03 09:43:44.027000'); +INSERT INTO `system_log` VALUES ('659ab2bb-4701-43ed-b4c1-3fa5695a7a20', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:58:46.979000'); +INSERT INTO `system_log` VALUES ('65ae6ee8-23dc-452a-ba58-fc820a2151db', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 13:15:57.298000'); +INSERT INTO `system_log` VALUES ('67a4a7b1-9f84-4838-8401-ac2548c07f4c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:47:11.662000'); +INSERT INTO `system_log` VALUES ('67fd385d-507d-4435-9d35-da18958e4fa6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:19.068000'); +INSERT INTO `system_log` VALUES ('682be452-38f0-4cc4-9164-896316dca4d3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-20 19:58:50.082000'); +INSERT INTO `system_log` VALUES ('6854cf7f-b655-42d1-b978-de6bf51a9c2c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 09:07:37.027000'); +INSERT INTO `system_log` VALUES ('69891b38-ae4d-40ef-b2c1-726ca832b400', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 13:10:27.866000'); +INSERT INTO `system_log` VALUES ('6a44673e-a36a-425c-b503-c28a871778a1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-03 10:08:40.798000'); +INSERT INTO `system_log` VALUES ('6c286a82-56cb-44e8-9eb1-674a82813c62', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 13:10:49.668000'); +INSERT INTO `system_log` VALUES ('6c87eeb5-cae9-4eae-9dea-38cd5366905c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:15:26.756000'); +INSERT INTO `system_log` VALUES ('6d0b10a6-2276-4808-bc2a-ad6f0c0b0a32', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 13:37:00.467000'); +INSERT INTO `system_log` VALUES ('6e723e53-dad9-478d-b065-c949194dfb92', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:43:08.630000'); +INSERT INTO `system_log` VALUES ('6fed4a72-ff29-4577-ba9a-e29b30ba1a91', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:50.646000'); +INSERT INTO `system_log` VALUES ('70c71159-649e-4f30-8f8d-42a673022035', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-15 20:57:46.117000'); +INSERT INTO `system_log` VALUES ('74a9d649-1f7e-492f-9ac9-094049ed79ad', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:40.679000'); +INSERT INTO `system_log` VALUES ('76348164-8a6e-4ad0-b2a8-e1c4a70cc88e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:39.874000'); +INSERT INTO `system_log` VALUES ('77f6fbf3-1ee6-49a6-9f53-4826d8aeb28c', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:39:00.298000'); +INSERT INTO `system_log` VALUES ('786e84ac-4de4-48fb-bd9b-46a21d37a0d0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-23 19:04:25.853000'); +INSERT INTO `system_log` VALUES ('79aee427-15ea-4574-a7d1-9c948a4a1b2a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-16 10:30:22.072000'); +INSERT INTO `system_log` VALUES ('7a9594e6-4253-4635-a283-71d7e2511275', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-15 21:05:20.969000'); +INSERT INTO `system_log` VALUES ('7b09e3e6-3bc9-4449-9e45-1fbf7a0f907f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:06:28.233000'); +INSERT INTO `system_log` VALUES ('7c09323f-f228-47ae-83a3-ed60543f5daa', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2022-12-19 11:21:33.793000'); +INSERT INTO `system_log` VALUES ('7d090768-56bd-43dd-86f6-d3471cceb119', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:02:24.215000'); +INSERT INTO `system_log` VALUES ('7dad0595-6982-4107-8fba-ef417819eea2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-03 10:08:03.622000'); +INSERT INTO `system_log` VALUES ('7ead999f-2bb6-4777-a9f0-99644a9ea474', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:55.620000'); +INSERT INTO `system_log` VALUES ('7ed3b25d-1449-4c68-ae5a-bddd83857afc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-20 19:58:58.630000'); +INSERT INTO `system_log` VALUES ('7f53e3aa-b072-4ed4-b7f2-eb59354d5168', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:15:37.560000'); +INSERT INTO `system_log` VALUES ('7fcb82a4-9c9a-4d0c-a93c-58eeae357c46', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 10:54:05.831000'); +INSERT INTO `system_log` VALUES ('7fdf4747-be83-4646-b225-7fad669c0c5c', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:08:07.869000'); +INSERT INTO `system_log` VALUES ('8038a64c-bbf6-48a8-a656-e2beefd53185', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 14:59:45.220000'); +INSERT INTO `system_log` VALUES ('83fdfa97-140f-4534-9a86-973215a52eee', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-16 10:30:14.195000'); +INSERT INTO `system_log` VALUES ('86b4cef4-6074-4afb-80e6-8676d8916271', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-23 19:03:04.408000'); +INSERT INTO `system_log` VALUES ('893be95c-57e5-4a1a-bebd-884529d29029', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-15 21:05:17.399000'); +INSERT INTO `system_log` VALUES ('8a0fcdca-b5ca-4e17-9f82-af0a89b12a07', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:23:42.019000'); +INSERT INTO `system_log` VALUES ('8ad0809f-e047-44e7-8c99-1df776778bc3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 13:36:49.318000'); +INSERT INTO `system_log` VALUES ('8b23efe5-26f1-4133-8f71-61243943a52b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2023-01-11 09:17:39.950000'); +INSERT INTO `system_log` VALUES ('8bf9f105-3c7b-43f6-8cee-936686aef2f4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 11:43:15.416000'); +INSERT INTO `system_log` VALUES ('8cb42f3a-3376-462f-8e69-e2f483f72688', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 10:57:51.084000'); +INSERT INTO `system_log` VALUES ('8f42a647-9572-494c-abe7-6906c8717939', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:34:50.316000'); +INSERT INTO `system_log` VALUES ('8fe2ae7e-d764-45b0-81e0-1507c7e62c1e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:16:40.527000'); +INSERT INTO `system_log` VALUES ('9069d579-6f6f-410e-9c82-d74dfd739180', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:51.133000'); +INSERT INTO `system_log` VALUES ('907a9417-2052-407a-adb2-c184b9d66da2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 11:07:38.462000'); +INSERT INTO `system_log` VALUES ('9156a955-22d7-4ba0-af7b-3d79fd3927f2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 20:23:53.290000'); +INSERT INTO `system_log` VALUES ('9194a827-5bd5-4296-88a3-752ca0b03093', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:36:12.037000'); +INSERT INTO `system_log` VALUES ('91b204bb-9e03-4493-9dbb-943659814711', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:35:52.417000'); +INSERT INTO `system_log` VALUES ('920f8cac-a0d2-4e1f-a913-32c6e8f3d8bb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 13:15:14.006000'); +INSERT INTO `system_log` VALUES ('92a25ba9-d9c2-4a4a-ba29-4d4c8f745763', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:48:13.998000'); +INSERT INTO `system_log` VALUES ('92cd14b2-9a0a-430e-b229-9278ca41ce4e', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 12:15:53.834000'); +INSERT INTO `system_log` VALUES ('93077e83-1df2-40dc-bce6-d4bfdaa94c3a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:12:26.295000'); +INSERT INTO `system_log` VALUES ('94fab12f-022a-4ccb-8705-12d05ac5dae0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-20 19:55:14.452000'); +INSERT INTO `system_log` VALUES ('961d0565-8675-4803-920f-a580db031058', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:02:56.340000'); +INSERT INTO `system_log` VALUES ('96a31182-3619-4107-a3ef-6dab83e3dc4b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-20 19:58:57.415000'); +INSERT INTO `system_log` VALUES ('975d858f-3a87-4686-a15d-07d6c62682f2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:35:39.755000'); +INSERT INTO `system_log` VALUES ('983bc0be-dec6-4e1d-8174-475bb1723888', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:05:37.280000'); +INSERT INTO `system_log` VALUES ('99a19272-3632-483e-916e-a3071f039e5a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 11:07:17.982000'); +INSERT INTO `system_log` VALUES ('9a27645b-2fbe-4a22-861b-8b42abdadf8f', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2022-12-19 13:01:51.330000'); +INSERT INTO `system_log` VALUES ('9a4c07d8-0603-44fc-a9fa-0a0f42aa571a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:51:01.697000'); +INSERT INTO `system_log` VALUES ('9a6ef09a-5829-4e3e-816d-eb0da70c8dd2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:27:04.690000'); +INSERT INTO `system_log` VALUES ('9b93a8a0-0632-477f-a813-9d733d1969a6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-23 19:02:10.634000'); +INSERT INTO `system_log` VALUES ('9eeb400b-5c5c-46fc-bbf3-f7e972102b27', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 15:31:40.953000'); +INSERT INTO `system_log` VALUES ('9f0ee714-b4c8-43e1-a24c-8b5cb89486a4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:10:56.827000'); +INSERT INTO `system_log` VALUES ('9fe98ad9-afb1-4c6b-94d6-a2447775dead', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:27:18.076000'); +INSERT INTO `system_log` VALUES ('a080b8cf-3955-4bb8-aa26-e6e14205a407', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:49.249000'); +INSERT INTO `system_log` VALUES ('a1f934fc-b5fd-440b-b832-57e789fa9544', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2022-12-19 13:10:56.237000'); +INSERT INTO `system_log` VALUES ('a2a80346-678e-4377-a641-4efe2e829456', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 09:14:37.816000'); +INSERT INTO `system_log` VALUES ('a2d39fa7-a475-4303-ba53-8cd06f8c6128', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 10:16:42.288000'); +INSERT INTO `system_log` VALUES ('a4b30a61-3b96-404f-9995-0fa10fddd7c3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-23 19:04:07.491000'); +INSERT INTO `system_log` VALUES ('a4d25292-4066-4de2-a304-8ce408680a20', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:25.646000'); +INSERT INTO `system_log` VALUES ('a4d6dcf6-e8ed-4e29-be3f-d29aa6c9a02c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:24:31.526000'); +INSERT INTO `system_log` VALUES ('a6a15587-91bc-451c-92ae-4a15c36b7953', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 11:36:37.569000'); +INSERT INTO `system_log` VALUES ('aa10a416-6fe0-4cc1-b384-acfbe85099e5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:27:05.967000'); +INSERT INTO `system_log` VALUES ('ac7b9a51-2633-4e2a-848b-39a7ffa639c4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:50:50.836000'); +INSERT INTO `system_log` VALUES ('acae46ef-21f9-4e1b-a20d-985f43836ddf', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-15 21:05:15.738000'); +INSERT INTO `system_log` VALUES ('acf10e5b-e918-4459-a191-6283b1136def', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:02:18.813000'); +INSERT INTO `system_log` VALUES ('ae48bcfe-f732-486a-b886-a304bb30a430', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:28.718000'); +INSERT INTO `system_log` VALUES ('ae5354a5-bf35-4c15-b6b4-896dfb515c61', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 11:38:16.825000'); +INSERT INTO `system_log` VALUES ('aea1a092-2193-4c38-8861-c03f8e4e8216', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-20 19:56:39.602000'); +INSERT INTO `system_log` VALUES ('aebe72ec-aedc-42ae-965e-31ceba81c001', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-20 19:56:45.686000'); +INSERT INTO `system_log` VALUES ('b1959e7e-f77c-4a44-b6a4-70eee569b40c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-19 13:10:49.669000'); +INSERT INTO `system_log` VALUES ('b21cb4ac-1485-44f1-8f1f-513477be7e6e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:13.126000'); +INSERT INTO `system_log` VALUES ('b46e810f-8800-4ffd-bb8d-9990d86d7313', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 13:36:49.334000'); +INSERT INTO `system_log` VALUES ('b49e7dd8-0a55-4562-94ee-c61b4879bab0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 13:39:01.079000'); +INSERT INTO `system_log` VALUES ('b54c88b0-8e89-4853-94f4-a0815ad6f63d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:12:36.876000'); +INSERT INTO `system_log` VALUES ('b5899d57-264f-4067-911c-c4e79ef37371', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:15:47.080000'); +INSERT INTO `system_log` VALUES ('b5a946a4-03dc-439f-a16d-859f915b6987', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2023-01-11 09:18:13.365000'); +INSERT INTO `system_log` VALUES ('b5bd82c2-75fd-4fb4-9317-a83277128065', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 21:45:55.213000'); +INSERT INTO `system_log` VALUES ('b5f03c87-36d0-4004-9aef-478fbba5a260', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 12:15:59.043000'); +INSERT INTO `system_log` VALUES ('b662c241-e5db-464d-a948-e4245c6ce083', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-23 19:07:50.563000'); +INSERT INTO `system_log` VALUES ('b693249a-a9ce-4cdc-9653-ba360eaabd78', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 09:23:13.852000'); +INSERT INTO `system_log` VALUES ('b7869919-a1cb-43b3-a7fc-b2d11d24e4e8', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:24:33.010000'); +INSERT INTO `system_log` VALUES ('b7a9aaa0-2e3b-45d0-a2ef-48398525b07e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:21.420000'); +INSERT INTO `system_log` VALUES ('b8584d43-49bc-407b-95ab-29019c8ae0be', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:09:55.173000'); +INSERT INTO `system_log` VALUES ('b995dca3-af0a-491e-91f1-00dca443bdbd', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:19:01.204000'); +INSERT INTO `system_log` VALUES ('b9a08e4c-6adf-456b-94e9-66f5b9dd4cf1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:52.725000'); +INSERT INTO `system_log` VALUES ('ba8fa00e-b723-4b5c-bc01-45261acfcace', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 12:16:01.263000'); +INSERT INTO `system_log` VALUES ('bb2fa1a6-99de-4dff-b8d5-fcf2c7b1c680', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:41.846000'); +INSERT INTO `system_log` VALUES ('bbe158bc-6bc0-4391-b6c2-74e36a08bab6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 09:23:32.810000'); +INSERT INTO `system_log` VALUES ('be7f302c-0afa-42e2-b494-fdd121f29aa5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2023-01-11 13:36:02.702000'); +INSERT INTO `system_log` VALUES ('bec40a33-d70c-45d2-8e0a-171455300ef7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:07:47.344000'); +INSERT INTO `system_log` VALUES ('bfae97c7-910f-404f-823d-007e43605791', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 13:15:23.431000'); +INSERT INTO `system_log` VALUES ('c0011144-85b6-49a6-a707-fb28b89011e5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:18:40.462000'); +INSERT INTO `system_log` VALUES ('c01126eb-6483-40a3-b0b3-4d8afcc3b523', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:20:42.434000'); +INSERT INTO `system_log` VALUES ('c0e32b77-cbd3-441b-af76-214ba13c26a1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 10:16:43.005000'); +INSERT INTO `system_log` VALUES ('c112bf85-8571-4a3a-a03d-78d4b699ed0d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:45.132000'); +INSERT INTO `system_log` VALUES ('c439893d-461b-4444-a37f-32fb81c753a0', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 12:15:50.547000'); +INSERT INTO `system_log` VALUES ('c5750b02-b5c5-415a-a5e6-0c0f89e5c05c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:06.877000'); +INSERT INTO `system_log` VALUES ('c79a1c79-971f-4503-beee-eb5389465b81', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:43:11.483000'); +INSERT INTO `system_log` VALUES ('c9f1d5e6-c81f-481a-9357-6aed4c2b4b03', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 11:43:16.518000'); +INSERT INTO `system_log` VALUES ('ca2e4cbe-ed37-4880-86a1-08b6bd590ecb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-15 20:57:48.475000'); +INSERT INTO `system_log` VALUES ('ca356a8c-adf6-41d0-bb3d-4441aae6898a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-20 19:59:04.049000'); +INSERT INTO `system_log` VALUES ('cc3b5143-d5de-4bd4-9299-7c0b3ae610a1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:58:49.246000'); +INSERT INTO `system_log` VALUES ('ccae1e6f-71c2-4679-81a1-99a861983a19', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 12:15:56.063000'); +INSERT INTO `system_log` VALUES ('cdec2cb4-f9a3-46c7-9e95-9e723b463511', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-18 20:23:56.306000'); +INSERT INTO `system_log` VALUES ('d00727bf-77c3-477a-a483-1e38b8d68ed4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-03 10:08:57.067000'); +INSERT INTO `system_log` VALUES ('d039b1a1-75b7-4e48-85bc-496666c10657', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:24:43.451000'); +INSERT INTO `system_log` VALUES ('d06758ed-bde9-488b-bf73-88cf825f65ff', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:52.701000'); +INSERT INTO `system_log` VALUES ('d074466a-6d17-4975-a362-72f8637dd92e', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:37:32.690000'); +INSERT INTO `system_log` VALUES ('d098fba7-dcc6-40bd-a8d2-d04cc74892fc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:18:43.342000'); +INSERT INTO `system_log` VALUES ('d0d8832f-c148-467a-97ce-774bce224fb4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:01:29.620000'); +INSERT INTO `system_log` VALUES ('d280225a-faab-4bb4-9057-d746484f2daf', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:58.540000'); +INSERT INTO `system_log` VALUES ('d2ce2cf9-dbe4-4dd2-81a2-cd2303740b50', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-01-11 09:23:24.489000'); +INSERT INTO `system_log` VALUES ('d5118dbd-3df9-4140-afd4-f262f1041790', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:03:06.371000'); +INSERT INTO `system_log` VALUES ('d614c46b-ac37-41a5-bef9-6ca3b363b2d8', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 11:07:38.462000'); +INSERT INTO `system_log` VALUES ('d676cf30-2180-4291-a896-00881e8f8d9b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:27:25.369000'); +INSERT INTO `system_log` VALUES ('d737aa8c-e27b-4cba-978d-2c9dd3906ce6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:47.377000'); +INSERT INTO `system_log` VALUES ('d788bc8b-b552-429d-94cb-5d95791c02ad', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 11:37:41.214000'); +INSERT INTO `system_log` VALUES ('d78a3cda-ab44-4307-b46a-1e7369e44aa7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-03 10:09:01.464000'); +INSERT INTO `system_log` VALUES ('d7c99480-fe37-4514-be69-1ed898a9377f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 12:58:57.135000'); +INSERT INTO `system_log` VALUES ('d8665c91-65be-4234-82aa-5af9c4f8ee48', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:03:05.878000'); +INSERT INTO `system_log` VALUES ('d8ffd447-1fb2-4b25-9e7f-a16d1a9d85f5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:18:36.364000'); +INSERT INTO `system_log` VALUES ('da88eb52-a3df-4ca8-a7e6-b5dba999739e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:49.174000'); +INSERT INTO `system_log` VALUES ('dc565208-c8c1-44b7-b647-8fa566d8767e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 20:24:08.434000'); +INSERT INTO `system_log` VALUES ('dc94727d-7c09-406a-bc11-cc5ee2ee3b05', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2022-12-18 11:30:17.056000'); +INSERT INTO `system_log` VALUES ('dcce1ead-d21c-4010-9059-af8b18b62ffc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-23 19:02:10.646000'); +INSERT INTO `system_log` VALUES ('dcd37ad4-ed5e-403b-8fff-8dfc30c794fa', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:26:42.109000'); +INSERT INTO `system_log` VALUES ('ddb312be-1d75-4e08-bab1-4e700c29d331', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:37.527000'); +INSERT INTO `system_log` VALUES ('ddf23055-61fd-40c7-beff-f29fa9d44feb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:43:17.815000'); +INSERT INTO `system_log` VALUES ('defacdf4-b879-4e9d-ac8c-18fa9bd02529', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-23 19:02:24.992000'); +INSERT INTO `system_log` VALUES ('df6e674e-7473-4872-b0d5-6325ad569ac3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 12:48:10.308000'); +INSERT INTO `system_log` VALUES ('dfdb5b30-f036-42ae-b495-a927b9637e36', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DriverController.save', '驾驶员管理', '2023-01-11 13:38:53.620000'); +INSERT INTO `system_log` VALUES ('e18c284f-4e20-4d39-8091-4d2108a56eb7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:06:02.763000'); +INSERT INTO `system_log` VALUES ('e18f0c0b-6676-4659-a982-7b814ef99fa3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:30.065000'); +INSERT INTO `system_log` VALUES ('e3349316-db5b-4c5b-af92-f41b5e28db6b', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:43:07.470000'); +INSERT INTO `system_log` VALUES ('e38ef3c4-53f7-4d96-a1d3-9df7367fcd14', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 13:15:54.278000'); +INSERT INTO `system_log` VALUES ('e3a8d71f-aa55-4275-9f53-35274a82e042', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:05:28.659000'); +INSERT INTO `system_log` VALUES ('e50a3d2a-2049-41a8-9a36-e54fa8c31fd4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 20:24:05.253000'); +INSERT INTO `system_log` VALUES ('e513ef31-59eb-4619-bcd4-712afba06d7a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:35:52.815000'); +INSERT INTO `system_log` VALUES ('e6529259-ca7e-4d46-8d45-9c2e593eba8c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 11:07:17.996000'); +INSERT INTO `system_log` VALUES ('e69a031f-4631-42cf-b9e3-c703d08dd805', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-19 11:43:15.469000'); +INSERT INTO `system_log` VALUES ('e6a5640d-bd85-4f30-9f91-4f7346e8f103', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 15:11:29.087000'); +INSERT INTO `system_log` VALUES ('e6dacf0e-74ef-4225-8b08-ca90472b70fb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:58:50.077000'); +INSERT INTO `system_log` VALUES ('e74d70e9-0616-43d8-8755-aad756afaaf7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:02:42.269000'); +INSERT INTO `system_log` VALUES ('e770f5bd-ba7a-40c9-9c03-69bfa3dc0ccf', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:29.007000'); +INSERT INTO `system_log` VALUES ('e870ae71-4786-4ade-9af3-887f358ff5ea', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 13:38:02.871000'); +INSERT INTO `system_log` VALUES ('e90d3665-69b1-47b4-821a-408eda62e406', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:56.723000'); +INSERT INTO `system_log` VALUES ('e92ca93b-0c85-4c95-bd87-d5c85598fb32', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:27:04.690000'); +INSERT INTO `system_log` VALUES ('ed994aa5-7da3-4ac7-a85f-3cd8ecf0ee5a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:26:39.927000'); +INSERT INTO `system_log` VALUES ('ef9af503-7e1b-41ec-a28c-851aa04ae3b5', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 12:15:50.549000'); +INSERT INTO `system_log` VALUES ('efe97256-1479-4975-ab47-5a31755a90ee', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2023-01-11 11:05:14.950000'); +INSERT INTO `system_log` VALUES ('f040fb54-7e88-4910-936b-3b15a8d6ccc3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:11:05.506000'); +INSERT INTO `system_log` VALUES ('f0e18f59-b4b6-4534-b483-115dce75c059', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 14:59:47.496000'); +INSERT INTO `system_log` VALUES ('f1b64160-7c16-4cd7-b2d9-51fcf49abdf4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:19:19.949000'); +INSERT INTO `system_log` VALUES ('f1c113e1-dd54-4e04-b356-cd93e6803200', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:43:10.861000'); +INSERT INTO `system_log` VALUES ('f3947120-4e96-4978-8ab8-6ea413d492a8', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2023-01-11 11:05:03.463000'); +INSERT INTO `system_log` VALUES ('f480774f-e25f-4da2-9fa0-9c53fcc98f8c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 10:16:29.688000'); +INSERT INTO `system_log` VALUES ('f4f63cb7-2a5f-452a-80aa-e40377a80102', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 12:16:01.263000'); +INSERT INTO `system_log` VALUES ('f5c130de-f6cb-4c05-8472-40da8e099e5b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:01:30.544000'); +INSERT INTO `system_log` VALUES ('f6a2f850-c540-4b83-9502-cbcd06131ec9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:05:04.149000'); +INSERT INTO `system_log` VALUES ('f8fb4848-84b4-4307-8341-8bd8fc124834', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 11:21:38.466000'); +INSERT INTO `system_log` VALUES ('f9559e2b-4dd5-46c2-adb5-18968a080cdb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-23 19:07:50.563000'); +INSERT INTO `system_log` VALUES ('f9feefd2-4a32-4175-bb66-19d9ad2a76b5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:10:30.279000'); +INSERT INTO `system_log` VALUES ('fb7041cc-6be3-4d9d-a53d-ef1786a3cb6e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-03 10:08:44.785000'); +INSERT INTO `system_log` VALUES ('fd3a4c5c-b289-4201-8058-8ed4852ae1c9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-20 19:59:00.038000'); +INSERT INTO `system_log` VALUES ('fd639c7f-6e52-4ee0-9ffd-1df0dd87076c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2022-12-19 13:10:58.648000'); +INSERT INTO `system_log` VALUES ('fd64dab2-6374-4cd4-a2de-b2044e820380', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 11:21:31.942000'); +INSERT INTO `system_log` VALUES ('fd64e793-44e0-41f5-86fe-f7525e3cee8e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:30:17.740000'); +INSERT INTO `system_log` VALUES ('fdfe2804-b43d-4a7d-a48e-aa861ba5c284', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:39:20.473000'); +INSERT INTO `system_log` VALUES ('fe3d8c18-e395-4342-86ac-06f79aace322', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-16 10:30:18.971000'); +INSERT INTO `system_log` VALUES ('fe4899d1-55dc-4d8e-9745-9f598d1e21e3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:03:22.603000'); + +-- ---------------------------- +-- Table structure for user +-- ---------------------------- +DROP TABLE IF EXISTS `user`; +CREATE TABLE `user` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `update_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for vehicle +-- ---------------------------- +DROP TABLE IF EXISTS `vehicle`; +CREATE TABLE `vehicle` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `driving` bit(1) NOT NULL, + `number` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of vehicle +-- ---------------------------- +INSERT INTO `vehicle` VALUES ('786fb288-4445-4784-b923-de013fa3892f', '2023-01-11 13:38:19', b'0', '京A0001', '货车'); +INSERT INTO `vehicle` VALUES ('ce33de59-9584-4161-a17e-9046399d14c6', '2022-11-27 12:26:18', b'0', '京A0000', '货车'); + +-- ---------------------------- +-- Table structure for warehouse +-- ---------------------------- +DROP TABLE IF EXISTS `warehouse`; +CREATE TABLE `warehouse` ( + `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + `principle` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of warehouse +-- ---------------------------- +INSERT INTO `warehouse` VALUES ('9f2a2784-e182-4fdf-85e8-c3bde6d539d2', '2022-11-22 14:16:46', 'A号仓库', '杰克'); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/IDEA/账号密码.txt b/IDEA/账号密码.txt new file mode 100644 index 00000000..3d86855b --- /dev/null +++ b/IDEA/账号密码.txt @@ -0,0 +1,10 @@ +打开工具后端:idea +打开工具前端:idea +使用数据库版本:MySQL5.7.X 或者 8.0 +使用Vue版本:NodeJsV14.X +前端访问地址(以前段实际运行为准): localhost:8080 +管理员账号/密码: admin@qq.com admin@qq.com +其他备注说明: +所有邮箱验证码默认都是 123456 + + diff --git a/Logistics.sql b/Logistics.sql new file mode 100644 index 00000000..6b771ce9 --- /dev/null +++ b/Logistics.sql @@ -0,0 +1,908 @@ +/* + Navicat Premium Data Transfer + + Source Server : localhost + Source Server Type : MySQL + Source Server Version : 50736 + Source Host : localhost:3306 + Source Schema : wmsadmin + + Target Server Type : MySQL + Target Server Version : 50736 + File Encoding : 65001 + + Date: 24/02/2023 10:14:20 +*/ + +SET NAMES utf8; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for admin +-- ---------------------------- +DROP TABLE IF EXISTS `admin`; +CREATE TABLE `admin` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `roles` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of admin +-- ---------------------------- +INSERT INTO `admin` VALUES ('12598638-f94f-46af-88e5-b87b40b55bf5', '2023-02-15 21:00:06', 'lop@qq.com', '123456', ''); +INSERT INTO `admin` VALUES ('20b81c11-0881-4f3a-9bfe-3df6c25d5921', '2022-11-28 13:52:15', 'abc@qq.com', 'abc@qq.com', 'ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('37ecf396-cf13-44a6-9715-6d14e8643fb6', '2022-12-18 11:28:21', 'admin@qq.com', 'admin@qq.com', 'ROLE_EMPLOYEE;ROLE_WAREHOUSE;ROLE_SALE;ROLE_COMMODITY;ROLE_ADMIN;ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('38eb6904-785c-4e3a-a386-2dc2b9d92204', '2022-11-27 20:15:04', 'jiegod_8ck@126.com', '123456', 'ROLE_ADMIN;ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('3f33b767-d6cd-4736-9a51-6c1ff27e0663', '2023-02-20 20:00:08', 'lop@qq.com', '123456', 'ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('6462544b-50cc-4638-9f14-c81f63188fc2', '2022-11-29 20:25:48', 'cccccc@qq.com', '123456', 'ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('b20814b6-d955-4563-9164-95415d2450f6', '2022-11-24 23:58:04', '1402014577@qq.com', '123456', 'ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('b2297ef7-fe6e-41da-92a9-030ef30b6daf', '2023-01-11 13:42:38', '123@qq.com', '123@qq.com', 'ROLE_SUPER_ADMIN'); +INSERT INTO `admin` VALUES ('dd5b8e1d-bcae-4063-9781-d587d205cb84', '2023-02-24 09:50:52', 'testUser@qq.com', 'testUser@qq.com', 'ROLE_COMMODITY;ROLE_SALE;ROLE_WAREHOUSE'); +INSERT INTO `admin` VALUES ('e5c6ab74-3aaf-4940-82cb-035ff934fc5f', '2023-02-24 09:50:36', 'code51User@qq.com', 'code51User@qq.com', 'ROLE_SUPER_ADMIN;ROLE_COMMODITY;ROLE_EMPLOYEE;ROLE_SALE;ROLE_WAREHOUSE;ROLE_ADMIN'); + +-- ---------------------------- +-- Table structure for code +-- ---------------------------- +DROP TABLE IF EXISTS `code`; +CREATE TABLE `code` ( + `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `exp` bigint(20) NOT NULL, + `value` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`email`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of code +-- ---------------------------- +INSERT INTO `code` VALUES ('1402014577@qq.com', 1669615938121, '276237'); +INSERT INTO `code` VALUES ('cccccc@qq.com', 1669725702342, '858227'); + +-- ---------------------------- +-- Table structure for commodity +-- ---------------------------- +DROP TABLE IF EXISTS `commodity`; +CREATE TABLE `commodity` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `count` int(11) NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `price` double NOT NULL, + `update_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of commodity +-- ---------------------------- +INSERT INTO `commodity` VALUES ('14864e86-c858-4027-b561-e484e70cd2fa', 50, '2023-02-24 09:49:24', '盒马面包', '盒马面包', 9.99, NULL); +INSERT INTO `commodity` VALUES ('5b8441e5-5627-49eb-98ff-a0522253cbad', 49, '2023-02-24 09:41:47', '生鲜活鱼', '生鲜活鱼', 200, NULL); +INSERT INTO `commodity` VALUES ('9794a6a5-5aef-470d-9835-3fcea8b1031e', 9, '2023-02-24 09:42:04', '鲜花', '鲜花', 9.9, NULL); + +-- ---------------------------- +-- Table structure for company +-- ---------------------------- +DROP TABLE IF EXISTS `company`; +CREATE TABLE `company` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of company +-- ---------------------------- + +-- ---------------------------- +-- Table structure for distribution +-- ---------------------------- +DROP TABLE IF EXISTS `distribution`; +CREATE TABLE `distribution` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `care` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `did` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `driver` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `status` int(11) NULL DEFAULT NULL, + `time` datetime(6) NULL DEFAULT NULL, + `urgent` bit(1) NOT NULL, + `vid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of distribution +-- ---------------------------- +INSERT INTO `distribution` VALUES ('01c8fc12-11d6-4388-baf8-7de7c09070da', '111', '冰柜冷藏, 注意易碎, 防止高温, ', '7883bd7d-27e9-42e2-8977-2d41504a31b4', '张晓', '京A0010', '111', 1, '2023-02-25 09:53:06.000000', b'1', '751ecedf-2211-416f-9fc8-6c797ff51d16'); +INSERT INTO `distribution` VALUES ('3036e2cf-28db-4d4c-b52d-5f590540b74b', 'sad', '冰柜冷藏, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', 'sad', 2, '2022-11-09 13:09:23.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); +INSERT INTO `distribution` VALUES ('77a6b6b9-682c-4aba-926b-6d7645895037', '2343', '注意易碎, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', '234', 1, '2022-12-08 12:58:27.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); +INSERT INTO `distribution` VALUES ('7c6c52fd-abbe-4505-a7c0-ea12f68ed6cb', 'asd345', '冰柜冷藏, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', 'sd435345', 1, '2022-12-07 13:01:39.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); +INSERT INTO `distribution` VALUES ('7ec1e684-186c-4ed7-8f91-e2a2600776bf', 'code51.cn', '冰柜冷藏, 防止高温, 注意易碎, ', '7883bd7d-27e9-42e2-8977-2d41504a31b4', '张晓', '京A0010', '15615615611', 2, '2023-02-24 09:46:48.000000', b'1', '751ecedf-2211-416f-9fc8-6c797ff51d16'); +INSERT INTO `distribution` VALUES ('ae587e56-1d74-4edf-9707-ef7235eebd91', '324234', '冰柜冷藏, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', '235352', 0, '2022-12-06 12:59:04.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); +INSERT INTO `distribution` VALUES ('ff9bcb29-5e7b-4462-b789-a92576711ef7', 'asd', '冰柜冷藏, ', 'ea3bba9b-cda6-438d-b196-7c81e97b5040', '王五', '京A0000', 'sd', 1, '2022-12-07 13:01:39.000000', b'1', 'ce33de59-9584-4161-a17e-9046399d14c6'); + +-- ---------------------------- +-- Table structure for driver +-- ---------------------------- +DROP TABLE IF EXISTS `driver`; +CREATE TABLE `driver` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `driving` bit(1) NOT NULL, + `gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `id_card` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `license` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `score` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of driver +-- ---------------------------- +INSERT INTO `driver` VALUES ('7883bd7d-27e9-42e2-8977-2d41504a31b4', '源码乐园专注提供优质源码,访问地址http://code51.cn', '2023-02-24 09:46:35', b'0', '男性', '123456789112345678', '苏A-12345', '张晓', '15915915911', '12', NULL); +INSERT INTO `driver` VALUES ('a4a88363-a438-4847-a4bf-b25e6fa5ae6e', 'xxx', '2023-01-11 13:38:53', b'0', '男性', '423423424', 'xxx', '李四', '13793242563', '12', NULL); +INSERT INTO `driver` VALUES ('ea3bba9b-cda6-438d-b196-7c81e97b5040', '', '2022-11-27 12:26:46', b'0', '男性', '4412242003423345534', '34', '王五', '231325345345', '12', NULL); + +-- ---------------------------- +-- Table structure for employee +-- ---------------------------- +DROP TABLE IF EXISTS `employee`; +CREATE TABLE `employee` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `department` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `id_card` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of employee +-- ---------------------------- +INSERT INTO `employee` VALUES ('f97bab9c-9635-4775-b118-558da8120c2f', 'code51.cn', '2023-02-24 09:42:47', 'A号仓库', '男性', '123456789012345678', '张小白', '15615615611', NULL); + +-- ---------------------------- +-- Table structure for inventory +-- ---------------------------- +DROP TABLE IF EXISTS `inventory`; +CREATE TABLE `inventory` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `cid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `count` int(11) NULL DEFAULT NULL, + `location` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `wid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of inventory +-- ---------------------------- +INSERT INTO `inventory` VALUES ('0ff7a831-0824-428d-b140-ab41de52d5a4', 'eda4215d-82d8-4a08-a3f3-981b19274006', 70, NULL, 'Apple', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory` VALUES ('101d78ad-9169-4e0a-ab3f-09ef25ccf5cb', '9794a6a5-5aef-470d-9835-3fcea8b1031e', 9, NULL, '鲜花', '7159a7e3-32c8-4c29-9608-039472ae47ac'); +INSERT INTO `inventory` VALUES ('1eb35792-fd0e-4ff4-91a6-efac129731cc', '14864e86-c858-4027-b561-e484e70cd2fa', 50, NULL, '盒马面包', '7159a7e3-32c8-4c29-9608-039472ae47ac'); +INSERT INTO `inventory` VALUES ('3c6f0c42-25e8-4ccb-b30a-2622d9740c87', '52fdac99-f224-469e-8af8-ed49c166bb23', 20, NULL, 'HUWAI MATE 30 Pro', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory` VALUES ('4dde7763-e5f1-41bd-a536-ac6b8a2191e1', '5b8441e5-5627-49eb-98ff-a0522253cbad', 49, NULL, '生鲜活鱼', '7159a7e3-32c8-4c29-9608-039472ae47ac'); +INSERT INTO `inventory` VALUES ('ca7f8e97-1edf-4fc8-b9a1-783a7d053131', '5fcb392b-39aa-4381-b5ad-b1ccd8d5b74e', 20081, NULL, 'Mac', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory` VALUES ('d9afc86f-a782-4d00-9300-78484f72c117', '2283b0a2-5e0b-4c1e-b651-d2e3b51b87ee', 80, NULL, '手机支架', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory` VALUES ('e8e63bfa-be44-4cb8-abe3-0b6baf3159fa', 'b3a8f5a2-2dac-4194-b806-687b7f08e82f', 50, NULL, '鼠标', '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); + +-- ---------------------------- +-- Table structure for inventory_record +-- ---------------------------- +DROP TABLE IF EXISTS `inventory_record`; +CREATE TABLE `inventory_record` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `cid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `count` int(11) NULL DEFAULT NULL, + `create_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `type` int(11) NULL DEFAULT NULL, + `wid` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of inventory_record +-- ---------------------------- +INSERT INTO `inventory_record` VALUES ('0327e497-6349-4a33-816e-38f680bd48f4', 'b3a8f5a2-2dac-4194-b806-687b7f08e82f', 100, '2023-01-11 13:36:27', 'xxx', '鼠标', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('0ea21216-a91c-43ff-a785-84df4bd602dd', '9794a6a5-5aef-470d-9835-3fcea8b1031e', 10, '2023-02-24 09:49:49', '源码乐园专注提供优质源码,访问地址http://code51.cn', '鲜花', 1, '7159a7e3-32c8-4c29-9608-039472ae47ac'); +INSERT INTO `inventory_record` VALUES ('2c141734-d0d0-4f4e-bf66-ae60667f0709', 'eda4215d-82d8-4a08-a3f3-981b19274006', 20, '2022-11-25 00:01:09', 'ss', 'Apple', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('33b71330-d570-4e3c-8f1d-c66dbd13843d', '5b8441e5-5627-49eb-98ff-a0522253cbad', 1, '2023-02-24 09:43:33', '生鲜活鱼', '生鲜活鱼', -1, '7159a7e3-32c8-4c29-9608-039472ae47ac'); +INSERT INTO `inventory_record` VALUES ('4197fbfb-78a5-4cae-b825-955099da1943', '52fdac99-f224-469e-8af8-ed49c166bb23', 20, '2022-11-22 14:16:57', '', 'HUWAI MATE 30 Pro', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('51f8cee5-a238-41dc-b031-40b05cd83abf', '2283b0a2-5e0b-4c1e-b651-d2e3b51b87ee', 100, '2023-01-11 11:06:12', 'xxxxx', '手机支架', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('6ff4d4dc-326c-4fd3-a782-06b799f9931a', '5fcb392b-39aa-4381-b5ad-b1ccd8d5b74e', 21312, '2022-12-02 20:36:52', '213', 'Mac', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('972f09c1-258e-459d-b19f-5ea7f773b7e8', '5b8441e5-5627-49eb-98ff-a0522253cbad', 50, '2023-02-24 09:43:24', '生鲜活鱼', '生鲜活鱼', 1, '7159a7e3-32c8-4c29-9608-039472ae47ac'); +INSERT INTO `inventory_record` VALUES ('b1bdf63a-3c77-45b6-8841-8d149986f709', '5fcb392b-39aa-4381-b5ad-b1ccd8d5b74e', 1231, '2022-12-02 20:37:18', '123', 'Mac', -1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('b34133c3-2192-43a1-900d-fabc68ff3eed', '9794a6a5-5aef-470d-9835-3fcea8b1031e', 1, '2023-02-24 09:49:58', '源码乐园专注提供优质源码,访问地址http://code51.cn', '鲜花', -1, '7159a7e3-32c8-4c29-9608-039472ae47ac'); +INSERT INTO `inventory_record` VALUES ('b49e8ba9-30c8-4794-ab1f-c807c5dbc8c2', '2283b0a2-5e0b-4c1e-b651-d2e3b51b87ee', 20, '2023-01-11 11:08:25', 'xxxx', '手机支架', -1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('e3f78f05-a309-456a-a93f-83f5b72197c5', '14864e86-c858-4027-b561-e484e70cd2fa', 50, '2023-02-24 09:49:39', '源码乐园专注提供优质源码,访问地址http://code51.cn', '盒马面包', 1, '7159a7e3-32c8-4c29-9608-039472ae47ac'); +INSERT INTO `inventory_record` VALUES ('e99dd646-bbd0-42d9-a315-72d081af8544', 'b3a8f5a2-2dac-4194-b806-687b7f08e82f', 50, '2023-01-11 13:39:15', '50', '鼠标', -1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); +INSERT INTO `inventory_record` VALUES ('fa51e39c-f210-4bcf-928f-e1036c6bdffb', 'eda4215d-82d8-4a08-a3f3-981b19274006', 50, '2023-01-11 09:27:00', '入库苹果手机', 'Apple', 1, '9f2a2784-e182-4fdf-85e8-c3bde6d539d2'); + +-- ---------------------------- +-- Table structure for login_log +-- ---------------------------- +DROP TABLE IF EXISTS `login_log`; +CREATE TABLE `login_log` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `browser` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `date` datetime(6) NULL DEFAULT NULL, + `email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `status` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of login_log +-- ---------------------------- +INSERT INTO `login_log` VALUES ('121ae1ef-be5d-443a-b1de-6578302d9934', 'Chrome', '2022-12-06 15:05:58.830000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('1af75d04-fca0-49a1-89d7-95aa9212a24d', 'Chrome', '2022-12-17 23:15:17.620000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('1cd90c0f-8b99-40b9-9778-e667c30d9bbf', 'Chrome', '2022-12-18 11:28:31.718000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('36b25d1b-ba49-4673-abd0-16a136930305', 'Chrome', '2022-12-14 19:56:04.265000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('376c5fb8-073d-49a3-9693-2b88d089fc31', 'Chrome', '2023-02-24 09:52:32.864000', 'code51User@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('3f9b2ecf-fac0-4f52-aa7f-0a202f09a841', 'Chrome', '2022-12-19 13:10:24.253000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('40b51d68-749e-4859-b72f-45fc635f9d0a', 'Chrome', '2022-12-13 12:00:23.181000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('4c3fe589-07c2-4003-b463-dfd5f96d6722', 'Chrome', '2023-02-03 10:08:02.093000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('5119980b-d064-42be-9956-1207572fffe5', 'Chrome', '2023-02-24 09:55:46.970000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('6cbe1050-6f2b-4b70-b761-e7997e01a9dc', 'Chrome', '2023-01-11 13:34:48.773000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('6fb70146-8272-49c6-bc19-81242061557b', 'Chrome', '2023-02-23 11:17:18.880000', 'testUser@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('7803a14a-e261-480d-ae56-1d2584423e86', 'Chrome', '2023-02-24 09:37:02.360000', 'testUser@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('85301f24-d3e7-4349-8d2b-27c3ac3ee0d2', 'Chrome', '2022-12-13 14:26:11.472000', 'abc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('879f7917-8182-4b98-94d3-081a9497e89b', 'Chrome', '2022-12-18 11:27:24.102000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('8915ba3f-74dc-434b-af25-cf07dac74ded', 'Chrome', '2022-12-12 23:37:24.703000', 'admin@qq.com', '127.0.0.1', 0); +INSERT INTO `login_log` VALUES ('899f8c58-0d5b-46e0-a784-1c3f448719e7', 'Chrome', '2022-12-17 23:47:52.145000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('8d46124b-548e-4f8c-8719-56cf3226c55b', 'Chrome', '2022-12-18 17:09:53.910000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('917934f4-9f8e-48aa-b59e-d174248ed7b6', 'Chrome', '2023-02-16 10:30:12.742000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('93467357-7699-42f2-957b-a0a1a4cdc13d', 'Chrome', '2022-12-06 15:34:35.701000', 'adc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('93b213c5-e2ec-4558-af3e-12b2bc8f5217', 'Chrome', '2022-12-14 17:51:18.412000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('947b62e7-aeb1-46c3-9b0b-8e257cc72aac', 'Chrome', '2023-01-11 10:15:23.854000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('9482f3dd-7e8a-444b-ae95-596076056592', 'Chrome', '2022-12-12 23:37:31.175000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('97140f13-80cc-4200-ac4e-e8e39290ca00', 'Chrome', '2023-02-24 09:37:52.029000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('97db4f45-e842-4822-9410-54fb04bfb042', 'Chrome', '2022-12-17 11:47:49.852000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('9961cc66-63ad-47c6-9c1e-c81cb08ed949', 'Chrome', '2023-02-15 20:57:44.695000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('9d827736-01fd-4d3e-b971-4554944c9356', 'Chrome', '2022-12-17 23:06:03.771000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('a149603d-ac88-4b85-a860-188036776615', 'Chrome', '2023-01-11 13:43:06.172000', '123@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('a222e803-e1ba-4706-a9c4-b3abca12a8b9', 'Chrome', '2023-02-23 11:11:14.330000', '123@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('a82f5725-da5d-49b3-b7b5-90b544ae1296', 'Chrome', '2023-01-11 09:22:38.737000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('b30b9c6f-251b-49a1-9835-c8536f5c23bb', 'Chrome', '2022-12-12 23:36:42.313000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('b965a1cb-a354-41db-8099-b217505c4dc4', 'Chrome', '2022-12-06 15:10:23.878000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('c1f7f2e3-6355-4c91-91f2-58cacae7e463', 'Chrome', '2023-01-11 09:10:50.767000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('c7e666b4-bdac-45e8-8731-05f3274f7787', 'Chrome', '2022-12-14 17:37:48.504000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('ca38e16e-ba6f-45e7-8a46-fb78abbbf9cc', 'Chrome', '2023-02-03 09:43:42.628000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('cbf4e04f-2d40-4384-87dd-7767ae103c6b', 'Chrome', '2022-12-06 15:09:47.524000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('cc34263b-7082-4e24-805f-947d289c3c61', 'Chrome', '2023-02-20 19:50:49.392000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('cc6214d2-ecb5-47d3-906d-c9753c49de0e', 'Chrome', '2023-02-24 09:40:11.920000', 'code51User@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('d55f21f4-01e6-45a5-abb9-a9d61de1f4da', 'Chrome', '2023-02-20 19:50:41.017000', 'admin@qq.com', '127.0.0.1', 0); +INSERT INTO `login_log` VALUES ('d629f3ce-1b09-44b7-9382-0c4959617b50', 'Chrome', '2023-02-24 09:51:17.260000', 'testUser@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('d87aea36-3cde-4f80-b042-ceae8a6c398f', 'Chrome', '2023-02-24 09:40:33.249000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('e1a5b794-2f16-4bf3-8db1-924755326af0', 'Chrome', '2022-12-17 23:33:24.419000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('e6678543-7f24-4c3f-ba66-96bf97f83243', 'Chrome', '2022-12-06 15:31:35.868000', 'adc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('ea676457-0dde-4e7b-8fec-e01837c12333', 'Chrome', '2023-01-11 09:20:22.825000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('eaa7939a-833a-487e-81c9-10ad128f1d93', 'Chrome', '2022-12-02 20:27:24.135000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('eb531c48-ea7b-4ef3-9517-1224c26f62e8', 'Chrome', '2022-12-18 11:37:31.447000', 'abc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('f32bc9de-3d76-4db9-8d71-96d6ef145dca', 'Chrome', '2022-12-12 13:54:11.044000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('f66bb224-49cc-46e7-b766-bd25406e2d20', 'Chrome', '2023-02-24 09:34:46.866000', 'testUser@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('f719c3e7-1547-43ee-8416-a9939c504f6f', 'Chrome', '2022-12-13 14:25:14.960000', 'jack@qq.com', '127.0.0.1', 0); +INSERT INTO `login_log` VALUES ('f8384696-b37a-4f1b-9456-1f224427cf25', 'Chrome', '2022-12-18 10:54:04.371000', 'admin@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('f97fd7af-5a59-42ad-bbfb-b5fd065c0c1f', 'Chrome', '2022-12-18 11:28:02.712000', 'abc@qq.com', '127.0.0.1', 1); +INSERT INTO `login_log` VALUES ('fc5588a9-287c-41e7-9adc-36c925d74418', 'Chrome', '2022-12-12 23:37:20.666000', 'admin@qq.com', '127.0.0.1', 0); +INSERT INTO `login_log` VALUES ('fe4e4ea1-41af-406e-b246-2e1e48eb045d', 'Chrome', '2023-01-11 11:04:37.010000', 'admin@qq.com', '127.0.0.1', 1); + +-- ---------------------------- +-- Table structure for sale +-- ---------------------------- +DROP TABLE IF EXISTS `sale`; +CREATE TABLE `sale` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `commodity` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `company` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `count` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `create_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `pay` bit(1) NOT NULL, + `phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `price` double NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of sale +-- ---------------------------- +INSERT INTO `sale` VALUES ('0da2a4b7-208d-4c1d-bdd2-8966590f46c5', 'HUWAI MATE 30 Pro', '2', '500', '2022-12-13 14:23:44', 'ccc', '2342', b'1', '232423', 2000000); +INSERT INTO `sale` VALUES ('1307750a-78eb-4b07-8fb7-5b75bb3c6dc9', '手机支架', '中兴', '50', '2023-01-11 11:07:12', 'xxx', '234234', b'1', '213123', 499.5); +INSERT INTO `sale` VALUES ('16318677-a072-4924-b2cd-684216f9e549', '生鲜活鱼', '源码乐园公司', '1', '2023-02-24 09:44:41', '测试开票', '1234567869', b'1', '15615615611', 200); +INSERT INTO `sale` VALUES ('38214342-a785-4929-9208-94762c16a7d0', 'Apple', '小米', '20', '2023-01-11 10:15:35', 'xxx', '428354352', b'1', '13789253421', 800000); +INSERT INTO `sale` VALUES ('b97a82bf-6aa8-47a7-a3a6-03e0df570038', '鼠标', '亚马逊', '50', '2023-01-11 13:37:50', '2341234', '342342', b'1', '214234', 499.5); +INSERT INTO `sale` VALUES ('bbcb2f8d-9ab4-4b6b-b0ff-1edae383c7a5', 'HUWAI MATE 30 Pro', '华为', '50', '2023-01-11 10:11:07', '234', '2134', b'1', '12332542342', 200000); + +-- ---------------------------- +-- Table structure for system_log +-- ---------------------------- +DROP TABLE IF EXISTS `system_log`; +CREATE TABLE `system_log` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `account` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `busincess_type` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'LTD', + `ip` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `method` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `module` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `time` datetime(6) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of system_log +-- ---------------------------- +INSERT INTO `system_log` VALUES ('00768f97-da2c-46e2-b9cf-acd69767c7da', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:48:42.634000'); +INSERT INTO `system_log` VALUES ('00e04a9a-4a71-445b-9afe-7397f2bfce05', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:11.648000'); +INSERT INTO `system_log` VALUES ('0205e3a3-d2e9-4298-8481-45863e98d285', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:42:57.829000'); +INSERT INTO `system_log` VALUES ('022ec005-f15b-4a14-81d1-375bbad1bbe2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 14:59:33.348000'); +INSERT INTO `system_log` VALUES ('031ab444-46a8-448a-85cf-9b7033987bbc', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:03:01.678000'); +INSERT INTO `system_log` VALUES ('04c2ea07-217e-4742-bc5b-dfc707ab0e27', 'testUser@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.CommodityController.delete', '商品管理', '2023-02-24 09:36:10.009000'); +INSERT INTO `system_log` VALUES ('04ce3b48-3532-4ea3-8622-92c918afc5aa', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:50:59.325000'); +INSERT INTO `system_log` VALUES ('0657c23e-87ce-499d-a5bc-d4a42f1a62b9', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:42:05.289000'); +INSERT INTO `system_log` VALUES ('06f52601-980b-4f51-97c4-e88843dbf31a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:24:27.359000'); +INSERT INTO `system_log` VALUES ('07030b17-920b-45fe-a459-69559742a66d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 13:38:08.920000'); +INSERT INTO `system_log` VALUES ('0711615f-f8b1-4d8c-b0c5-72b08a90e51b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 11:08:04.405000'); +INSERT INTO `system_log` VALUES ('07824ae3-73fd-4045-b50c-28c949d35807', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:56:46.374000'); +INSERT INTO `system_log` VALUES ('0822cab7-b2af-4a45-b220-09df5f00dfe9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:56:08.374000'); +INSERT INTO `system_log` VALUES ('083252f8-81e1-472f-b6e5-f4adce4e5e3b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:11:05.517000'); +INSERT INTO `system_log` VALUES ('0877caa9-0be0-4065-beb7-b9b16976a0b7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 21:57:03.526000'); +INSERT INTO `system_log` VALUES ('088be4cc-6648-4433-bd66-bd17c5a593d1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:37:08.319000'); +INSERT INTO `system_log` VALUES ('08b90e2a-5c0f-4615-a46f-4ba979af1efe', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-23 11:11:18.980000'); +INSERT INTO `system_log` VALUES ('09ee1842-610c-4ead-800c-b08138eff2c6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:49.204000'); +INSERT INTO `system_log` VALUES ('0a2cb900-7f72-4dd6-83dc-a7c6a7cb35b0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:59:53.669000'); +INSERT INTO `system_log` VALUES ('0a3e9653-fddd-46cb-b120-7189745e9023', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-16 10:30:22.900000'); +INSERT INTO `system_log` VALUES ('0a7dc808-dbc9-4576-8010-d4234d12d6f8', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:09:28.018000'); +INSERT INTO `system_log` VALUES ('0bbd0884-5c14-446a-924f-4da8dec0cf3c', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 11:11:21.947000'); +INSERT INTO `system_log` VALUES ('0bc4b096-bdbd-40ec-b86a-dcea41dab3d3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:59:33.136000'); +INSERT INTO `system_log` VALUES ('0c49d9ba-00fc-439e-a122-fc4b750154eb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2022-12-23 19:05:11.634000'); +INSERT INTO `system_log` VALUES ('0ce3f0e8-15f2-4c94-a048-145961601b35', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 10:01:59.674000'); +INSERT INTO `system_log` VALUES ('0d1f0d04-fc68-48cf-955a-385452717ce6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 10:58:59.954000'); +INSERT INTO `system_log` VALUES ('0d479fff-9788-476e-8d63-768db9634208', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:42:21.327000'); +INSERT INTO `system_log` VALUES ('0e127759-729d-4762-8e51-016799b91ea1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:26:11.478000'); +INSERT INTO `system_log` VALUES ('0e6e972a-114c-4b9a-9115-68d70bf8304a', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 12:15:25.465000'); +INSERT INTO `system_log` VALUES ('0e749bc2-ce9d-4ba4-90ae-a4535caef592', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 13:10:57.580000'); +INSERT INTO `system_log` VALUES ('0e795302-350f-4dc7-a08a-b4aa1897cf45', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:56:16.961000'); +INSERT INTO `system_log` VALUES ('0ee45fdb-a1af-4ec9-9dca-3d7da5bf7c3b', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-23 11:11:18.971000'); +INSERT INTO `system_log` VALUES ('104463bf-945d-4724-ba22-8c5b000abb3d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:58:25.970000'); +INSERT INTO `system_log` VALUES ('11a1e510-11e1-406b-b377-4bc0076b538e', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:28:03.896000'); +INSERT INTO `system_log` VALUES ('11a3e607-18ee-41da-bcba-2c8b419eb5d0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:04:38.532000'); +INSERT INTO `system_log` VALUES ('12ba136e-da1c-4e56-93b1-caa50b1ced20', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:41.743000'); +INSERT INTO `system_log` VALUES ('12f8f420-e25d-4e5e-95ed-a58f20b5427e', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 11:37:41.214000'); +INSERT INTO `system_log` VALUES ('1408aaaa-7749-476c-8f66-77b25d16ffa1', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:49:28.647000'); +INSERT INTO `system_log` VALUES ('1518cd8f-0ab0-48c9-9c6b-7b24bf0a1e0a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:28.747000'); +INSERT INTO `system_log` VALUES ('152742ba-d32d-4ec3-8954-5ac342900137', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:39:02.791000'); +INSERT INTO `system_log` VALUES ('164d9a8a-4361-40cb-a72e-7f3f09393275', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 11:07:54.695000'); +INSERT INTO `system_log` VALUES ('17155240-f711-4ad3-beaa-caf0ed5c93d9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:16:35.107000'); +INSERT INTO `system_log` VALUES ('1771b874-d138-44a4-a296-fd348d0c1e99', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:09:31.347000'); +INSERT INTO `system_log` VALUES ('187a6ed0-8352-4426-b87d-99e31b977714', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:19:07.892000'); +INSERT INTO `system_log` VALUES ('189cec0a-d3ea-4c70-8c60-9151b6cf2937', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:34:42.856000'); +INSERT INTO `system_log` VALUES ('18d00ca2-801f-43a4-af21-d2155fe25f86', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:44:57.766000'); +INSERT INTO `system_log` VALUES ('1936d5ad-f4e8-41ef-870a-ba0168bdd852', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:52:33.923000'); +INSERT INTO `system_log` VALUES ('19629465-d4b0-4972-99bb-dc7b497b2357', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:39:02.459000'); +INSERT INTO `system_log` VALUES ('19998a8b-79e8-4725-878d-87f4ca22a491', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:56:21.871000'); +INSERT INTO `system_log` VALUES ('1a1a8ca4-dd00-476d-8202-7050968b89be', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:15:25.052000'); +INSERT INTO `system_log` VALUES ('1a801db2-06ab-47b5-bbe9-17b1a55b567c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 13:15:42.052000'); +INSERT INTO `system_log` VALUES ('1abccede-c3f2-4590-a4c6-4fb217591fe4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 12:48:25.474000'); +INSERT INTO `system_log` VALUES ('1b5e1790-6d52-42f2-a9a3-3234b74b5596', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-23 11:11:24.496000'); +INSERT INTO `system_log` VALUES ('1b6eff65-712b-4ec6-b252-2e73f5e531e8', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2022-12-19 12:58:39.642000'); +INSERT INTO `system_log` VALUES ('1c472a75-72cf-474c-987c-09ad35e35bb6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:20:23.990000'); +INSERT INTO `system_log` VALUES ('1c4c3b10-8668-4426-9653-c1a06fa2b47d', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 12:15:45.300000'); +INSERT INTO `system_log` VALUES ('1c65278d-2f65-432e-8221-545cb8eb1452', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:50:00.085000'); +INSERT INTO `system_log` VALUES ('1c6815c7-097d-43b1-9162-896d94f1067c', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:35:15.075000'); +INSERT INTO `system_log` VALUES ('1d1db78d-54d1-4d98-8f67-7bd4a3188959', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:19:36.060000'); +INSERT INTO `system_log` VALUES ('1d3e6c4d-ffd7-4382-b215-0b8428b79587', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:07:45.793000'); +INSERT INTO `system_log` VALUES ('1f9c1f26-7bf7-4133-9dc3-06b9242753c0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:56:44.467000'); +INSERT INTO `system_log` VALUES ('206f05d8-2362-4f74-9229-6f72389a16e6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 10:03:27.726000'); +INSERT INTO `system_log` VALUES ('2087ff2a-3c06-454e-a56d-e9576e1b54cc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:16:28.053000'); +INSERT INTO `system_log` VALUES ('20a280a3-3733-4097-ab14-2017bdbc45c3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:19:03.541000'); +INSERT INTO `system_log` VALUES ('21505de4-e9d2-44fb-b647-bf372e94222a', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-23 11:16:21.842000'); +INSERT INTO `system_log` VALUES ('222e3c86-71b5-4dcc-8788-0e278824ae43', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:53:41.190000'); +INSERT INTO `system_log` VALUES ('22f051ae-e9da-4487-8d32-ae579fbab261', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-03 10:08:53.122000'); +INSERT INTO `system_log` VALUES ('230bbf27-928b-4c8b-8c41-5ec8100c2d82', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:18:59.066000'); +INSERT INTO `system_log` VALUES ('25946777-5079-423e-9bad-5a39ecfc8a66', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 12:15:45.235000'); +INSERT INTO `system_log` VALUES ('26819e0b-7ae7-4d23-bfde-eca7b34cc9d9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 14:59:37.515000'); +INSERT INTO `system_log` VALUES ('26a081b9-b630-4864-8ded-4e0c9e88d3aa', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 12:15:56.064000'); +INSERT INTO `system_log` VALUES ('26b97862-727a-43e4-bffc-5b65fca7f472', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:51:23.998000'); +INSERT INTO `system_log` VALUES ('275817ea-15f0-4875-b727-d754a4053d2d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:35:05.878000'); +INSERT INTO `system_log` VALUES ('2760b8cc-ab8c-4beb-9625-185d3221f933', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:59.663000'); +INSERT INTO `system_log` VALUES ('2a3d8a33-3c3f-46ec-a8db-b51d014c4a66', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-23 11:12:02.912000'); +INSERT INTO `system_log` VALUES ('2a43dff5-1508-49d1-99fa-dfefe1df8863', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:12:07.771000'); +INSERT INTO `system_log` VALUES ('2ae76013-4dcd-4ab8-a9a9-b711d16f9419', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:40.933000'); +INSERT INTO `system_log` VALUES ('2afc457d-cbf1-420f-8c17-d36f9f56deb3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:18:49.210000'); +INSERT INTO `system_log` VALUES ('2b24e668-b1bf-4bf2-a890-e9abb953834f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 11:19:40.142000'); +INSERT INTO `system_log` VALUES ('2b59abf3-f3fe-4475-9a27-8145dadc3306', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:20:59.984000'); +INSERT INTO `system_log` VALUES ('2cebfee1-a906-4cad-b585-c3f0f456a0cb', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2022-12-18 11:29:28.045000'); +INSERT INTO `system_log` VALUES ('2d3b0ee0-877a-4040-8302-1faedc8ef14f', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:12:01.541000'); +INSERT INTO `system_log` VALUES ('2f8c7838-775c-4b8a-82a1-6a73be964abd', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.EmployeeController.save', '员工管理', '2023-01-11 11:07:38.361000'); +INSERT INTO `system_log` VALUES ('2fa51b9f-8841-485d-a4a2-7bf33af92b1c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:08:12.464000'); +INSERT INTO `system_log` VALUES ('2fa5206b-b5d0-438d-9e55-a576a1ff779b', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:48:39.637000'); +INSERT INTO `system_log` VALUES ('30a1ae22-654b-46c3-b47a-23b09d64e90f', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:45:38.675000'); +INSERT INTO `system_log` VALUES ('31b4535b-4438-427a-abbc-36c7e2f44f07', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:59:33.488000'); +INSERT INTO `system_log` VALUES ('31d038fc-ce82-45c9-8aaa-b40f92882625', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:08:28.522000'); +INSERT INTO `system_log` VALUES ('31ecd48c-7a32-4167-a683-e6bdacf785e5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 15:36:52.551000'); +INSERT INTO `system_log` VALUES ('32a5f454-c88d-4335-b60d-9e05b117ba95', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:12:07.771000'); +INSERT INTO `system_log` VALUES ('32ba899c-4984-4d13-a504-3b4ff630de37', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 10:16:36.294000'); +INSERT INTO `system_log` VALUES ('32d7e534-3a7b-45d4-b899-cbd44989f788', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:56:10.824000'); +INSERT INTO `system_log` VALUES ('336b69d6-8f5c-4c34-ae27-49b2906d9a05', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-23 11:12:02.537000'); +INSERT INTO `system_log` VALUES ('33cf72b3-98aa-4975-9834-38c3b61c99a2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:20:44.559000'); +INSERT INTO `system_log` VALUES ('35495a37-e929-4335-a1e2-7b2a4fd37510', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-23 11:11:19.448000'); +INSERT INTO `system_log` VALUES ('38cedbb8-228f-4965-ad15-7fd5c9162781', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 09:20:28.320000'); +INSERT INTO `system_log` VALUES ('3906d078-a520-45c6-967a-4158107dd8b5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:10:55.388000'); +INSERT INTO `system_log` VALUES ('3a08ab6a-a5bb-4a11-b97b-e013615473ca', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:10.836000'); +INSERT INTO `system_log` VALUES ('3bfb5ffc-6328-4989-8a0e-609078b89af5', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:09:19.525000'); +INSERT INTO `system_log` VALUES ('3c267439-efee-4eba-bf40-22fef24cd0ba', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-23 11:16:25.552000'); +INSERT INTO `system_log` VALUES ('3c3c52a6-999a-4211-a8e0-d0966163de71', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DriverController.save', '驾驶员管理', '2023-02-24 09:46:35.683000'); +INSERT INTO `system_log` VALUES ('3c3e7435-1cb7-4a85-920a-bb31ffac6f5e', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:51:31.281000'); +INSERT INTO `system_log` VALUES ('3c672095-3fb4-499a-97bb-a75d7b15f60d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:56:45.661000'); +INSERT INTO `system_log` VALUES ('3d01c743-3b7e-46b8-aca2-f25e726b3216', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:18:25.728000'); +INSERT INTO `system_log` VALUES ('3d348641-6af5-4b00-a2d7-1d554a11f373', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:20:29.946000'); +INSERT INTO `system_log` VALUES ('3d548509-df88-4305-ba98-cf42f57f0339', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2022-12-19 13:02:16.459000'); +INSERT INTO `system_log` VALUES ('3dbe797b-6c60-4f5a-aa89-51614814c47a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:01:36.018000'); +INSERT INTO `system_log` VALUES ('3df5501e-fe3c-4f59-a365-eaabccb38031', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:42:18.604000'); +INSERT INTO `system_log` VALUES ('3e458605-cad4-46b0-b760-c67af93f5e26', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:58:52.210000'); +INSERT INTO `system_log` VALUES ('3eb7b41d-e3f9-491b-ad34-e42797bf525f', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:48:33.313000'); +INSERT INTO `system_log` VALUES ('3f01fc0f-d1db-4236-abbd-053b1a8c1c11', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 11:11:15.676000'); +INSERT INTO `system_log` VALUES ('3f27f1ec-4ebb-4258-a224-a1243a36a201', 'admin@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.CommodityController.delete', '商品管理', '2023-01-11 13:15:34.845000'); +INSERT INTO `system_log` VALUES ('3f2cfe3c-4acc-4929-8109-281a035c3b3c', 'testUser@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.CommodityController.delete', '商品管理', '2023-02-24 09:36:12.476000'); +INSERT INTO `system_log` VALUES ('3f6c948f-5227-4020-9a46-bdc93f0d1f98', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:27.597000'); +INSERT INTO `system_log` VALUES ('3faf1012-92ac-4db4-833b-634f0226c70d', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:40:45.920000'); +INSERT INTO `system_log` VALUES ('40259f31-a500-490a-95b3-c896840c3a86', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-16 10:30:20.213000'); +INSERT INTO `system_log` VALUES ('405950ed-3091-43d6-bc56-2a6786da7e9c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:18:34.088000'); +INSERT INTO `system_log` VALUES ('40bf0663-b196-4798-9b41-ba5a3bdd92ff', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:09:32.479000'); +INSERT INTO `system_log` VALUES ('412d46e8-de45-482e-a2c7-a67f0cb32aac', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 11:36:37.580000'); +INSERT INTO `system_log` VALUES ('412faf77-7cb5-4098-8474-ae743f4ade8c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-03 10:08:39.314000'); +INSERT INTO `system_log` VALUES ('418af412-c363-400e-abaa-2d0d65368638', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:36:23.498000'); +INSERT INTO `system_log` VALUES ('420d03da-f550-4944-a158-aade93725df7', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2023-02-24 09:42:04.654000'); +INSERT INTO `system_log` VALUES ('4286d9ef-9a4c-4be5-b846-e6dad0699f9d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:28.128000'); +INSERT INTO `system_log` VALUES ('43a9c757-823a-49cc-9545-2971a33baa87', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 11:06:00.026000'); +INSERT INTO `system_log` VALUES ('46ab9780-be70-4a77-a749-c47870df27e4', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:52:36.969000'); +INSERT INTO `system_log` VALUES ('46ace3ba-3eb7-4c2c-a179-53c1ba218f2b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:37:55.438000'); +INSERT INTO `system_log` VALUES ('48d387fd-5948-4558-9a54-ce4cb92c6322', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 11:19:31.867000'); +INSERT INTO `system_log` VALUES ('491e8e68-6c4e-4f22-8278-8ec06796ab12', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-16 10:31:56.789000'); +INSERT INTO `system_log` VALUES ('4990230f-7a78-4d75-bd5d-74dd255557f1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 11:08:08.819000'); +INSERT INTO `system_log` VALUES ('4a18f21f-da05-4be9-85aa-8b0e57669a3e', 'testUser@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.EmployeeController.delete', '员工管理', '2023-02-24 09:12:07.743000'); +INSERT INTO `system_log` VALUES ('4a958c89-7537-419f-8a3c-26d5454b0134', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2022-12-19 12:59:22.957000'); +INSERT INTO `system_log` VALUES ('4ae005f3-a2f2-4ae2-8f71-8d76d74e5dee', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.VehicleController.save', '车辆管理', '2023-01-11 13:38:19.566000'); +INSERT INTO `system_log` VALUES ('4af110c7-9d7d-4958-819b-d1186cd2e090', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 09:21:00.124000'); +INSERT INTO `system_log` VALUES ('4af9c4e0-2a63-407b-9dd8-a520a1f9f25f', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:40:44.218000'); +INSERT INTO `system_log` VALUES ('4b266054-8109-483d-91d3-b3e9457e89f2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:28:32.927000'); +INSERT INTO `system_log` VALUES ('4b3e167a-542a-4d4c-8962-ac45fbb2e950', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:40.423000'); +INSERT INTO `system_log` VALUES ('4b97d469-01c7-4ddc-a66e-d5e8f22f3d62', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 10:16:42.295000'); +INSERT INTO `system_log` VALUES ('4c41f964-a415-4c8c-bfcd-a0b90d50649a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:21:10.080000'); +INSERT INTO `system_log` VALUES ('4c5a201b-e749-450e-962d-05d239e9917f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 14:59:35.709000'); +INSERT INTO `system_log` VALUES ('4ca0dd67-fa02-4495-9f7c-5fe414b0720f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 12:46:47.691000'); +INSERT INTO `system_log` VALUES ('4dd0a93f-b1db-429e-aecc-00184ee8da03', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2023-01-11 13:35:52.107000'); +INSERT INTO `system_log` VALUES ('4e175b6a-d356-46e0-9fd2-f2bc84eb5aff', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:35:21.579000'); +INSERT INTO `system_log` VALUES ('4ec70883-e787-42e5-8c56-d3ca309c98ca', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:39.853000'); +INSERT INTO `system_log` VALUES ('4f297bc1-8424-4d2b-9bc3-84c17500a892', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-19 14:59:35.712000'); +INSERT INTO `system_log` VALUES ('4fc7b4e1-51ca-467c-960d-aa006e0df18c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:18:30.097000'); +INSERT INTO `system_log` VALUES ('5047c752-e010-4245-b948-569783561c09', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:58:26.204000'); +INSERT INTO `system_log` VALUES ('509b6d47-eb41-489d-99c1-58745b767433', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:56:50.377000'); +INSERT INTO `system_log` VALUES ('510114bf-9977-44bc-8526-3e5e29701959', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 10:01:28.519000'); +INSERT INTO `system_log` VALUES ('519b3f8b-640f-4222-badb-af223a5029ae', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 13:38:53.725000'); +INSERT INTO `system_log` VALUES ('535fc79e-3e5b-4efe-8b98-4683f0d82f2e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:10:52.320000'); +INSERT INTO `system_log` VALUES ('53e15098-b2fb-4590-88ce-c462c9aa8430', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:16:05.984000'); +INSERT INTO `system_log` VALUES ('54eb1648-4485-4479-b42b-cf9218607dd8', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:34:48.073000'); +INSERT INTO `system_log` VALUES ('5514e7a9-3338-428c-a73c-ca5197090caa', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-16 10:30:22.084000'); +INSERT INTO `system_log` VALUES ('5515f8bf-4071-498b-8427-b95f13a4529a', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:49:30.652000'); +INSERT INTO `system_log` VALUES ('558c92ed-86e8-434d-b664-e9a40c265154', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:56:43.500000'); +INSERT INTO `system_log` VALUES ('56047f41-b981-4270-a88f-138ea44a1301', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:55:48.044000'); +INSERT INTO `system_log` VALUES ('56be44a7-ad6b-4c9f-bd5e-1ca515065951', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:47.209000'); +INSERT INTO `system_log` VALUES ('5700f834-0080-4eb1-93b0-8dcb3317bf85', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-02-24 09:56:48.905000'); +INSERT INTO `system_log` VALUES ('5750f90d-9089-42a4-9797-9ff3b9e90836', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:27:11.699000'); +INSERT INTO `system_log` VALUES ('57c199bc-56b2-4822-b2cb-2a986c6e3854', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:16:01.501000'); +INSERT INTO `system_log` VALUES ('584d432b-008f-452e-98ec-f4cc4c4475b1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 10:03:11.359000'); +INSERT INTO `system_log` VALUES ('58ef9e2b-6a43-4e7d-a730-6a39c7e2778f', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:51:03.515000'); +INSERT INTO `system_log` VALUES ('59636bf3-923a-40de-9658-e29c30fcc5bc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:02:17.474000'); +INSERT INTO `system_log` VALUES ('59ed5fe8-70d7-4b1a-8a29-e6c0f8e3161c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 09:23:34.586000'); +INSERT INTO `system_log` VALUES ('5be162cd-6932-419f-a301-36573f4efa83', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:45.451000'); +INSERT INTO `system_log` VALUES ('5c990212-4723-4ed2-9236-e65e64250b0f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 13:38:19.649000'); +INSERT INTO `system_log` VALUES ('5cca92dc-618d-42bc-845a-f031023ea875', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 11:08:02.124000'); +INSERT INTO `system_log` VALUES ('5d1ed86b-6a65-4726-ab76-51f86620e350', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2022-12-18 17:03:10.144000'); +INSERT INTO `system_log` VALUES ('5dd519bf-6334-4039-b74d-c3e05d52165b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 09:22:55.919000'); +INSERT INTO `system_log` VALUES ('5ddaaa2e-845e-4280-afc7-a61ad8a0b0ad', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:25.728000'); +INSERT INTO `system_log` VALUES ('5e10f646-15de-434b-a2c9-e057a0d8c194', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 13:36:09.637000'); +INSERT INTO `system_log` VALUES ('5e580fc6-f2ad-491a-b2c1-66c358fa747f', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 11:16:18.553000'); +INSERT INTO `system_log` VALUES ('5e6b03d0-93f0-455a-b5da-e4b33a3f2e38', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:09:18.803000'); +INSERT INTO `system_log` VALUES ('5f23d9fd-1425-41e5-98a0-fac3590617a3', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-02-24 09:47:08.842000'); +INSERT INTO `system_log` VALUES ('5f347fa2-f2cf-4857-98b4-afd1f99450af', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 10:16:37.153000'); +INSERT INTO `system_log` VALUES ('5fe8d44e-cb13-4007-8fca-860a9e4838a1', 'abc@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.EmployeeController.save', '员工管理', '2022-12-18 11:38:16.711000'); +INSERT INTO `system_log` VALUES ('6010ec17-8a3f-4597-8819-f1a80427b2a5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 20:24:14.407000'); +INSERT INTO `system_log` VALUES ('602100e8-9a16-4d24-9134-f2d21b376855', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-20 19:56:41.891000'); +INSERT INTO `system_log` VALUES ('60f76113-5a05-4fe8-93ab-d05170d38f41', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-01-11 09:23:25.714000'); +INSERT INTO `system_log` VALUES ('610ccf87-1757-498c-bd8d-1b91db31e976', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 12:47:18.969000'); +INSERT INTO `system_log` VALUES ('61287a93-c46f-4205-8b2b-c5ddb901c9b4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-19 14:59:38.573000'); +INSERT INTO `system_log` VALUES ('615b26ab-abdb-4d2a-9950-38ccbc6c0832', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:57:16.179000'); +INSERT INTO `system_log` VALUES ('62027433-5b3f-4d27-8015-7f44115115d9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-03 10:08:39.317000'); +INSERT INTO `system_log` VALUES ('62052353-d251-4af3-808e-81855ef072d4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:48:03.923000'); +INSERT INTO `system_log` VALUES ('6367e2f1-1d11-460b-82ba-f49894123131', 'testUser@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.CommodityController.delete', '商品管理', '2023-02-24 09:36:08.782000'); +INSERT INTO `system_log` VALUES ('63a3a61c-d18e-4fc3-9b7b-9b90bd66f485', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 14:59:38.571000'); +INSERT INTO `system_log` VALUES ('64363773-4c6d-414f-a8bc-987f7a917452', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:34.884000'); +INSERT INTO `system_log` VALUES ('6436f3ba-3e87-4057-81a0-7940369dadc8', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-17 23:50:43.855000'); +INSERT INTO `system_log` VALUES ('6465e428-f585-4d6e-b5d0-a3cfc2d6fbd5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:30:06.124000'); +INSERT INTO `system_log` VALUES ('650487e1-9ebd-4e94-8253-790e1697b0d1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-03 09:43:44.027000'); +INSERT INTO `system_log` VALUES ('6531f563-1f50-4b94-ac8b-bb61daf3dfb9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 10:00:34.987000'); +INSERT INTO `system_log` VALUES ('655db4e3-9b69-4340-8183-fc082c41c77d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:37:55.771000'); +INSERT INTO `system_log` VALUES ('659ab2bb-4701-43ed-b4c1-3fa5695a7a20', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:58:46.979000'); +INSERT INTO `system_log` VALUES ('65ae6ee8-23dc-452a-ba58-fc820a2151db', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 13:15:57.298000'); +INSERT INTO `system_log` VALUES ('6640ccb3-3c71-4c3f-8c4d-f48105ea47c8', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:48:53.980000'); +INSERT INTO `system_log` VALUES ('66dfc4d8-0fbd-45a1-b7f6-1af957879480', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:35:21.579000'); +INSERT INTO `system_log` VALUES ('67a4a7b1-9f84-4838-8401-ac2548c07f4c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:47:11.662000'); +INSERT INTO `system_log` VALUES ('67fd385d-507d-4435-9d35-da18958e4fa6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:19.068000'); +INSERT INTO `system_log` VALUES ('682be452-38f0-4cc4-9164-896316dca4d3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-20 19:58:50.082000'); +INSERT INTO `system_log` VALUES ('6854cf7f-b655-42d1-b978-de6bf51a9c2c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 09:07:37.027000'); +INSERT INTO `system_log` VALUES ('698746d2-08c3-4f61-9d54-2e10f16bbbb7', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:09:28.024000'); +INSERT INTO `system_log` VALUES ('69891b38-ae4d-40ef-b2c1-726ca832b400', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 13:10:27.866000'); +INSERT INTO `system_log` VALUES ('69ffaa81-7d83-46d5-8ddb-815dbe16a935', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 11:12:00.110000'); +INSERT INTO `system_log` VALUES ('6a44673e-a36a-425c-b503-c28a871778a1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-03 10:08:40.798000'); +INSERT INTO `system_log` VALUES ('6c286a82-56cb-44e8-9eb1-674a82813c62', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 13:10:49.668000'); +INSERT INTO `system_log` VALUES ('6c87eeb5-cae9-4eae-9dea-38cd5366905c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:15:26.756000'); +INSERT INTO `system_log` VALUES ('6d0b10a6-2276-4808-bc2a-ad6f0c0b0a32', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 13:37:00.467000'); +INSERT INTO `system_log` VALUES ('6d365913-c78c-44a4-8ed3-5cd951c817d8', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:10.032000'); +INSERT INTO `system_log` VALUES ('6d9776c9-1303-4943-9767-5b287179a290', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:46:44.415000'); +INSERT INTO `system_log` VALUES ('6dd2bc07-1a0a-4a72-a5bc-03c753357f08', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:51:27.769000'); +INSERT INTO `system_log` VALUES ('6e32cf49-1b62-4701-9d6b-d31747ec361e', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:43:09.120000'); +INSERT INTO `system_log` VALUES ('6e3af2ee-81e3-423c-a099-a085797ada4b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:42:18.604000'); +INSERT INTO `system_log` VALUES ('6e463fd1-d676-4f11-a545-d6be4a78ac81', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:09:42.711000'); +INSERT INTO `system_log` VALUES ('6e723e53-dad9-478d-b065-c949194dfb92', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:43:08.630000'); +INSERT INTO `system_log` VALUES ('6e726b73-08f6-467b-a1f8-a0cf9faadeee', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:56:11.796000'); +INSERT INTO `system_log` VALUES ('6eab2066-1403-438d-b4f1-5e31dd482191', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:36:17.494000'); +INSERT INTO `system_log` VALUES ('6f6487f3-906a-458c-9a20-d7df22110620', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:12:01.541000'); +INSERT INTO `system_log` VALUES ('6f97c8a5-ae06-4ad9-9f0d-d70a0a3a5940', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:58:25.523000'); +INSERT INTO `system_log` VALUES ('6fed4a72-ff29-4577-ba9a-e29b30ba1a91', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:50.646000'); +INSERT INTO `system_log` VALUES ('70664bb1-1122-4187-8f42-155a7165c3d2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:56:22.302000'); +INSERT INTO `system_log` VALUES ('709aba05-d48a-4bfb-b74c-0ee1c025d1df', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-23 11:16:39.378000'); +INSERT INTO `system_log` VALUES ('70c71159-649e-4f30-8f8d-42a673022035', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-15 20:57:46.117000'); +INSERT INTO `system_log` VALUES ('7325a00a-6cff-4463-adf3-5a92dba225f7', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-23 11:16:44.530000'); +INSERT INTO `system_log` VALUES ('73804cf7-1b7d-40ef-a539-55d29b283610', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:06.117000'); +INSERT INTO `system_log` VALUES ('74a9d649-1f7e-492f-9ac9-094049ed79ad', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:40.679000'); +INSERT INTO `system_log` VALUES ('74ad2c22-ffbb-4a25-bc0f-3be4ce5abf3b', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:08.806000'); +INSERT INTO `system_log` VALUES ('76348164-8a6e-4ad0-b2a8-e1c4a70cc88e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:39.874000'); +INSERT INTO `system_log` VALUES ('77f6fbf3-1ee6-49a6-9f53-4826d8aeb28c', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:39:00.298000'); +INSERT INTO `system_log` VALUES ('786e84ac-4de4-48fb-bd9b-46a21d37a0d0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-23 19:04:25.853000'); +INSERT INTO `system_log` VALUES ('78a8fcc8-cafe-4244-984f-1b0d0dc69602', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-23 11:15:17.168000'); +INSERT INTO `system_log` VALUES ('79aee427-15ea-4574-a7d1-9c948a4a1b2a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-16 10:30:22.072000'); +INSERT INTO `system_log` VALUES ('79e23c65-6a31-41a5-8e63-b7386648f860', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-02-24 09:53:16.337000'); +INSERT INTO `system_log` VALUES ('7a118ca1-b2e8-483b-b4a1-434581b8da05', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 10:00:29.254000'); +INSERT INTO `system_log` VALUES ('7a5c765a-9046-4bc7-bcd4-b5188bfc82c7', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:48:42.633000'); +INSERT INTO `system_log` VALUES ('7a9594e6-4253-4635-a283-71d7e2511275', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-15 21:05:20.969000'); +INSERT INTO `system_log` VALUES ('7b09e3e6-3bc9-4449-9e45-1fbf7a0f907f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:06:28.233000'); +INSERT INTO `system_log` VALUES ('7c09323f-f228-47ae-83a3-ed60543f5daa', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2022-12-19 11:21:33.793000'); +INSERT INTO `system_log` VALUES ('7d090768-56bd-43dd-86f6-d3471cceb119', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:02:24.215000'); +INSERT INTO `system_log` VALUES ('7d677f7d-cb99-4752-9fc5-3799c32d064c', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:45:23.354000'); +INSERT INTO `system_log` VALUES ('7d935ec4-d3fe-487d-9ece-6366a94afb64', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:42:47.718000'); +INSERT INTO `system_log` VALUES ('7d95f4cd-a47c-4312-bfdf-417a7ddb5d7b', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-23 11:12:02.539000'); +INSERT INTO `system_log` VALUES ('7dad0595-6982-4107-8fba-ef417819eea2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-03 10:08:03.622000'); +INSERT INTO `system_log` VALUES ('7dff8528-3b1d-4c28-8d2a-60ebf9fd67e1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:37:55.438000'); +INSERT INTO `system_log` VALUES ('7ead999f-2bb6-4777-a9f0-99644a9ea474', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:55.620000'); +INSERT INTO `system_log` VALUES ('7ed3b25d-1449-4c68-ae5a-bddd83857afc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-20 19:58:58.630000'); +INSERT INTO `system_log` VALUES ('7f53e3aa-b072-4ed4-b7f2-eb59354d5168', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:15:37.560000'); +INSERT INTO `system_log` VALUES ('7fcb82a4-9c9a-4d0c-a93c-58eeae357c46', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 10:54:05.831000'); +INSERT INTO `system_log` VALUES ('7fdf4747-be83-4646-b225-7fad669c0c5c', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:08:07.869000'); +INSERT INTO `system_log` VALUES ('801be24a-ed8a-4f02-b667-233f7bbf8d5c', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:48:00.963000'); +INSERT INTO `system_log` VALUES ('8038a64c-bbf6-48a8-a656-e2beefd53185', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 14:59:45.220000'); +INSERT INTO `system_log` VALUES ('83377bfe-dfb8-48de-9be3-1dbd8fc4db3c', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:48:54.298000'); +INSERT INTO `system_log` VALUES ('83fdfa97-140f-4534-9a86-973215a52eee', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-16 10:30:14.195000'); +INSERT INTO `system_log` VALUES ('85004903-c253-4f28-a6ca-318e9733e259', 'testUser@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.CommodityController.delete', '商品管理', '2023-02-24 09:36:13.328000'); +INSERT INTO `system_log` VALUES ('86b4cef4-6074-4afb-80e6-8676d8916271', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-23 19:03:04.408000'); +INSERT INTO `system_log` VALUES ('87ebf1dc-5a32-44bb-a68d-b4bfddcd74a0', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:51:18.364000'); +INSERT INTO `system_log` VALUES ('891128f6-b41c-4615-9825-51f4d9f6bbf3', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-02-24 09:47:48.992000'); +INSERT INTO `system_log` VALUES ('893be95c-57e5-4a1a-bebd-884529d29029', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-15 21:05:17.399000'); +INSERT INTO `system_log` VALUES ('89503acc-f45d-4055-a883-d28c779e161d', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-23 11:11:55.905000'); +INSERT INTO `system_log` VALUES ('8a0fcdca-b5ca-4e17-9f82-af0a89b12a07', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:23:42.019000'); +INSERT INTO `system_log` VALUES ('8ad0809f-e047-44e7-8c99-1df776778bc3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 13:36:49.318000'); +INSERT INTO `system_log` VALUES ('8afe90ee-a87a-40b2-9fb8-049bbd183045', 'testUser@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.EmployeeController.delete', '员工管理', '2023-02-24 09:35:21.551000'); +INSERT INTO `system_log` VALUES ('8b021800-8f73-4240-aec8-f11a88c8086e', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:12:27.122000'); +INSERT INTO `system_log` VALUES ('8b23efe5-26f1-4133-8f71-61243943a52b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2023-01-11 09:17:39.950000'); +INSERT INTO `system_log` VALUES ('8b718ac1-9843-458c-b10a-b0dcd9629356', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:01.485000'); +INSERT INTO `system_log` VALUES ('8bf9f105-3c7b-43f6-8cee-936686aef2f4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 11:43:15.416000'); +INSERT INTO `system_log` VALUES ('8cb42f3a-3376-462f-8e69-e2f483f72688', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 10:57:51.084000'); +INSERT INTO `system_log` VALUES ('8db09e9d-cc51-44a1-bb0e-8d752ea75a1c', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-23 11:16:38.962000'); +INSERT INTO `system_log` VALUES ('8dd485cb-09df-4a8c-ba90-6575266d7dfb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:56:53.934000'); +INSERT INTO `system_log` VALUES ('8de5377d-8009-4efc-91c7-4d5148ed9296', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:41:47.753000'); +INSERT INTO `system_log` VALUES ('8e16d7e3-1def-4202-95db-79e0d68afe77', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:56:31.316000'); +INSERT INTO `system_log` VALUES ('8f222a86-71fc-4c39-acd4-0e0fdc878259', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 10:00:41.411000'); +INSERT INTO `system_log` VALUES ('8f42a647-9572-494c-abe7-6906c8717939', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:34:50.316000'); +INSERT INTO `system_log` VALUES ('8f9cd10d-f157-4e24-bd18-1a65c36ba4f2', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-23 11:17:22.497000'); +INSERT INTO `system_log` VALUES ('8fe2ae7e-d764-45b0-81e0-1507c7e62c1e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:16:40.527000'); +INSERT INTO `system_log` VALUES ('9069d579-6f6f-410e-9c82-d74dfd739180', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:51.133000'); +INSERT INTO `system_log` VALUES ('907a9417-2052-407a-adb2-c184b9d66da2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 11:07:38.462000'); +INSERT INTO `system_log` VALUES ('90bcca80-85c3-4db4-bdea-6a80a763605c', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:35:24.025000'); +INSERT INTO `system_log` VALUES ('9156a955-22d7-4ba0-af7b-3d79fd3927f2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 20:23:53.290000'); +INSERT INTO `system_log` VALUES ('9194a827-5bd5-4296-88a3-752ca0b03093', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:36:12.037000'); +INSERT INTO `system_log` VALUES ('91a9e96e-1e9c-4447-b112-d51d9c8577df', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:56:19.794000'); +INSERT INTO `system_log` VALUES ('91b204bb-9e03-4493-9dbb-943659814711', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:35:52.417000'); +INSERT INTO `system_log` VALUES ('920f8cac-a0d2-4e1f-a913-32c6e8f3d8bb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 13:15:14.006000'); +INSERT INTO `system_log` VALUES ('9267859b-2d26-4cbf-95ca-f0afc3f1108b', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-23 11:16:30.719000'); +INSERT INTO `system_log` VALUES ('92a25ba9-d9c2-4a4a-ba29-4d4c8f745763', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 12:48:13.998000'); +INSERT INTO `system_log` VALUES ('92cd14b2-9a0a-430e-b229-9278ca41ce4e', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 12:15:53.834000'); +INSERT INTO `system_log` VALUES ('93077e83-1df2-40dc-bce6-d4bfdaa94c3a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:12:26.295000'); +INSERT INTO `system_log` VALUES ('9411db9c-f284-497e-b5e9-de73e53e7bce', 'testUser@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.CommodityController.delete', '商品管理', '2023-02-24 09:36:10.808000'); +INSERT INTO `system_log` VALUES ('9470c6ce-118f-44a7-8ddd-ee135f3569f6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:40:34.346000'); +INSERT INTO `system_log` VALUES ('948c5640-b897-4d5e-9a59-f7b3db08980d', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:42:50.952000'); +INSERT INTO `system_log` VALUES ('94fab12f-022a-4ccb-8705-12d05ac5dae0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-20 19:55:14.452000'); +INSERT INTO `system_log` VALUES ('961d0565-8675-4803-920f-a580db031058', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:02:56.340000'); +INSERT INTO `system_log` VALUES ('967e35b3-25b2-4203-814a-b22575808da5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 10:01:06.032000'); +INSERT INTO `system_log` VALUES ('96a31182-3619-4107-a3ef-6dab83e3dc4b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-20 19:58:57.415000'); +INSERT INTO `system_log` VALUES ('975d858f-3a87-4686-a15d-07d6c62682f2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:35:39.755000'); +INSERT INTO `system_log` VALUES ('97b27589-b277-408c-8cbd-f8e06a67f4fa', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:48:13.688000'); +INSERT INTO `system_log` VALUES ('983bc0be-dec6-4e1d-8174-475bb1723888', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:05:37.280000'); +INSERT INTO `system_log` VALUES ('99a19272-3632-483e-916e-a3071f039e5a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 11:07:17.982000'); +INSERT INTO `system_log` VALUES ('9a23f909-aab2-4a44-a094-d747b8068a35', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:36:16.578000'); +INSERT INTO `system_log` VALUES ('9a27645b-2fbe-4a22-861b-8b42abdadf8f', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2022-12-19 13:01:51.330000'); +INSERT INTO `system_log` VALUES ('9a4c07d8-0603-44fc-a9fa-0a0f42aa571a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:51:01.697000'); +INSERT INTO `system_log` VALUES ('9a6ef09a-5829-4e3e-816d-eb0da70c8dd2', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:27:04.690000'); +INSERT INTO `system_log` VALUES ('9b93a8a0-0632-477f-a813-9d733d1969a6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-23 19:02:10.634000'); +INSERT INTO `system_log` VALUES ('9d09f07d-3f88-4a4a-88d4-458ba370f003', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-02-24 09:47:41.685000'); +INSERT INTO `system_log` VALUES ('9e465116-a20b-4030-a37e-6b07a4d001f0', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:53:19.960000'); +INSERT INTO `system_log` VALUES ('9eeb400b-5c5c-46fc-bbf3-f7e972102b27', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 15:31:40.953000'); +INSERT INTO `system_log` VALUES ('9f0ee714-b4c8-43e1-a24c-8b5cb89486a4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:10:56.827000'); +INSERT INTO `system_log` VALUES ('9fc7c9ee-ed93-465e-9c81-24d364b26d9d', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:51:34.386000'); +INSERT INTO `system_log` VALUES ('9fdf8c09-10b8-4448-86e4-8ec3b534dd33', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:51:33.265000'); +INSERT INTO `system_log` VALUES ('9fe98ad9-afb1-4c6b-94d6-a2447775dead', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:27:18.076000'); +INSERT INTO `system_log` VALUES ('a080b8cf-3955-4bb8-aa26-e6e14205a407', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:49.249000'); +INSERT INTO `system_log` VALUES ('a0f561f8-987a-409b-8427-bd5a427d59a1', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-23 11:16:37.461000'); +INSERT INTO `system_log` VALUES ('a1f934fc-b5fd-440b-b832-57e789fa9544', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2022-12-19 13:10:56.237000'); +INSERT INTO `system_log` VALUES ('a2a80346-678e-4377-a641-4efe2e829456', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 09:14:37.816000'); +INSERT INTO `system_log` VALUES ('a2d05b5b-38dd-441d-ac2b-20750d0636b0', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 11:16:26.629000'); +INSERT INTO `system_log` VALUES ('a2d39fa7-a475-4303-ba53-8cd06f8c6128', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 10:16:42.288000'); +INSERT INTO `system_log` VALUES ('a466671b-2efd-4f6a-bdbc-93314193a007', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2023-02-24 09:41:47.118000'); +INSERT INTO `system_log` VALUES ('a48474e2-c993-4cdc-bdfe-5a91a07e7703', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:37:53.084000'); +INSERT INTO `system_log` VALUES ('a4b30a61-3b96-404f-9995-0fa10fddd7c3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-23 19:04:07.491000'); +INSERT INTO `system_log` VALUES ('a4d25292-4066-4de2-a304-8ce408680a20', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:25.646000'); +INSERT INTO `system_log` VALUES ('a4d6dcf6-e8ed-4e29-be3f-d29aa6c9a02c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:24:31.526000'); +INSERT INTO `system_log` VALUES ('a6a15587-91bc-451c-92ae-4a15c36b7953', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 11:36:37.569000'); +INSERT INTO `system_log` VALUES ('a798398a-1df9-4e20-b4b4-a3a810048e7f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 10:00:29.254000'); +INSERT INTO `system_log` VALUES ('a84d1826-2e71-4bc4-a2f3-ad8cd1cdf67c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 10:02:02.854000'); +INSERT INTO `system_log` VALUES ('a9330bb2-0172-4367-93a1-dcfdba0c3a3f', 'testUser@qq.com', '删除', '127.0.0.1', 'com.example.api.controller.CommodityController.delete', '商品管理', '2023-02-24 09:36:11.621000'); +INSERT INTO `system_log` VALUES ('a9f3f2e2-19a8-4642-9d95-b6044830f580', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 10:02:04.780000'); +INSERT INTO `system_log` VALUES ('aa10a416-6fe0-4cc1-b384-acfbe85099e5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:27:05.967000'); +INSERT INTO `system_log` VALUES ('aa5b925c-09f7-4e6d-86a4-d31455b78072', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:48:51.405000'); +INSERT INTO `system_log` VALUES ('ab6c54b1-4091-4fe9-a322-317092a3c647', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:56:53.710000'); +INSERT INTO `system_log` VALUES ('ab7ae3b9-acac-4e1b-bbff-310497772373', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:47:59.355000'); +INSERT INTO `system_log` VALUES ('ab883039-1fcf-4a0b-ab0f-0a184080d811', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.WarehouseController.save', '仓库管理', '2023-02-24 09:43:05.528000'); +INSERT INTO `system_log` VALUES ('ac3d6acd-143f-4bbc-bd99-75a52554406c', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:12.499000'); +INSERT INTO `system_log` VALUES ('ac695b82-ccfc-48c0-bb36-70f067cecd36', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 10:02:13.837000'); +INSERT INTO `system_log` VALUES ('ac7b9a51-2633-4e2a-848b-39a7ffa639c4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-20 19:50:50.836000'); +INSERT INTO `system_log` VALUES ('acae46ef-21f9-4e1b-a20d-985f43836ddf', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-15 21:05:15.738000'); +INSERT INTO `system_log` VALUES ('acf10e5b-e918-4459-a191-6283b1136def', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:02:18.813000'); +INSERT INTO `system_log` VALUES ('ad7e5200-bbc1-4136-8cfa-080b674af52d', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.EmployeeController.save', '员工管理', '2023-02-24 09:42:47.686000'); +INSERT INTO `system_log` VALUES ('ae063dcb-2f23-4647-8548-2ef34bec7565', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-23 11:16:44.530000'); +INSERT INTO `system_log` VALUES ('ae48bcfe-f732-486a-b886-a304bb30a430', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:28.718000'); +INSERT INTO `system_log` VALUES ('ae5354a5-bf35-4c15-b6b4-896dfb515c61', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 11:38:16.825000'); +INSERT INTO `system_log` VALUES ('aea1a092-2193-4c38-8861-c03f8e4e8216', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-20 19:56:39.602000'); +INSERT INTO `system_log` VALUES ('aebe72ec-aedc-42ae-965e-31ceba81c001', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-20 19:56:45.686000'); +INSERT INTO `system_log` VALUES ('b1959e7e-f77c-4a44-b6a4-70eee569b40c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-19 13:10:49.669000'); +INSERT INTO `system_log` VALUES ('b21cb4ac-1485-44f1-8f1f-513477be7e6e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:13.126000'); +INSERT INTO `system_log` VALUES ('b4095f63-6673-4242-91f6-8236717d3d13', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.VehicleController.save', '车辆管理', '2023-02-24 09:45:23.326000'); +INSERT INTO `system_log` VALUES ('b46e810f-8800-4ffd-bb8d-9990d86d7313', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 13:36:49.334000'); +INSERT INTO `system_log` VALUES ('b49e7dd8-0a55-4562-94ee-c61b4879bab0', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 13:39:01.079000'); +INSERT INTO `system_log` VALUES ('b5328f79-6c73-4203-97bd-e778fdde0ded', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-02-24 09:56:43.517000'); +INSERT INTO `system_log` VALUES ('b54c88b0-8e89-4853-94f4-a0815ad6f63d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:12:36.876000'); +INSERT INTO `system_log` VALUES ('b57b6a7c-4fdb-44c8-ad4e-e328f79f2478', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:51:04.794000'); +INSERT INTO `system_log` VALUES ('b5899d57-264f-4067-911c-c4e79ef37371', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:15:47.080000'); +INSERT INTO `system_log` VALUES ('b5a946a4-03dc-439f-a16d-859f915b6987', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2023-01-11 09:18:13.365000'); +INSERT INTO `system_log` VALUES ('b5b74bfe-c247-4ca0-9367-fe6c98dbef9e', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:40:13.019000'); +INSERT INTO `system_log` VALUES ('b5bd82c2-75fd-4fb4-9317-a83277128065', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 21:45:55.213000'); +INSERT INTO `system_log` VALUES ('b5f03c87-36d0-4004-9aef-478fbba5a260', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 12:15:59.043000'); +INSERT INTO `system_log` VALUES ('b662c241-e5db-464d-a948-e4245c6ce083', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-23 19:07:50.563000'); +INSERT INTO `system_log` VALUES ('b67fcfdc-630b-4a5f-ac9c-49010ea65ddb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:56:13.510000'); +INSERT INTO `system_log` VALUES ('b693249a-a9ce-4cdc-9653-ba360eaabd78', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 09:23:13.852000'); +INSERT INTO `system_log` VALUES ('b7869919-a1cb-43b3-a7fc-b2d11d24e4e8', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:24:33.010000'); +INSERT INTO `system_log` VALUES ('b7a9aaa0-2e3b-45d0-a2ef-48398525b07e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 10:16:21.420000'); +INSERT INTO `system_log` VALUES ('b8584d43-49bc-407b-95ab-29019c8ae0be', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:09:55.173000'); +INSERT INTO `system_log` VALUES ('b8b2d129-073b-44ce-95af-6c3b080161e8', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:46:35.710000'); +INSERT INTO `system_log` VALUES ('b8d21655-ff61-4390-b828-cc256c289dbe', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:43:05.545000'); +INSERT INTO `system_log` VALUES ('b90a9ba6-8555-4cc9-aa29-aca39a387181', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:36:23.319000'); +INSERT INTO `system_log` VALUES ('b995dca3-af0a-491e-91f1-00dca443bdbd', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:19:01.204000'); +INSERT INTO `system_log` VALUES ('b9a08e4c-6adf-456b-94e9-66f5b9dd4cf1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:52.725000'); +INSERT INTO `system_log` VALUES ('b9b402bd-9e96-4c14-b07f-ea39782fb49d', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:42:56.116000'); +INSERT INTO `system_log` VALUES ('ba0a41f2-2c47-42f0-9f20-9a70a93d65a2', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:47:11.679000'); +INSERT INTO `system_log` VALUES ('ba79559f-37f7-4637-aef4-922f1016b72d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:56:24.352000'); +INSERT INTO `system_log` VALUES ('ba8fa00e-b723-4b5c-bc01-45261acfcace', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 12:16:01.263000'); +INSERT INTO `system_log` VALUES ('bb2fa1a6-99de-4dff-b8d5-fcf2c7b1c680', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:41.846000'); +INSERT INTO `system_log` VALUES ('bbe158bc-6bc0-4391-b6c2-74e36a08bab6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 09:23:32.810000'); +INSERT INTO `system_log` VALUES ('bcd43790-9c7c-47d5-8268-4ae1470241dc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 10:00:21.734000'); +INSERT INTO `system_log` VALUES ('bda23e6a-af04-4bea-945c-6a1ef497c319', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:45:10.072000'); +INSERT INTO `system_log` VALUES ('bdb78df7-ccfb-4eb2-9996-e09b5aaf01f2', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:51:05.781000'); +INSERT INTO `system_log` VALUES ('be0d1dfe-d5ba-43f2-b370-b814fbd44145', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:09:32.867000'); +INSERT INTO `system_log` VALUES ('be7f302c-0afa-42e2-b494-fdd121f29aa5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2023-01-11 13:36:02.702000'); +INSERT INTO `system_log` VALUES ('beb6a374-6dfe-4db6-b0e8-635557a876b6', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:40:44.676000'); +INSERT INTO `system_log` VALUES ('bec40a33-d70c-45d2-8e0a-171455300ef7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:07:47.344000'); +INSERT INTO `system_log` VALUES ('bef24608-ddf3-49c9-b65c-bda1728d7dd1', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:44:53.055000'); +INSERT INTO `system_log` VALUES ('bfae97c7-910f-404f-823d-007e43605791', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-01-11 13:15:23.431000'); +INSERT INTO `system_log` VALUES ('c0011144-85b6-49a6-a707-fb28b89011e5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:18:40.462000'); +INSERT INTO `system_log` VALUES ('c01126eb-6483-40a3-b0b3-4d8afcc3b523', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:20:42.434000'); +INSERT INTO `system_log` VALUES ('c0e32b77-cbd3-441b-af76-214ba13c26a1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 10:16:43.005000'); +INSERT INTO `system_log` VALUES ('c112bf85-8571-4a3a-a03d-78d4b699ed0d', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:45.132000'); +INSERT INTO `system_log` VALUES ('c14efbae-5305-4ae4-9c0a-63ee73d0972a', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:36:23.319000'); +INSERT INTO `system_log` VALUES ('c25a1b7c-ed20-40a2-8d89-a14b0de13263', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 11:16:43.537000'); +INSERT INTO `system_log` VALUES ('c439893d-461b-4444-a37f-32fb81c753a0', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 12:15:50.547000'); +INSERT INTO `system_log` VALUES ('c469bc48-ebc1-4094-9646-9f001bcf8afd', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:21.525000'); +INSERT INTO `system_log` VALUES ('c46e81a7-3930-4d42-aff5-5d1b255ed513', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 18:23:52.031000'); +INSERT INTO `system_log` VALUES ('c5750b02-b5c5-415a-a5e6-0c0f89e5c05c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:06.877000'); +INSERT INTO `system_log` VALUES ('c79a1c79-971f-4503-beee-eb5389465b81', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:43:11.483000'); +INSERT INTO `system_log` VALUES ('c941ea0f-f1fc-4c17-a43b-6cf87f505273', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:40:44.218000'); +INSERT INTO `system_log` VALUES ('c9edd424-99e6-4e24-8fe0-d8fa8f91fc3d', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:41:02.022000'); +INSERT INTO `system_log` VALUES ('c9f1d5e6-c81f-481a-9357-6aed4c2b4b03', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-19 11:43:16.518000'); +INSERT INTO `system_log` VALUES ('ca2e4cbe-ed37-4880-86a1-08b6bd590ecb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-15 20:57:48.475000'); +INSERT INTO `system_log` VALUES ('ca356a8c-adf6-41d0-bb3d-4441aae6898a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-20 19:59:04.049000'); +INSERT INTO `system_log` VALUES ('cb09c36e-8ad0-4ed2-b10d-9de9789c6378', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-23 11:16:25.552000'); +INSERT INTO `system_log` VALUES ('cc3b5143-d5de-4bd4-9299-7c0b3ae610a1', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:58:49.246000'); +INSERT INTO `system_log` VALUES ('ccae1e6f-71c2-4679-81a1-99a861983a19', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 12:15:56.063000'); +INSERT INTO `system_log` VALUES ('cceeaf4f-4d8c-4aa2-81fc-6c66aebd3f1e', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:51:03.773000'); +INSERT INTO `system_log` VALUES ('cdec2cb4-f9a3-46c7-9e95-9e723b463511', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-18 20:23:56.306000'); +INSERT INTO `system_log` VALUES ('ceeb7034-f1ef-42d2-b4c0-464298df0902', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:48:59.580000'); +INSERT INTO `system_log` VALUES ('cf37152d-bc86-4741-bd34-a320ee746a22', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:48:49.509000'); +INSERT INTO `system_log` VALUES ('cf807c1d-df42-4e94-852f-14479470d980', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 11:17:23.539000'); +INSERT INTO `system_log` VALUES ('d00727bf-77c3-477a-a483-1e38b8d68ed4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-03 10:08:57.067000'); +INSERT INTO `system_log` VALUES ('d039b1a1-75b7-4e48-85bc-496666c10657', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:24:43.451000'); +INSERT INTO `system_log` VALUES ('d06758ed-bde9-488b-bf73-88cf825f65ff', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:52.701000'); +INSERT INTO `system_log` VALUES ('d074466a-6d17-4975-a362-72f8637dd92e', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:37:32.690000'); +INSERT INTO `system_log` VALUES ('d098fba7-dcc6-40bd-a8d2-d04cc74892fc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:18:43.342000'); +INSERT INTO `system_log` VALUES ('d0d52e31-4756-4a7e-a72c-eae8180f90c8', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-02-24 09:58:21.864000'); +INSERT INTO `system_log` VALUES ('d0d8832f-c148-467a-97ce-774bce224fb4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:01:29.620000'); +INSERT INTO `system_log` VALUES ('d280225a-faab-4bb4-9057-d746484f2daf', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:22:58.540000'); +INSERT INTO `system_log` VALUES ('d28f822e-1d16-42b1-906c-c9dbc894669c', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-02-24 09:47:46.956000'); +INSERT INTO `system_log` VALUES ('d2ce2cf9-dbe4-4dd2-81a2-cd2303740b50', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-01-11 09:23:24.489000'); +INSERT INTO `system_log` VALUES ('d40b1aac-b7fc-4e07-a7eb-decfccc4105e', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:43:57.106000'); +INSERT INTO `system_log` VALUES ('d5118dbd-3df9-4140-afd4-f262f1041790', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 17:03:06.371000'); +INSERT INTO `system_log` VALUES ('d614c46b-ac37-41a5-bef9-6ca3b363b2d8', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 11:07:38.462000'); +INSERT INTO `system_log` VALUES ('d676cf30-2180-4291-a896-00881e8f8d9b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:27:25.369000'); +INSERT INTO `system_log` VALUES ('d737aa8c-e27b-4cba-978d-2c9dd3906ce6', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 13:10:47.377000'); +INSERT INTO `system_log` VALUES ('d788bc8b-b552-429d-94cb-5d95791c02ad', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 11:37:41.214000'); +INSERT INTO `system_log` VALUES ('d78a3cda-ab44-4307-b46a-1e7369e44aa7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-03 10:09:01.464000'); +INSERT INTO `system_log` VALUES ('d79b4fc2-c102-442c-9831-4524bc0239d6', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:40:48.023000'); +INSERT INTO `system_log` VALUES ('d7c99480-fe37-4514-be69-1ed898a9377f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 12:58:57.135000'); +INSERT INTO `system_log` VALUES ('d8665c91-65be-4234-82aa-5af9c4f8ee48', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:03:05.878000'); +INSERT INTO `system_log` VALUES ('d8a464f5-37c0-4ee1-87af-c1f7abe82f81', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:09:14.806000'); +INSERT INTO `system_log` VALUES ('d8ffd447-1fb2-4b25-9e7f-a16d1a9d85f5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:18:36.364000'); +INSERT INTO `system_log` VALUES ('da22e0a6-b508-4a7b-9462-be0a945f9395', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:09:28.610000'); +INSERT INTO `system_log` VALUES ('da88eb52-a3df-4ca8-a7e6-b5dba999739e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:49.174000'); +INSERT INTO `system_log` VALUES ('db56eaab-8cfe-4a52-b10c-19f74e406943', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 11:17:19.940000'); +INSERT INTO `system_log` VALUES ('dc565208-c8c1-44b7-b647-8fa566d8767e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 20:24:08.434000'); +INSERT INTO `system_log` VALUES ('dc94727d-7c09-406a-bc11-cc5ee2ee3b05', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2022-12-18 11:30:17.056000'); +INSERT INTO `system_log` VALUES ('dcce1ead-d21c-4010-9059-af8b18b62ffc', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-23 19:02:10.646000'); +INSERT INTO `system_log` VALUES ('dcd37ad4-ed5e-403b-8fff-8dfc30c794fa', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:26:42.109000'); +INSERT INTO `system_log` VALUES ('ddb312be-1d75-4e08-bab1-4e700c29d331', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:12:37.527000'); +INSERT INTO `system_log` VALUES ('ddf23055-61fd-40c7-beff-f29fa9d44feb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:43:17.815000'); +INSERT INTO `system_log` VALUES ('de989105-1ab7-48cb-8fcb-0c4fc486228e', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:42:47.717000'); +INSERT INTO `system_log` VALUES ('defacdf4-b879-4e9d-ac8c-18fa9bd02529', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-23 19:02:24.992000'); +INSERT INTO `system_log` VALUES ('df39ea38-07fd-48d9-a95d-4259beba9ede', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:48:35.064000'); +INSERT INTO `system_log` VALUES ('df6e674e-7473-4872-b0d5-6325ad569ac3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 12:48:10.308000'); +INSERT INTO `system_log` VALUES ('dfdb5b30-f036-42ae-b495-a927b9637e36', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DriverController.save', '驾驶员管理', '2023-01-11 13:38:53.620000'); +INSERT INTO `system_log` VALUES ('e071c5e2-53ec-423b-bd74-39e5f74a6858', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2023-02-24 09:40:50.460000'); +INSERT INTO `system_log` VALUES ('e128f208-e800-44aa-8b84-976114205e97', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:35:15.068000'); +INSERT INTO `system_log` VALUES ('e18c284f-4e20-4d39-8091-4d2108a56eb7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:06:02.763000'); +INSERT INTO `system_log` VALUES ('e18f0c0b-6676-4659-a982-7b814ef99fa3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:18:30.065000'); +INSERT INTO `system_log` VALUES ('e2f89d82-205c-449d-818c-2d336c93a3f0', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:35:57.570000'); +INSERT INTO `system_log` VALUES ('e3349316-db5b-4c5b-af92-f41b5e28db6b', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:43:07.470000'); +INSERT INTO `system_log` VALUES ('e38ef3c4-53f7-4d96-a1d3-9df7367fcd14', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 13:15:54.278000'); +INSERT INTO `system_log` VALUES ('e3a8d71f-aa55-4275-9f53-35274a82e042', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:05:28.659000'); +INSERT INTO `system_log` VALUES ('e50a3d2a-2049-41a8-9a36-e54fa8c31fd4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 20:24:05.253000'); +INSERT INTO `system_log` VALUES ('e513ef31-59eb-4619-bcd4-712afba06d7a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:35:52.815000'); +INSERT INTO `system_log` VALUES ('e6529259-ca7e-4d46-8d45-9c2e593eba8c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 11:07:17.996000'); +INSERT INTO `system_log` VALUES ('e69a031f-4631-42cf-b9e3-c703d08dd805', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-19 11:43:15.469000'); +INSERT INTO `system_log` VALUES ('e6a5640d-bd85-4f30-9f91-4f7346e8f103', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 15:11:29.087000'); +INSERT INTO `system_log` VALUES ('e6dacf0e-74ef-4225-8b08-ca90472b70fb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-20 19:58:50.077000'); +INSERT INTO `system_log` VALUES ('e74d70e9-0616-43d8-8755-aad756afaaf7', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:02:42.269000'); +INSERT INTO `system_log` VALUES ('e770f5bd-ba7a-40c9-9c03-69bfa3dc0ccf', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:15:29.007000'); +INSERT INTO `system_log` VALUES ('e866503d-fe5a-488c-85e2-1a91d3acde39', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:36:16.578000'); +INSERT INTO `system_log` VALUES ('e870ae71-4786-4ade-9af3-887f358ff5ea', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-01-11 13:38:02.871000'); +INSERT INTO `system_log` VALUES ('e90d3665-69b1-47b4-821a-408eda62e406', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:29:56.723000'); +INSERT INTO `system_log` VALUES ('e92ca93b-0c85-4c95-bd87-d5c85598fb32', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:27:04.690000'); +INSERT INTO `system_log` VALUES ('e9ac99d4-14cc-43f4-9ebf-59193a0d7787', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:49:25.521000'); +INSERT INTO `system_log` VALUES ('eb087847-b43d-4125-a638-9c101614bcc1', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-23 11:12:09.841000'); +INSERT INTO `system_log` VALUES ('eb4ce352-7355-4e9e-977b-9223c215988f', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:42:21.327000'); +INSERT INTO `system_log` VALUES ('ed994aa5-7da3-4ac7-a85f-3cd8ecf0ee5a', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-01-11 09:26:39.927000'); +INSERT INTO `system_log` VALUES ('edc64ec6-34a4-4795-b941-caa9c1666b83', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:09:29.459000'); +INSERT INTO `system_log` VALUES ('ee2ba066-7cd2-41d0-bbac-95984f4db074', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.DistributionController.save', '配送管理', '2023-02-24 09:53:53.700000'); +INSERT INTO `system_log` VALUES ('ee60e1ab-56ca-43b8-b1d4-f75d11619556', 'code51User@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2023-02-24 09:49:24.889000'); +INSERT INTO `system_log` VALUES ('ef9af503-7e1b-41ec-a28c-851aa04ae3b5', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2022-12-18 12:15:50.549000'); +INSERT INTO `system_log` VALUES ('efe97256-1479-4975-ab47-5a31755a90ee', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findByLikeName', '商品管理', '2023-01-11 11:05:14.950000'); +INSERT INTO `system_log` VALUES ('f040fb54-7e88-4910-936b-3b15a8d6ccc3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-01-11 09:11:05.506000'); +INSERT INTO `system_log` VALUES ('f0e18f59-b4b6-4534-b483-115dce75c059', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 14:59:47.496000'); +INSERT INTO `system_log` VALUES ('f1b6118c-3a23-460c-9d35-620acb5697ca', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:44:53.055000'); +INSERT INTO `system_log` VALUES ('f1b64160-7c16-4cd7-b2d9-51fcf49abdf4', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 09:19:19.949000'); +INSERT INTO `system_log` VALUES ('f1c113e1-dd54-4e04-b356-cd93e6803200', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-19 11:43:10.861000'); +INSERT INTO `system_log` VALUES ('f3947120-4e96-4978-8ab8-6ea413d492a8', 'admin@qq.com', '新增', '127.0.0.1', 'com.example.api.controller.CommodityController.save', '商品管理', '2023-01-11 11:05:03.463000'); +INSERT INTO `system_log` VALUES ('f480774f-e25f-4da2-9fa0-9c53fcc98f8c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-01-11 10:16:29.688000'); +INSERT INTO `system_log` VALUES ('f4f63cb7-2a5f-452a-80aa-e40377a80102', 'abc@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-18 12:16:01.263000'); +INSERT INTO `system_log` VALUES ('f5915e05-2355-494a-b042-c2a41625f524', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:40:50.078000'); +INSERT INTO `system_log` VALUES ('f5c130de-f6cb-4c05-8472-40da8e099e5b', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:01:30.544000'); +INSERT INTO `system_log` VALUES ('f6a2f850-c540-4b83-9502-cbcd06131ec9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 11:05:04.149000'); +INSERT INTO `system_log` VALUES ('f6f5738c-f196-412c-a8c4-9f94d492f1b7', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:29.843000'); +INSERT INTO `system_log` VALUES ('f774940a-9e7f-4ecb-8e65-7cb9a7909e19', 'code51User@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-24 09:53:44.475000'); +INSERT INTO `system_log` VALUES ('f7d944f9-692c-4759-a857-f4672a43c65f', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 10:02:08.182000'); +INSERT INTO `system_log` VALUES ('f8386bd8-8db8-49fb-9100-c988c7881fcc', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-24 09:36:13.350000'); +INSERT INTO `system_log` VALUES ('f84532db-e502-49c0-a572-f0f3c76d4bdd', 'testUser@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-24 09:51:25.546000'); +INSERT INTO `system_log` VALUES ('f8fb4848-84b4-4307-8341-8bd8fc124834', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 11:21:38.466000'); +INSERT INTO `system_log` VALUES ('f9559e2b-4dd5-46c2-adb5-18968a080cdb', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2022-12-23 19:07:50.563000'); +INSERT INTO `system_log` VALUES ('f9fd32a4-3c1d-4ddd-a5a6-e94d04fe4543', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2023-02-24 09:55:54.607000'); +INSERT INTO `system_log` VALUES ('f9feefd2-4a32-4175-bb66-19d9ad2a76b5', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2022-12-19 13:10:30.279000'); +INSERT INTO `system_log` VALUES ('fb1f18ca-e7d7-4984-ac83-343283ad8f64', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.EmployeeController.findAll', '员工管理', '2023-02-24 09:56:10.824000'); +INSERT INTO `system_log` VALUES ('fb7041cc-6be3-4d9d-a53d-ef1786a3cb6e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-03 10:08:44.785000'); +INSERT INTO `system_log` VALUES ('fd3a4c5c-b289-4201-8058-8ed4852ae1c9', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DistributionController.findAll', '配送管理', '2023-02-20 19:59:00.038000'); +INSERT INTO `system_log` VALUES ('fd4fb9b6-687b-4cf3-92a2-a3c55ab3c539', '123@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.WarehouseController.findAll', '仓库管理', '2023-02-23 11:16:30.719000'); +INSERT INTO `system_log` VALUES ('fd639c7f-6e52-4ee0-9ffd-1df0dd87076c', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.DriverController.findAll', '驾驶员管理', '2022-12-19 13:10:58.648000'); +INSERT INTO `system_log` VALUES ('fd64dab2-6374-4cd4-a2de-b2044e820380', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.VehicleController.findAll', '车辆管理', '2022-12-19 11:21:31.942000'); +INSERT INTO `system_log` VALUES ('fd64e793-44e0-41f5-86fe-f7525e3cee8e', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-18 11:30:17.740000'); +INSERT INTO `system_log` VALUES ('fdfe2804-b43d-4a7d-a48e-aa861ba5c284', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-01-11 13:39:20.473000'); +INSERT INTO `system_log` VALUES ('fe3d8c18-e395-4342-86ac-06f79aace322', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2023-02-16 10:30:18.971000'); +INSERT INTO `system_log` VALUES ('fe4899d1-55dc-4d8e-9745-9f598d1e21e3', 'admin@qq.com', '查询', '127.0.0.1', 'com.example.api.controller.CommodityController.findAll', '商品管理', '2022-12-23 19:03:22.603000'); + +-- ---------------------------- +-- Table structure for user +-- ---------------------------- +DROP TABLE IF EXISTS `user`; +CREATE TABLE `user` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `update_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of user +-- ---------------------------- + +-- ---------------------------- +-- Table structure for vehicle +-- ---------------------------- +DROP TABLE IF EXISTS `vehicle`; +CREATE TABLE `vehicle` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `driving` bit(1) NOT NULL, + `number` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of vehicle +-- ---------------------------- +INSERT INTO `vehicle` VALUES ('751ecedf-2211-416f-9fc8-6c797ff51d16', '2023-02-24 09:45:23', b'0', '京A0010', '小型汽车'); +INSERT INTO `vehicle` VALUES ('786fb288-4445-4784-b923-de013fa3892f', '2023-01-11 13:38:19', b'0', '京A0001', '货车'); +INSERT INTO `vehicle` VALUES ('ce33de59-9584-4161-a17e-9046399d14c6', '2022-11-27 12:26:18', b'0', '京A0000', '货车'); + +-- ---------------------------- +-- Table structure for warehouse +-- ---------------------------- +DROP TABLE IF EXISTS `warehouse`; +CREATE TABLE `warehouse` ( + `id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, + `create_at` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + `principle` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of warehouse +-- ---------------------------- +INSERT INTO `warehouse` VALUES ('7159a7e3-32c8-4c29-9608-039472ae47ac', '2023-02-24 09:43:05', '源码乐园', '源码乐园'); +INSERT INTO `warehouse` VALUES ('9f2a2784-e182-4fdf-85e8-c3bde6d539d2', '2022-11-22 14:16:46', 'A号仓库', '杰克'); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/Vue/.gitignore b/Vue/.gitignore new file mode 100644 index 00000000..403adbc1 --- /dev/null +++ b/Vue/.gitignore @@ -0,0 +1,23 @@ +.DS_Store +node_modules +/dist + + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/Vue/package-lock.json b/Vue/package-lock.json new file mode 100644 index 00000000..062b29de --- /dev/null +++ b/Vue/package-lock.json @@ -0,0 +1,11214 @@ +{ + "name": "wab-app", + "version": "0.1.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@achrinza/node-ipc": { + "version": "9.2.2", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.2.tgz", + "integrity": "sha512-b90U39dx0cU6emsOvy5hxU4ApNXnE3+Tuo8XQZfiKTGelDwpMwBVgBP7QX6dGTcJgu/miyJuNJ/2naFBliNWEw==", + "dev": true, + "requires": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + } + }, + "@ant-design/colors": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-3.2.2.tgz", + "integrity": "sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==", + "requires": { + "tinycolor2": "^1.4.1" + } + }, + "@ant-design/icons": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/@ant-design/icons/-/icons-2.1.1.tgz", + "integrity": "sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w==" + }, + "@ant-design/icons-vue": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-2.0.0.tgz", + "integrity": "sha512-2c0QQE5hL4N48k5NkPG5sdpMl9YnvyNhf0U7YkdZYDlLnspoRU7vIA0UK9eHBs6OpFLcJB6o8eJrIl2ajBskPg==", + "requires": { + "@ant-design/colors": "^3.1.0", + "babel-runtime": "^6.26.0" + } + }, + "@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.23.3", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.23.3.tgz", + "integrity": "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==" + }, + "@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "dev": true + }, + "@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "dev": true + }, + "@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmmirror.com/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "dev": true, + "requires": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "dev": true, + "requires": { + "@hapi/hoek": "^8.3.0" + } + }, + "@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", + "dev": true, + "requires": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "requires": { + "easy-stack": "1.0.1" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@simonwep/pickr": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.7.4.tgz", + "integrity": "sha512-fq7jgKJT21uWGC1mARBHvvd1JYlEf93o7SuVOB4Lr0x/2UPuNC9Oe9n/GzVeg4oVtqMDfh1wIEJpsdOJEZb+3g==", + "requires": { + "core-js": "^3.6.5", + "nanopop": "^2.1.0" + }, + "dependencies": { + "core-js": { + "version": "3.33.2", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.33.2.tgz", + "integrity": "sha512-XeBzWI6QL3nJQiHmdzbAOiMYqjrb7hwU7A39Qhvd/POSa/t9E1AeZyEZx3fNvp/vtM8zXwhoL0FsiS0hD0pruQ==" + } + } + }, + "@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "requires": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true + }, + "@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.3", + "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.3.tgz", + "integrity": "sha512-6mfQ6iNvhSKCZJoY6sIG3m0pKkdUcweVNOLuBBKvoWGzl2yRxOJcYOTRyLKt3nxXvBLJWa6QkW//tgbIwJehmA==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "@types/express-serve-static-core": { + "version": "4.17.41", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true + }, + "@types/node": { + "version": "20.9.2", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.9.2.tgz", + "integrity": "sha512-WHZXKFCEyIUJzAwh3NyyTHYSR35SevJ6mZ1nWwJafKtiQbqRTIKSRcw3Ma3acqgsent3RRDqeVwpHntMk+9irg==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true + }, + "@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmmirror.com/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "dev": true + }, + "@types/qs": { + "version": "6.9.10", + "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "@types/serve-static": { + "version": "1.15.5", + "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "@types/source-list-map": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/@types/source-list-map/-/source-list-map-0.1.5.tgz", + "integrity": "sha512-cHBTLeIGIREJx839cDfMLKWao+FaJOlaPz4mnFHXUzShS8sXhzw6irhvIpYvp28TbTmTeAt3v+QgHMANsGbQtA==", + "dev": true + }, + "@types/tapable": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/@types/tapable/-/tapable-1.0.11.tgz", + "integrity": "sha512-R3ltemSqZ/TKOBeyy+GBfZCLX3AYpxqarIbUMNe7+lxdazJp4iWLFpmjgBeZoRiKrWNImer1oWOlG2sDR6vGaw==", + "dev": true + }, + "@types/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmmirror.com/@types/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-Hm/T0kV3ywpJyMGNbsItdivRhYNCQQf1IIsYsXnoVPES4t+FMLyDe0/K+Ea7ahWtMtSNb22ZdY7MIyoD9rqARg==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "@types/webpack": { + "version": "4.41.36", + "resolved": "https://registry.npmmirror.com/@types/webpack/-/webpack-4.41.36.tgz", + "integrity": "sha512-pF+DVW1pMLmgsPXqJr5QimdxIzOhe8oGKB98gdqAm0egKBy1lOLD5mRxbYboMQRkpYcG7BYcpqYblpKyvE7vhQ==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/tapable": "^1", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "anymatch": "^3.0.0", + "source-map": "^0.6.0" + } + }, + "@types/webpack-dev-server": { + "version": "3.11.6", + "resolved": "https://registry.npmmirror.com/@types/webpack-dev-server/-/webpack-dev-server-3.11.6.tgz", + "integrity": "sha512-XCph0RiiqFGetukCTC3KVnY1jwLcZ84illFRMbyFzCcWl90B/76ew0tSqF46oBhnLC4obNDG7dMO0JfTN0MgMQ==", + "dev": true, + "requires": { + "@types/connect-history-api-fallback": "*", + "@types/express": "*", + "@types/serve-static": "*", + "@types/webpack": "^4", + "http-proxy-middleware": "^1.0.0" + } + }, + "@types/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/@types/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-4nZOdMwSPHZ4pTEZzSp0AsTM4K7Qmu40UKW4tJDiOVs20UzYF9l+qUe4s0ftfN0pin06n+5cWWDJXH+sbhAiDw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/source-list-map": "*", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true + } + } + }, + "@vue/cli-overlay": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-4.5.19.tgz", + "integrity": "sha512-GdxvNSmOw7NHIazCO8gTK+xZbaOmScTtxj6eHVeMbYpDYVPJ+th3VMLWNpw/b6uOjwzzcyKlA5dRQ1DAb+gF/g==", + "dev": true + }, + "@vue/cli-plugin-router": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-4.5.19.tgz", + "integrity": "sha512-3icGzH1IbVYmMMsOwYa0lal/gtvZLebFXdE5hcQJo2mnTwngXGMTyYAzL56EgHBPjbMmRpyj6Iw9k4aVInVX6A==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^4.5.19" + } + }, + "@vue/cli-plugin-vuex": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.5.19.tgz", + "integrity": "sha512-DUmfdkG3pCdkP7Iznd87RfE9Qm42mgp2hcrNcYQYSru1W1gX2dG/JcW8bxmeGSa06lsxi9LEIc/QD1yPajSCZw==", + "dev": true + }, + "@vue/cli-service": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-4.5.19.tgz", + "integrity": "sha512-+Wpvj8fMTCt9ZPOLu5YaLkFCQmB4MrZ26aRmhhKiCQ/4PMoL6mLezfqdt6c+m2htM+1WV5RunRo+0WHl2DfwZA==", + "dev": true, + "requires": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@soda/get-current-script": "^1.0.0", + "@types/minimist": "^1.2.0", + "@types/webpack": "^4.0.0", + "@types/webpack-dev-server": "^3.11.0", + "@vue/cli-overlay": "^4.5.19", + "@vue/cli-plugin-router": "^4.5.19", + "@vue/cli-plugin-vuex": "^4.5.19", + "@vue/cli-shared-utils": "^4.5.19", + "@vue/component-compiler-utils": "^3.1.2", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^7.4.0", + "acorn-walk": "^7.1.1", + "address": "^1.1.2", + "autoprefixer": "^9.8.6", + "browserslist": "^4.12.0", + "cache-loader": "^4.1.0", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.4", + "clipboardy": "^2.3.0", + "cliui": "^6.0.0", + "copy-webpack-plugin": "^5.1.1", + "css-loader": "^3.5.3", + "cssnano": "^4.1.10", + "debug": "^4.1.1", + "default-gateway": "^5.0.5", + "dotenv": "^8.2.0", + "dotenv-expand": "^5.1.0", + "file-loader": "^4.2.0", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.9.0", + "minimist": "^1.2.5", + "pnp-webpack-plugin": "^1.6.4", + "portfinder": "^1.0.26", + "postcss-loader": "^3.0.0", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^1.4.4", + "thread-loader": "^2.1.3", + "url-loader": "^2.2.0", + "vue-loader": "^15.9.2", + "vue-loader-v16": "npm:vue-loader@^16.1.0", + "vue-style-loader": "^4.1.2", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.8.0", + "webpack-chain": "^6.4.0", + "webpack-dev-server": "^3.11.0", + "webpack-merge": "^4.2.2" + } + }, + "@vue/cli-shared-utils": { + "version": "4.5.19", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-4.5.19.tgz", + "integrity": "sha512-JYpdsrC/d9elerKxbEUtmSSU6QRM60rirVubOewECHkBHj+tLNznWq/EhCjswywtePyLaMUK25eTqnTSZlEE+g==", + "dev": true, + "requires": { + "@achrinza/node-ipc": "9.2.2", + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.2", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "read-pkg": "^5.1.1", + "request": "^2.88.2", + "semver": "^6.1.0", + "strip-ansi": "^6.0.0" + } + }, + "@vue/compiler-sfc": { + "version": "2.7.15", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.15.tgz", + "integrity": "sha512-FCvIEevPmgCgqFBH7wD+3B97y7u7oj/Wr69zADBf403Tui377bThTjBvekaZvlRr4IwUAu3M6hYZeULZFJbdYg==", + "requires": { + "@babel/parser": "^7.18.4", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + } + }, + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + } + } + }, + "@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", + "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", + "dev": true + }, + "@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, + "add-dom-event-listener": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/add-dom-event-listener/-/add-dom-event-listener-1.1.0.tgz", + "integrity": "sha512-WCxx1ixHT0GQU9hb0KI/mhgRQhnU+U3GvwY6ZvVjYq8rsihIGoaIOUbY0yMPBxLH5MDtr0kz3fisWGNcbWW7Jw==", + "requires": { + "object-assign": "4.x" + } + }, + "address": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "dev": true + }, + "ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ant-design-vue": { + "version": "1.7.8", + "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-1.7.8.tgz", + "integrity": "sha512-F1hmiS9vwbyfuFvlamdW5l9bHKqRlj9wHaGDIE41NZMWXyWy8qL0UFa/+I0Wl8gQWZCqODW5pN6Yfoyn85At3A==", + "requires": { + "@ant-design/icons": "^2.1.1", + "@ant-design/icons-vue": "^2.0.0", + "@simonwep/pickr": "~1.7.0", + "add-dom-event-listener": "^1.0.2", + "array-tree-filter": "^2.1.0", + "async-validator": "^3.0.3", + "babel-helper-vue-jsx-merge-props": "^2.0.3", + "babel-runtime": "6.x", + "classnames": "^2.2.5", + "component-classes": "^1.2.6", + "dom-align": "^1.10.4", + "dom-closest": "^0.2.0", + "dom-scroll-into-view": "^2.0.0", + "enquire.js": "^2.1.6", + "intersperse": "^1.0.0", + "is-mobile": "^2.2.1", + "is-negative-zero": "^2.0.0", + "ismobilejs": "^1.0.0", + "json2mq": "^0.2.0", + "lodash": "^4.17.5", + "moment": "^2.21.0", + "mutationobserver-shim": "^0.3.2", + "node-emoji": "^1.10.0", + "omit.js": "^1.0.0", + "raf": "^3.4.0", + "resize-observer-polyfill": "^1.5.1", + "shallow-equal": "^1.0.0", + "shallowequal": "^1.0.2", + "vue-ref": "^2.0.0", + "warning": "^4.0.0" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "arch": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true + }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true + }, + "array.prototype.reduce": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/array.prototype.reduce/-/array.prototype.reduce-1.0.6.tgz", + "integrity": "sha512-UW+Mz8LG/sPSU8jRDCjVr6J/ZKAGpHfwrZ6kWTG5qCxIEiXdVshqGnu5vEZA8S1y6X4aCSbQZ0/EEsfvEvBiSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + } + }, + "arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + } + }, + "asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "assert": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/assert/-/assert-1.5.1.tgz", + "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", + "dev": true, + "requires": { + "object.assign": "^4.1.4", + "util": "^0.10.4" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmmirror.com/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true + }, + "async": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "async-validator": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-3.5.2.tgz", + "integrity": "sha512-8eLCg00W9pIRZSB781UUX/H6Oskmm8xloZfr09lz5bikRpBVDlJ3hRVuxxP1SxcwsEYfJ4IU8Q19Y8/893r3rQ==" + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true + }, + "aws4": { + "version": "1.12.0", + "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.12.0.tgz", + "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", + "dev": true + }, + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmmirror.com/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmmirror.com/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + } + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + } + }, + "big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "optional": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.4", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + } + }, + "buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + } + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-json": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/buffer-json/-/buffer-json-2.0.0.tgz", + "integrity": "sha512-+jjPFVqyfF1esi9fvfUs3NqM0pH1ziZ36VP4hmA/y/Ssfo/5w5xHKfTw9BwQjoJ1w/oVtpLomqwUHKdefGyuHw==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + }, + "dependencies": { + "ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-loader": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/cache-loader/-/cache-loader-4.1.0.tgz", + "integrity": "sha512-ftOayxve0PwKzBF/GLsZNC9fJBXl8lkZE3TOsjkboHfVHVkL39iUEs1FO07A33mizmci5Dudt38UZrrYXDtbhw==", + "dev": true, + "requires": { + "buffer-json": "^2.0.0", + "find-cache-dir": "^3.0.0", + "loader-utils": "^1.2.3", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.1", + "schema-utils": "^2.0.0" + } + }, + "call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + } + }, + "call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001563", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", + "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", + "dev": true + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "classnames": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/classnames/-/classnames-2.3.2.tgz", + "integrity": "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" + }, + "clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "cli-spinners": { + "version": "2.9.1", + "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.1.tgz", + "integrity": "sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==", + "dev": true + }, + "clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "requires": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + } + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + } + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dev": true, + "requires": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "component-classes": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/component-classes/-/component-classes-1.2.6.tgz", + "integrity": "sha512-hPFGULxdwugu1QWW3SvVOCUHLzO34+a2J6Wqy0c5ASQkfi9/8nZcBB0ZohaEbXOQlCflMAEMmEWk7u7BVs4koA==", + "requires": { + "component-indexof": "0.0.3" + } + }, + "component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true + }, + "component-indexof": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/component-indexof/-/component-indexof-0.0.3.tgz", + "integrity": "sha512-puDQKvx/64HZXb4hBwIcvQLaLgux8o1CbWl39s41hrIIZDl1lJiD5jc22gj3RBeGK0ovxALDYpIbyjqDUUl0rw==" + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true + }, + "copy-webpack-plugin": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-5.1.2.tgz", + "integrity": "sha512-Uh7crJAco3AjBvgAy9Z75CjK8IG+gxaErro71THQ+vv/bl4HaQcpkexAY8KVW/T6D2W2IRr+couF/knIRkZMIQ==", + "dev": true, + "requires": { + "cacache": "^12.0.3", + "find-cache-dir": "^2.1.0", + "glob-parent": "^3.1.0", + "globby": "^7.1.1", + "is-glob": "^4.0.1", + "loader-utils": "^1.2.3", + "minimatch": "^3.0.4", + "normalize-path": "^3.0.0", + "p-limit": "^2.2.1", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "webpack-log": "^2.0.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/globby/-/globby-7.1.1.tgz", + "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "requires": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "dependencies": { + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmmirror.com/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "css-loader": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-3.6.0.tgz", + "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==", + "dev": true, + "requires": { + "camelcase": "^5.3.1", + "cssesc": "^3.0.0", + "icss-utils": "^4.1.1", + "loader-utils": "^1.2.3", + "normalize-path": "^3.0.0", + "postcss": "^7.0.32", + "postcss-modules-extract-imports": "^2.0.0", + "postcss-modules-local-by-default": "^3.0.2", + "postcss-modules-scope": "^2.2.0", + "postcss-modules-values": "^3.0.0", + "postcss-value-parser": "^4.1.0", + "schema-utils": "^2.7.0", + "semver": "^6.3.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "dev": true, + "requires": { + "mdn-data": "2.0.4", + "source-map": "^0.6.1" + } + }, + "css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "dev": true + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + } + } + }, + "csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "cyclist": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.2.tgz", + "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true + }, + "decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true + }, + "deep-equal": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.2.tgz", + "integrity": "sha512-5tdhKF6DbU7iIzrIOa1AOUt39ZRm13cmL1cGEh//aqR8x9+tNfbywRf0n5FD/18OKMdo7DNEtrX2t22ZAkI+eg==", + "dev": true, + "requires": { + "is-arguments": "^1.1.1", + "is-date-object": "^1.0.5", + "is-regex": "^1.1.4", + "object-is": "^1.1.5", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.5.1" + } + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + }, + "default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", + "dev": true, + "requires": { + "execa": "^3.3.0" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + } + } + }, + "del": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "dependencies": { + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + } + } + } + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "dom-align": { + "version": "1.12.4", + "resolved": "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz", + "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" + }, + "dom-closest": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-closest/-/dom-closest-0.2.0.tgz", + "integrity": "sha512-6neTn1BtJlTSt+XSISXpnOsF1uni1CHsP/tmzZMGWxasYFHsBOqrHPnzmneqEgKhpagnfnfSfbvRRW0xFsBHAA==", + "requires": { + "dom-matches": ">=1.0.1" + } + }, + "dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "requires": { + "utila": "~0.4" + } + }, + "dom-matches": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/dom-matches/-/dom-matches-2.0.0.tgz", + "integrity": "sha512-2VI856xEDCLXi19W+4BechR5/oIS6bKCKqcf16GR8Pg7dGLJ/eBOWVbCmQx2ISvYH6wTNx5Ef7JTOw1dRGRx6A==" + }, + "dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==" + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + } + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotenv": { + "version": "8.6.0", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-8.6.0.tgz", + "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "downloadjs": { + "version": "1.4.7", + "resolved": "https://registry.npmmirror.com/downloadjs/-/downloadjs-1.4.7.tgz", + "integrity": "sha512-LN1gO7+u9xjU5oEScGFKvXhYf7Y/empUIIEAGBs1LzUq/rg5duiDrkuH5A2lQGd5jfMOb9X9usDa2oVXwJ0U/Q==" + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "requires": { + "tslib": "2.3.0", + "zrender": "5.4.4" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmmirror.com/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.588", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.588.tgz", + "integrity": "sha512-soytjxwbgcCu7nh5Pf4S2/4wa6UIu+A3p03U2yVr53qGxi1/VTR3ENI+p50v+UxqqZAfl48j3z55ud7VHIOr9w==", + "dev": true + }, + "element-ui": { + "version": "2.15.14", + "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.14.tgz", + "integrity": "sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA==", + "requires": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + }, + "dependencies": { + "async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "requires": { + "babel-runtime": "6.x" + } + } + } + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "enquire.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/enquire.js/-/enquire.js-2.1.6.tgz", + "integrity": "sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==" + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "requires": { + "stackframe": "^1.3.4" + } + }, + "es-abstract": { + "version": "1.22.3", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.22.3.tgz", + "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "dev": true, + "requires": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" + } + }, + "es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "es-set-tostringtag": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", + "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmmirror.com/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "file-loader": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/file-loader/-/file-loader-4.3.0.tgz", + "integrity": "sha512-aKrYPYjF1yG3oX0kWRrqrSMfgftm7oJW5M+m4owoldH5C51C0RkIwB++JbRvEW3IU6/ZG5n8UvEcdgwOt2UOWA==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + } + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", + "dev": true + }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "globby": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "requires": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "dependencies": { + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + } + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "dev": true + }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true + }, + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", + "dev": true + }, + "html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmmirror.com/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + } + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "dev": true + }, + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + } + } + }, + "htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + }, + "dependencies": { + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-1.3.1.tgz", + "integrity": "sha512-13eVVDYS4z79w7f1+NPllJtOQFx/FdUW4btIvVRMaRlUY9VGstAbo5MOhLEuUgZFRHn3x50ufn25zkj/boZnEg==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.5", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-4.1.1.tgz", + "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + } + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "requires": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "dependencies": { + "default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + } + } + } + }, + "internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + } + }, + "intersperse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/intersperse/-/intersperse-1.0.0.tgz", + "integrity": "sha512-LGcfug7OTeWkaQ8PEq8XbTy9Jl6uCNg8DrPnQUmwxSY8UETj1Y+LLmpdD0qHdEj6KVchuH3BE3ZzIXQ1t3oFUw==" + }, + "ip": { + "version": "1.1.8", + "resolved": "https://registry.npmmirror.com/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", + "dev": true + }, + "is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "requires": { + "hasown": "^2.0.0" + } + }, + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-mobile": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/is-mobile/-/is-mobile-2.2.2.tgz", + "integrity": "sha512-wW/SXnYJkTjs++tVK5b6kVITZpAZPtUrt9SF80vvxGiF/Oywal+COk1jlRkiVq15RFNEQKQY31TkV24/1T5cVg==" + }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true + }, + "is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "requires": { + "is-path-inside": "^2.1.0" + } + }, + "is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "requires": { + "path-is-inside": "^1.0.2" + } + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, + "is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmmirror.com/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "requires": { + "which-typed-array": "^1.1.11" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true + }, + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "ismobilejs": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ismobilejs/-/ismobilejs-1.1.1.tgz", + "integrity": "sha512-VaFW53yt8QO61k2WJui0dHf4SlL8lxBofUuUmwBo0ljPk0Drz2TiuDW4jo3wDcv41qy/SxrJ+VAzJ/qYqsmzRw==" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true + }, + "js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "requires": { + "string-convert": "^0.2.0" + } + }, + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "launch-editor": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", + "dev": true, + "requires": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "launch-editor-middleware": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.6.1.tgz", + "integrity": "sha512-Fg/xYhf7ARmRp40n18wIfJyuAMEjXo67Yull7uF7d0OJ3qA4EYJISt1XfPPn69IIJ5jKgQwzcg6DqHYo95LL/g==", + "dev": true, + "requires": { + "launch-editor": "^2.6.1" + } + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "dev": true + }, + "loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loglevel": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz", + "integrity": "sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "dev": true + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true + }, + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==", + "dev": true + }, + "mutationobserver-shim": { + "version": "0.3.7", + "resolved": "https://registry.npmmirror.com/mutationobserver-shim/-/mutationobserver-shim-0.3.7.tgz", + "integrity": "sha512-oRIDTyZQU96nAiz2AQyngwx1e89iApl2hN5AOYwyxLUB47UYsU3Wv9lJWqH5y/QdiYkc5HQLi23ZNB3fELdHcQ==" + }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "nanopop": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/nanopop/-/nanopop-2.3.0.tgz", + "integrity": "sha512-fzN+T2K7/Ah25XU02MJkPZ5q4Tj5FpjmIYq4rvoHX4yb16HzFdCO6JxFFn5Y/oBhQ8no8fUZavnyIv9/+xkBBw==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-emoji": { + "version": "1.11.0", + "resolved": "https://registry.npmmirror.com/node-emoji/-/node-emoji-1.11.0.tgz", + "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", + "requires": { + "lodash": "^4.17.21" + } + }, + "node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==" + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", + "dev": true + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.7", + "resolved": "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.7.tgz", + "integrity": "sha512-PrJz0C2xJ58FNn11XV2lr4Jt5Gzl94qpy9Lu0JlfEj14z88sqbSBJCBEzdlNUCzY2gburhbrwOZ5BHCmuNUy0g==", + "dev": true, + "requires": { + "array.prototype.reduce": "^1.0.6", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "safe-array-concat": "^1.0.0" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "omit.js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/omit.js/-/omit.js-1.0.2.tgz", + "integrity": "sha512-/QPc6G2NS+8d4L/cQhbk6Yit1WTB6Us2g84A7A/1+w9d/eRGHyEqC5kkQtHVoHZ5NFWGG7tUGgrhVZwgZanKrQ==", + "requires": { + "babel-runtime": "^6.23.0" + } + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "open": { + "version": "6.4.0", + "resolved": "https://registry.npmmirror.com/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "opn": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "ora": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true + }, + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "requires": { + "retry": "^0.12.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + } + } + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==" + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "pnp-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-2Rb3vm+EXble/sMXNSu6eoBx8e79gKqhNq9F5ZWW6ERNCTE/Q0wQNne5541tE5vKjfM8hpNCYL+LGc1YTfI0dg==", + "dev": true, + "requires": { + "ts-pnp": "^1.1.6" + } + }, + "portfinder": { + "version": "1.0.32", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", + "dev": true, + "requires": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true + }, + "postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "requires": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-2.0.0.tgz", + "integrity": "sha512-LaYLDNS4SG8Q5WAWqIJgdHPJrDDr/Lv775rMBFUbgjTz6j34lUznACHcdRWroPvXANP2Vj7yNK57vp9eFqzLWQ==", + "dev": true, + "requires": { + "postcss": "^7.0.5" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-modules-local-by-default": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz", + "integrity": "sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw==", + "dev": true, + "requires": { + "icss-utils": "^4.1.1", + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-modules-scope": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", + "dev": true, + "requires": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^6.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-modules-values": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz", + "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==", + "dev": true, + "requires": { + "icss-utils": "^4.0.0", + "postcss": "^7.0.6" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + } + } + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + } + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true + }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "optional": true + }, + "pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "requires": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "dev": true + }, + "qs": { + "version": "6.5.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "requires": { + "performance-now": "^2.1.0" + } + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "requires": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true + }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "requires": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "dev": true + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "1.10.14", + "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", + "dev": true, + "requires": { + "node-forge": "^0.10.0" + } + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "requires": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + } + }, + "set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + } + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, + "shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true + }, + "shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "sockjs-client": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/sockjs-client/-/sockjs-client-1.6.1.tgz", + "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "eventsource": "^2.0.2", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true + } + } + }, + "source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "requires": { + "minipass": "^3.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true + }, + "string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + } + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + } + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "requires": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + }, + "tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "dev": true + }, + "terser": { + "version": "4.8.1", + "resolved": "https://registry.npmmirror.com/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "dependencies": { + "find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + } + } + }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, + "thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", + "dev": true, + "requires": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + } + }, + "throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==" + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==", + "dev": true + }, + "tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "requires": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "ts-pnp": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/ts-pnp/-/ts-pnp-1.2.0.tgz", + "integrity": "sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==", + "dev": true + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "requires": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.19.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + } + } + }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "dev": true + }, + "url": { + "version": "0.11.3", + "resolved": "https://registry.npmmirror.com/url/-/url-0.11.3.tgz", + "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.11.2" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "qs": { + "version": "6.11.2", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + } + } + }, + "url-loader": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/url-loader/-/url-loader-2.3.0.tgz", + "integrity": "sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog==", + "dev": true, + "requires": { + "loader-utils": "^1.2.3", + "mime": "^2.4.4", + "schema-utils": "^2.5.0" + } + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vue": { + "version": "2.7.15", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.15.tgz", + "integrity": "sha512-a29fsXd2G0KMRqIFTpRgpSbWaNBK3lpCTOLuGLEDnlHWdjB8fwl6zyYZ8xCrqkJdatwZb4mGHiEfJjnw0Q6AwQ==", + "requires": { + "@vue/compiler-sfc": "2.7.15", + "csstype": "^3.1.0" + } + }, + "vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "vue-json-excel": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/vue-json-excel/-/vue-json-excel-0.3.0.tgz", + "integrity": "sha512-FrSh0tVUpw4K+ilLO8g0Qp52eFJw/hkk3rZPTEKo9qVkJgVfQtZwzj3UWc5ACYxA3jLk9HtjK+f9xKHCN4Kgag==", + "requires": { + "downloadjs": "^1.4.7" + } + }, + "vue-loader": { + "version": "15.11.1", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + }, + "vue-loader-v16": { + "version": "npm:vue-loader@16.8.3", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz", + "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==", + "dev": true, + "optional": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "loader-utils": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "optional": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "optional": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "optional": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "optional": true + }, + "loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "optional": true, + "requires": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "optional": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "vue-ref": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/vue-ref/-/vue-ref-2.0.0.tgz", + "integrity": "sha512-uKNKpFOVeWNqS2mrBZqnpLyXJo5Q+vnkex6JvpENvhXHFNBW/SJTP8vJywLuVT3DpxwXcF9N0dyIiZ4/NpTexQ==" + }, + "vue-router": { + "version": "3.6.5", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz", + "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==" + }, + "vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + }, + "dependencies": { + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + } + } + }, + "vue-template-compiler": { + "version": "2.7.15", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.15.tgz", + "integrity": "sha512-yQxjxMptBL7UAog00O8sANud99C6wJF+7kgbcwqkvA38vCGF7HWE66w0ZFnS/kX5gSoJr/PQ4/oS3Ne2pW37Og==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "vuex": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==" + }, + "warning": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "requires": { + "loose-envify": "^1.0.0" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + }, + "dependencies": { + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "4.47.0", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-4.47.0.tgz", + "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "dependencies": { + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dev": true, + "requires": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.19", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + } + }, + "webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "requires": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.11.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "requires": { + "ansi-html-community": "0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true + }, + "http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "requires": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + } + }, + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "requires": { + "lodash": "^4.17.15" + } + }, + "webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, + "which-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmmirror.com/which-typed-array/-/which-typed-array-1.1.13.tgz", + "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.4", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, + "worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" + } + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "dependencies": { + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + } + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "requires": { + "tslib": "2.3.0" + } + } + } +} diff --git a/Vue/package.json b/Vue/package.json new file mode 100644 index 00000000..2f405762 --- /dev/null +++ b/Vue/package.json @@ -0,0 +1,33 @@ +{ + "name": "Eterlaze", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build" + }, + "dependencies": { + "ant-design-vue": "^1.7.4", + "axios": "^0.21.1", + "echarts": "^5.0.2", + "element-ui": "^2.15.12", + "nprogress": "^0.2.0", + "vue": "^2.6.11", + "vue-json-excel": "^0.3.0", + "vue-router": "^3.2.0", + "vuex": "^3.4.0" + }, + "devDependencies": { + "@vue/cli-plugin-router": "~4.5.0", + "@vue/cli-plugin-vuex": "~4.5.0", + "@vue/cli-service": "~4.5.0", + "vue-template-compiler": "^2.6.11" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ], + "main": "index.js", + "license": "MIT" +} diff --git a/Vue/public/favicon.ico b/Vue/public/favicon.ico new file mode 100644 index 00000000..44cd562b Binary files /dev/null and b/Vue/public/favicon.ico differ diff --git a/Vue/public/index.html b/Vue/public/index.html new file mode 100644 index 00000000..dab13647 --- /dev/null +++ b/Vue/public/index.html @@ -0,0 +1,13 @@ + + + + + + + + 圆桌物流管理系统 + + +
+ + diff --git a/Vue/src/App.vue b/Vue/src/App.vue new file mode 100644 index 00000000..5906ca3a --- /dev/null +++ b/Vue/src/App.vue @@ -0,0 +1,19 @@ + + + diff --git a/Vue/src/api/admin.js b/Vue/src/api/admin.js new file mode 100644 index 00000000..b50807c6 --- /dev/null +++ b/Vue/src/api/admin.js @@ -0,0 +1,54 @@ +import service from "../utils/request"; + +export function IsInit() { + return service({ + url: '/admin/hasInit', + method: 'get', + }) +} + +export function Init(data) { + return service({ + url: '/admin/init', + method: 'post', + data: data + }) +} + +export function DeleteAdmin(id) { + return service({ + url: '/admin?id=' + id, + method: 'delete', + }) +} + +export function FindAllAdmin() { + return service({ + url: '/admin', + method: 'get', + }) +} + +export function SaveAdmin(data) { + return service({ + url: '/admin', + method: 'post', + data: data + }) +} + +export function AdminSendEmail(email) { + return service({ + url: '/admin/sendEmail?email=' + email, + method: 'get' + }) +} + +//管理员登录 +export function AdminLogin(type, data) { + return service({ + url: '/admin/login?type=' + type, + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/Vue/src/api/commodity.js b/Vue/src/api/commodity.js new file mode 100644 index 00000000..d9b71575 --- /dev/null +++ b/Vue/src/api/commodity.js @@ -0,0 +1,47 @@ +import service from "../utils/request"; + +export function FindAllCommodity() { + console.log("执行FindAllCommodity"); + // request 拦截器 + // 可以自请求发送前对请求做一些处理 + // 比如统一加token,对请求参数统一加密 + service.interceptors.request.use(config => { + console.log("执行config") + let token = localStorage.getItem("token"); + if (token != null){ + config.headers['Authorization'] = token; // 设置请求头 + } + return config + }, error => { + return Promise.reject(error) + }); + + return service({ + url: '/commodity', + method: 'get' + // headers: {'Authorization': localStorage.getItem("token")} + }) +} + +export function SearchCommodity(name) { + return service({ + url: '/commodity/search/' + name, + method: 'get' + }) +} + +export function SaveCommodity(data) { + + return service({ + url: '/commodity', + method: 'post', + data: data + }) +} + +export function DeleteCommodityById(id) { + return service({ + url: '/commodity?id=' + id, + method: 'delete' + }) +} \ No newline at end of file diff --git a/Vue/src/api/distribution.js b/Vue/src/api/distribution.js new file mode 100644 index 00000000..cef30f49 --- /dev/null +++ b/Vue/src/api/distribution.js @@ -0,0 +1,23 @@ +import service from "../utils/request"; + +export function FindAllDistribution() { + return service({ + url: '/distribution', + method: 'get' + }) +} + +export function FindAllCanUse() { + return service({ + url: '/distribution/can', + method: 'get' + }) +} + +export function SaveDistribution(data) { + return service({ + url: '/distribution', + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/Vue/src/api/driver.js b/Vue/src/api/driver.js new file mode 100644 index 00000000..dfdac73f --- /dev/null +++ b/Vue/src/api/driver.js @@ -0,0 +1,23 @@ +import service from "../utils/request"; + +export function FindAllDriver(){ + return service({ + url: '/driver', + method: 'get' + }) +} + +export function SaveDriver(data) { + return service({ + url: '/driver', + method: 'post', + data: data + }) +} + +export function DeleteDriverById(id){ + return service({ + url: '/driver?id=' + id, + method: 'delete' + }) +} \ No newline at end of file diff --git a/Vue/src/api/employee.js b/Vue/src/api/employee.js new file mode 100644 index 00000000..115d2f84 --- /dev/null +++ b/Vue/src/api/employee.js @@ -0,0 +1,23 @@ +import service from "../utils/request"; + +export function FindAllEmployee(){ + return service({ + url: '/employee', + method: 'get' + }) +} + +export function SaveEmployee(data) { + return service({ + url: '/employee', + method: 'post', + data: data + }) +} + +export function DeleteEmployeeById(id){ + return service({ + url: '/employee?id=' + id, + method: 'delete' + }) +} \ No newline at end of file diff --git a/Vue/src/api/inventory.js b/Vue/src/api/inventory.js new file mode 100644 index 00000000..12778fd1 --- /dev/null +++ b/Vue/src/api/inventory.js @@ -0,0 +1,37 @@ +import service from "../utils/request"; + +export function AnalyzeCommodity(type) { + return service({ + url: '/inventory/analyze?type=' + type, + method: 'get' + }) +} + +export function FindAllInventory(id) { + return service({ + url: '/inventory/warehouse/' + id, + method: 'get' + }) +} + +export function InAndOut(type, data) { + return service({ + url: '/inventory/' + type, + method: 'post', + data: data + }) +} + +export function FindRecordByWarehouse(id) { + return service({ + url: '/inventory/record/warehouse/' + id, + method: 'get' + }) +} + +export function DeleteInventoryById(id) { + return service({ + url: '/inventory?id=' + id, + method: 'delete' + }) +} \ No newline at end of file diff --git a/Vue/src/api/log.js b/Vue/src/api/log.js new file mode 100644 index 00000000..baec22e0 --- /dev/null +++ b/Vue/src/api/log.js @@ -0,0 +1,46 @@ +/* + 日志管理请求模块 +*/ +import service from "../utils/request"; + +//查询全部登录日志 +export function FindAllLoginLog() { + return service({ + url: '/loginlog', + method: 'get' + }) +} + +//查询全部操作日志 +export function FindAllSystemLog() { + return service({ + url: '/systemlog', + method: 'get' + }) +} + +//根据条件查询操作日志 +export function querySystemLog(account,moudle) { + return service({ + url: 'querySystemlog?account='+account+'&moudle='+moudle, + method: 'get' + }) +} + +//删除操作日志 +export function DeleteSystemLogById(id) { + return service({ + url: '/systemlog?id='+id, + method: 'delete' + }) +} + +//删除登录日志 +export function DeleteLoginLogById(id) { + return service({ + url: '/loginlog?id='+id, + method: 'delete' + }) +} + + diff --git a/Vue/src/api/role.js b/Vue/src/api/role.js new file mode 100644 index 00000000..076f2cf7 --- /dev/null +++ b/Vue/src/api/role.js @@ -0,0 +1,8 @@ +import service from "../utils/request"; + +export function FindAllRole(){ + return service({ + url: '/role', + method: 'get' + }) +} diff --git a/Vue/src/api/sale.js b/Vue/src/api/sale.js new file mode 100644 index 00000000..0bad2069 --- /dev/null +++ b/Vue/src/api/sale.js @@ -0,0 +1,24 @@ +import service from "../utils/request"; + +export function FindAllSale() { + console.log("FindAllSale") + return service({ + url: '/sale', + method: 'get' + }) +} + +export function SearchCompany(name) { + return service({ + url: '/sale/search/' + name, + method: 'get' + }) +} + +export function SaveSale(data) { + return service({ + url: '/sale', + method: 'post', + data: data + }) +} \ No newline at end of file diff --git a/Vue/src/api/vehicle.js b/Vue/src/api/vehicle.js new file mode 100644 index 00000000..2146531e --- /dev/null +++ b/Vue/src/api/vehicle.js @@ -0,0 +1,23 @@ +import service from "../utils/request"; + +export function FindAllVehicle(){ + return service({ + url: '/vehicle', + method: 'get' + }) +} + +export function SaveVehicle(data) { + return service({ + url: '/vehicle', + method: 'post', + data: data + }) +} + +export function DeleteVehicleById(id){ + return service({ + url: '/vehicle?id=' + id, + method: 'delete' + }) +} \ No newline at end of file diff --git a/Vue/src/api/warehouse.js b/Vue/src/api/warehouse.js new file mode 100644 index 00000000..5d4e1ba9 --- /dev/null +++ b/Vue/src/api/warehouse.js @@ -0,0 +1,23 @@ +import service from "../utils/request"; + +export function FindAllWarehouse() { + return service({ + url: '/warehouse', + method: 'get' + }) +} + +export function SaveWarehouse(data) { + return service({ + url: '/warehouse', + method: 'post', + data: data + }) +} + +export function DeleteWarehouseById(id) { + return service({ + url: '/warehouse?id=' + id, + method: 'delete' + }) +} \ No newline at end of file diff --git a/Vue/src/assets/avatar.png b/Vue/src/assets/avatar.png new file mode 100644 index 00000000..0db576c1 Binary files /dev/null and b/Vue/src/assets/avatar.png differ diff --git a/Vue/src/assets/back.png b/Vue/src/assets/back.png new file mode 100644 index 00000000..c4367da9 Binary files /dev/null and b/Vue/src/assets/back.png differ diff --git a/Vue/src/assets/home.jpg b/Vue/src/assets/home.jpg new file mode 100644 index 00000000..720f445e Binary files /dev/null and b/Vue/src/assets/home.jpg differ diff --git a/Vue/src/assets/logo.png b/Vue/src/assets/logo.png new file mode 100644 index 00000000..d60e2d21 Binary files /dev/null and b/Vue/src/assets/logo.png differ diff --git a/Vue/src/assets/logo.svg b/Vue/src/assets/logo.svg new file mode 100644 index 00000000..324fb5ea --- /dev/null +++ b/Vue/src/assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Vue/src/assets/warehouse0.svg b/Vue/src/assets/warehouse0.svg new file mode 100644 index 00000000..7d45f89e --- /dev/null +++ b/Vue/src/assets/warehouse0.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Vue/src/assets/warehouse1.svg b/Vue/src/assets/warehouse1.svg new file mode 100644 index 00000000..7bf0946d --- /dev/null +++ b/Vue/src/assets/warehouse1.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Vue/src/assets/warehouse2.svg b/Vue/src/assets/warehouse2.svg new file mode 100644 index 00000000..f6bd5f43 --- /dev/null +++ b/Vue/src/assets/warehouse2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Vue/src/assets/卡车.svg b/Vue/src/assets/卡车.svg new file mode 100644 index 00000000..06709787 --- /dev/null +++ b/Vue/src/assets/卡车.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Vue/src/assets/小型汽车.svg b/Vue/src/assets/小型汽车.svg new file mode 100644 index 00000000..074a070a --- /dev/null +++ b/Vue/src/assets/小型汽车.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Vue/src/assets/货车.svg b/Vue/src/assets/货车.svg new file mode 100644 index 00000000..2baf50e7 --- /dev/null +++ b/Vue/src/assets/货车.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/Vue/src/components/InventoryRecords.vue b/Vue/src/components/InventoryRecords.vue new file mode 100644 index 00000000..18544b28 --- /dev/null +++ b/Vue/src/components/InventoryRecords.vue @@ -0,0 +1,94 @@ + + + + + \ No newline at end of file diff --git a/Vue/src/layout/Aside.vue b/Vue/src/layout/Aside.vue new file mode 100644 index 00000000..bba9c929 --- /dev/null +++ b/Vue/src/layout/Aside.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/Vue/src/layout/Footer.vue b/Vue/src/layout/Footer.vue new file mode 100644 index 00000000..918d507d --- /dev/null +++ b/Vue/src/layout/Footer.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/Vue/src/layout/Header.vue b/Vue/src/layout/Header.vue new file mode 100644 index 00000000..1f80a02b --- /dev/null +++ b/Vue/src/layout/Header.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/Vue/src/layout/Index.vue b/Vue/src/layout/Index.vue new file mode 100644 index 00000000..f362e81b --- /dev/null +++ b/Vue/src/layout/Index.vue @@ -0,0 +1,49 @@ + + + + + diff --git a/Vue/src/layout/Main.vue b/Vue/src/layout/Main.vue new file mode 100644 index 00000000..90cc11b2 --- /dev/null +++ b/Vue/src/layout/Main.vue @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/Vue/src/main.js b/Vue/src/main.js new file mode 100644 index 00000000..c2d78469 --- /dev/null +++ b/Vue/src/main.js @@ -0,0 +1,19 @@ +import Vue from 'vue' +import App from './App.vue' +import router from './router' +import store from './store' +import Antd from 'ant-design-vue' +import 'ant-design-vue/dist/antd.css' +import JsonExcel from 'vue-json-excel' +import 'element-ui/lib/theme-chalk/index.css'; // 导入相关样式 + +Vue.component('downloadExcel', JsonExcel) +Vue.config.productionTip = false + +Vue.use(Antd) + +new Vue({ + router, + store, + render: function (h) { return h(App) } +}).$mount('#app') diff --git a/Vue/src/router/index.js b/Vue/src/router/index.js new file mode 100644 index 00000000..417fad0e --- /dev/null +++ b/Vue/src/router/index.js @@ -0,0 +1,32 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' +import store from '../store' +import routes from "@/router/routes" +import NProgress from 'nprogress' +import 'nprogress/nprogress.css' + +//顶部进度条样式 +NProgress.configure({ + showSpinner: false, + speed: 800, +}); + +Vue.use(VueRouter) + +const router = new VueRouter({ + mode: 'history', + base: process.env.BASE_URL, + routes +}) + +//路由卫士 +router.beforeEach((to, from, next) => { + NProgress.start(); + to.meta.auth && !store.state.user.token ? next("/login") : next(); +}) + +router.afterEach(() => { + NProgress.done() +}) + +export default router diff --git a/Vue/src/router/routes.js b/Vue/src/router/routes.js new file mode 100644 index 00000000..85f73a65 --- /dev/null +++ b/Vue/src/router/routes.js @@ -0,0 +1,155 @@ +import Layout from '@/layout/Index' + +const routes = [ + //公共布局下的路由 + { + path: '/', + component: Layout, + children: [ + { + path: "", + redirect: "/commodity", + meta: {auth: true} + }, + { + path: 'commodity', + component: () => import('@/views/basics/Commodity'), + meta: {auth: true} + }, + { + path: 'company', + component: () => import('@/views/basics/Company'), + meta: {auth: true} + }, + { + path: 'employee', + component: () => import('@/views/basics/Employee'), + meta: {auth: true} + }, + { + path: 'warehouse', + component: () => import('@/views/basics/Warehouse'), + meta: {auth: true} + }, + { + path: 'warehouse/:id', + component: () => import('@/views/basics/Details'), + meta: {auth: true} + }, + { + path: 'driver', + component: () => import('@/views/transport/Driver'), + meta: {auth: true} + }, + { + path: 'loginlog', + component: () => import('@/views/logging/LoginLog'), + meta: {auth: true} + }, + { + path: 'systemlog', + component: () => import('@/views/logging/SystemLog'), + meta: {auth: true} + }, + { + path: 'vehicle', + component: () => import('@/views/transport/Vehicle'), + meta: {auth: true} + }, + { + path: 'sale/record', + component: () => import('@/views/sale/Record'), + meta: {auth: true} + }, + { + path: 'sale/create', + component: () => import('@/views/sale/Create'), + meta: {auth: true} + }, + + { + path: 'delivery/create', + component: () => import('@/views/delivery/Create'), + meta: {auth: true} + }, + { + path: 'delivery/list', + component: () => import('@/views/delivery/List'), + meta: {auth: true} + }, + + { + path: 'analyze/in', + component: () => import('@/views/analyze/In'), + meta: {auth: true} + }, + + { + path: 'analyze/out', + component: () => import('@/views/analyze/Out'), + meta: {auth: true} + }, + + { + path: 'security', + component: () => import('@/views/system/Security'), + meta: {auth: true}, + }, + { + path: 'admin', + component: () => import('@/views/system/Admin'), + meta: {auth: true}, + }, + { + path: 'role', + component: () => import('@/views/system/Role'), + meta: {auth: true}, + }, + + //403 + { + path: '403', + component: () => import('@/views/error/403'), + meta: {auth: true} + }, + //404 + { + path: '404', + component: () => import('@/views/error/404'), + meta: {auth: true} + }, + //500 + { + path: '500', + component: () => import('@/views/error/500'), + meta: {auth: true} + }, + + ] + }, + + //登录页 + { + path: '/login', + name: 'Login', + component: () => import('@/views/Login'), + meta: {auth: false} + }, + + //初始化 + { + path: '/init', + name: 'Init', + component: () => import('@/views/Init'), + meta: {auth: false} + }, + + //404 + { + path: "*", + redirect: '/404' + } + +] + +export default routes \ No newline at end of file diff --git a/Vue/src/store/index.js b/Vue/src/store/index.js new file mode 100644 index 00000000..4764e126 --- /dev/null +++ b/Vue/src/store/index.js @@ -0,0 +1,11 @@ +import Vue from 'vue' +import Vuex from 'vuex' +import user from './modules/user' + +Vue.use(Vuex) + +export default new Vuex.Store({ + modules: { + user + } +}) diff --git a/Vue/src/store/modules/user.js b/Vue/src/store/modules/user.js new file mode 100644 index 00000000..e20538e5 --- /dev/null +++ b/Vue/src/store/modules/user.js @@ -0,0 +1,40 @@ +const state = { + token: localStorage.getItem("token"), + details: JSON.parse(localStorage.getItem("user")) +} + +const getters = {} + +const mutations = { + + saveToken(state, token) { + state.token = token + localStorage.setItem("token", token) + console.log(localStorage.getItem("token")) + console.log("执行saveToken") + }, + + saveLoginUser(state, user) { + state.details = user + localStorage.setItem("user", JSON.stringify(user)) + console.log("saveLoginUser") + }, + + userLogout(state) { + state.details = null + state.token = null + localStorage.removeItem("token") + localStorage.removeItem("user") + } + +} + +const actions = {} + +export default { + namespaced: true, + state, + getters, + mutations, + actions +} \ No newline at end of file diff --git a/Vue/src/utils/request.js b/Vue/src/utils/request.js new file mode 100644 index 00000000..594507e6 --- /dev/null +++ b/Vue/src/utils/request.js @@ -0,0 +1,28 @@ +import request from "axios" +import {message} from 'ant-design-vue' +import router from '../router/index' + +var token = localStorage.getItem("token") +var service = request.create({ + baseURL: 'http://localhost:8088/api', + timeout: 50000 +}); + + +service.interceptors.response.use( + response => { + const res = response.data; + //判断response状态 + if (!res.status) message.error('请求错误: ' + res.msg) + if (res.code === 403) router.push("/403") + return res + }, + error => { + message.error(error) + router.push('/500') + return Promise.reject(error) + } +); +console.log("执行request.js2"); + +export default service \ No newline at end of file diff --git a/Vue/src/views/Init.vue b/Vue/src/views/Init.vue new file mode 100644 index 00000000..907fd6e6 --- /dev/null +++ b/Vue/src/views/Init.vue @@ -0,0 +1,205 @@ + + + + + diff --git a/Vue/src/views/Login.vue b/Vue/src/views/Login.vue new file mode 100644 index 00000000..c86a8391 --- /dev/null +++ b/Vue/src/views/Login.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/Vue/src/views/Test.vue b/Vue/src/views/Test.vue new file mode 100644 index 00000000..3625354b --- /dev/null +++ b/Vue/src/views/Test.vue @@ -0,0 +1,87 @@ + + diff --git a/Vue/src/views/analyze/In.vue b/Vue/src/views/analyze/In.vue new file mode 100644 index 00000000..97255fee --- /dev/null +++ b/Vue/src/views/analyze/In.vue @@ -0,0 +1,89 @@ + + + + + \ No newline at end of file diff --git a/Vue/src/views/analyze/Out.vue b/Vue/src/views/analyze/Out.vue new file mode 100644 index 00000000..7396a49a --- /dev/null +++ b/Vue/src/views/analyze/Out.vue @@ -0,0 +1,89 @@ + + + + + \ No newline at end of file diff --git a/Vue/src/views/basics/Commodity.vue b/Vue/src/views/basics/Commodity.vue new file mode 100644 index 00000000..f638e422 --- /dev/null +++ b/Vue/src/views/basics/Commodity.vue @@ -0,0 +1,200 @@ + + + + + diff --git a/Vue/src/views/basics/Company.vue b/Vue/src/views/basics/Company.vue new file mode 100644 index 00000000..d9c8a4f4 --- /dev/null +++ b/Vue/src/views/basics/Company.vue @@ -0,0 +1,104 @@ + + + + + diff --git a/Vue/src/views/basics/Details.vue b/Vue/src/views/basics/Details.vue new file mode 100644 index 00000000..7285f84e --- /dev/null +++ b/Vue/src/views/basics/Details.vue @@ -0,0 +1,207 @@ + + + + + + \ No newline at end of file diff --git a/Vue/src/views/basics/Employee.vue b/Vue/src/views/basics/Employee.vue new file mode 100644 index 00000000..11d1bc51 --- /dev/null +++ b/Vue/src/views/basics/Employee.vue @@ -0,0 +1,237 @@ + + + + diff --git a/Vue/src/views/basics/Warehouse.vue b/Vue/src/views/basics/Warehouse.vue new file mode 100644 index 00000000..6899e84a --- /dev/null +++ b/Vue/src/views/basics/Warehouse.vue @@ -0,0 +1,112 @@ + + + + + \ No newline at end of file diff --git a/Vue/src/views/delivery/Create.vue b/Vue/src/views/delivery/Create.vue new file mode 100644 index 00000000..523656e7 --- /dev/null +++ b/Vue/src/views/delivery/Create.vue @@ -0,0 +1,207 @@ + + + + + \ No newline at end of file diff --git a/Vue/src/views/delivery/List.vue b/Vue/src/views/delivery/List.vue new file mode 100644 index 00000000..b58fcadc --- /dev/null +++ b/Vue/src/views/delivery/List.vue @@ -0,0 +1,314 @@ + + + + diff --git a/Vue/src/views/error/403.vue b/Vue/src/views/error/403.vue new file mode 100644 index 00000000..dc04d2ba --- /dev/null +++ b/Vue/src/views/error/403.vue @@ -0,0 +1,25 @@ + + diff --git a/Vue/src/views/error/404.vue b/Vue/src/views/error/404.vue new file mode 100644 index 00000000..7cea181f --- /dev/null +++ b/Vue/src/views/error/404.vue @@ -0,0 +1,25 @@ + + diff --git a/Vue/src/views/error/500.vue b/Vue/src/views/error/500.vue new file mode 100644 index 00000000..f2b84e1e --- /dev/null +++ b/Vue/src/views/error/500.vue @@ -0,0 +1,25 @@ + + diff --git a/Vue/src/views/logging/LoginLog.vue b/Vue/src/views/logging/LoginLog.vue new file mode 100644 index 00000000..e77c0206 --- /dev/null +++ b/Vue/src/views/logging/LoginLog.vue @@ -0,0 +1,149 @@ + + + + + + \ No newline at end of file diff --git a/Vue/src/views/logging/SystemLog.vue b/Vue/src/views/logging/SystemLog.vue new file mode 100644 index 00000000..d5a54aa6 --- /dev/null +++ b/Vue/src/views/logging/SystemLog.vue @@ -0,0 +1,160 @@ + + + + + + \ No newline at end of file diff --git a/Vue/src/views/sale/Create.vue b/Vue/src/views/sale/Create.vue new file mode 100644 index 00000000..459af971 --- /dev/null +++ b/Vue/src/views/sale/Create.vue @@ -0,0 +1,163 @@ + + + + + \ No newline at end of file diff --git a/Vue/src/views/sale/Record.vue b/Vue/src/views/sale/Record.vue new file mode 100644 index 00000000..acea708c --- /dev/null +++ b/Vue/src/views/sale/Record.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/Vue/src/views/system/Admin.vue b/Vue/src/views/system/Admin.vue new file mode 100644 index 00000000..304b2aba --- /dev/null +++ b/Vue/src/views/system/Admin.vue @@ -0,0 +1,234 @@ + + + + diff --git a/Vue/src/views/system/Role.vue b/Vue/src/views/system/Role.vue new file mode 100644 index 00000000..236b6d9b --- /dev/null +++ b/Vue/src/views/system/Role.vue @@ -0,0 +1,71 @@ + + + + + \ No newline at end of file diff --git a/Vue/src/views/system/Security.vue b/Vue/src/views/system/Security.vue new file mode 100644 index 00000000..e6512e23 --- /dev/null +++ b/Vue/src/views/system/Security.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/Vue/src/views/transport/Driver.vue b/Vue/src/views/transport/Driver.vue new file mode 100644 index 00000000..cf5b4ff6 --- /dev/null +++ b/Vue/src/views/transport/Driver.vue @@ -0,0 +1,237 @@ + + + + diff --git a/Vue/src/views/transport/Vehicle.vue b/Vue/src/views/transport/Vehicle.vue new file mode 100644 index 00000000..5bd4e594 --- /dev/null +++ b/Vue/src/views/transport/Vehicle.vue @@ -0,0 +1,127 @@ + + + + +