summaryrefslogtreecommitdiffstats
path: root/storage/perfschema/pfs_program.h
diff options
context:
space:
mode:
Diffstat (limited to 'storage/perfschema/pfs_program.h')
-rw-r--r--storage/perfschema/pfs_program.h103
1 files changed, 103 insertions, 0 deletions
diff --git a/storage/perfschema/pfs_program.h b/storage/perfschema/pfs_program.h
new file mode 100644
index 00000000..a5a6245c
--- /dev/null
+++ b/storage/perfschema/pfs_program.h
@@ -0,0 +1,103 @@
+/* Copyright (c) 2013, 2023, Oracle and/or its affiliates.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License, version 2.0,
+ as published by the Free Software Foundation.
+
+ This program is also distributed with certain software (including
+ but not limited to OpenSSL) that is licensed under separate terms,
+ as designated in a particular file or component or in included license
+ documentation. The authors of MySQL hereby grant you an additional
+ permission to link the program and your derivative works with the
+ separately licensed software that they have included with MySQL.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License, version 2.0, for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software Foundation,
+ 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */
+
+#ifndef PFS_PROGRAM_H
+#define PFS_PROGRAM_H
+
+/**
+ @file storage/perfschema/pfs_program.h
+ Stored Program data structures (declarations).
+*/
+
+#include "pfs_column_types.h"
+#include "pfs_stat.h"
+
+#define PROGRAM_HASH_KEY_LENGTH sizeof(enum_object_type) + COL_OBJECT_NAME_SIZE + 1 + COL_OBJECT_SCHEMA_SIZE + 1
+
+extern LF_HASH program_hash;
+
+/**
+ Hash key for a program.
+*/
+struct PFS_program_key
+{
+ /**
+ Hash search key.
+ This has to be a string for LF_HASH,
+ the format is "<object_type><0x00><object_name><0x00><schema_name><0x00>"
+ */
+ char m_hash_key[PROGRAM_HASH_KEY_LENGTH];
+ uint m_key_length;
+};
+
+struct PFS_ALIGNED PFS_program : public PFS_instr
+{
+ /** Object type. */
+ enum_object_type m_type;
+
+ /** Object name. */
+ const char *m_object_name;
+ int m_object_name_length;
+
+ /** Object Schema name. */
+ const char *m_schema_name;
+ int m_schema_name_length;
+
+ /** Hash key */
+ PFS_program_key m_key;
+
+ /** Sub statement stat. */
+ PFS_statement_stat m_stmt_stat;
+
+ /** Stored program stat. */
+ PFS_sp_stat m_sp_stat;
+
+ /** Referesh setup object flags. */
+ void refresh_setup_object_flags(PFS_thread* thread);
+
+ /** Reset data for this record. */
+ void reset_data();
+};
+
+int init_program(const PFS_global_param *param);
+void cleanup_program(void);
+int init_program_hash(const PFS_global_param *param);
+void cleanup_program_hash(void);
+
+void reset_esms_by_program();
+
+PFS_program*
+find_or_create_program(PFS_thread *thread,
+ enum_object_type object_type,
+ const char *object_name,
+ uint object_name_length,
+ const char *schema,
+ uint schema_length);
+
+void
+drop_program(PFS_thread *thread,
+ enum_object_type object_type,
+ const char *object_name,
+ uint object_name_length,
+ const char *schema_name,
+ uint schema_name_length);
+#endif