MindsDB 25.4.5.0__py3-none-any.whl → 25.5.4.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of MindsDB might be problematic. Click here for more details.
- mindsdb/__about__.py +1 -1
- mindsdb/__main__.py +215 -185
- mindsdb/api/a2a/__init__.py +0 -0
- mindsdb/api/a2a/__main__.py +114 -0
- mindsdb/api/a2a/a2a_client.py +439 -0
- mindsdb/api/a2a/agent.py +308 -0
- mindsdb/api/a2a/common/__init__.py +0 -0
- mindsdb/api/a2a/common/client/__init__.py +4 -0
- mindsdb/api/a2a/common/client/card_resolver.py +21 -0
- mindsdb/api/a2a/common/client/client.py +86 -0
- mindsdb/api/a2a/common/server/__init__.py +4 -0
- mindsdb/api/a2a/common/server/server.py +164 -0
- mindsdb/api/a2a/common/server/task_manager.py +287 -0
- mindsdb/api/a2a/common/server/utils.py +28 -0
- mindsdb/api/a2a/common/types.py +365 -0
- mindsdb/api/a2a/constants.py +9 -0
- mindsdb/api/a2a/run_a2a.py +129 -0
- mindsdb/api/a2a/task_manager.py +594 -0
- mindsdb/api/executor/command_executor.py +49 -28
- mindsdb/api/executor/datahub/classes/response.py +5 -2
- mindsdb/api/executor/datahub/datanodes/information_schema_datanode.py +8 -0
- mindsdb/api/executor/datahub/datanodes/integration_datanode.py +39 -72
- mindsdb/api/executor/datahub/datanodes/system_tables.py +10 -13
- mindsdb/api/executor/planner/query_planner.py +14 -2
- mindsdb/api/executor/sql_query/result_set.py +185 -52
- mindsdb/api/executor/sql_query/sql_query.py +1 -1
- mindsdb/api/executor/sql_query/steps/apply_predictor_step.py +11 -13
- mindsdb/api/executor/sql_query/steps/fetch_dataframe.py +8 -10
- mindsdb/api/executor/sql_query/steps/fetch_dataframe_partition.py +5 -44
- mindsdb/api/executor/sql_query/steps/insert_step.py +24 -15
- mindsdb/api/executor/sql_query/steps/join_step.py +1 -1
- mindsdb/api/executor/sql_query/steps/project_step.py +1 -1
- mindsdb/api/executor/sql_query/steps/sql_steps.py +1 -1
- mindsdb/api/executor/sql_query/steps/subselect_step.py +4 -8
- mindsdb/api/executor/sql_query/steps/union_step.py +1 -3
- mindsdb/api/http/initialize.py +118 -85
- mindsdb/api/http/namespaces/analysis.py +17 -4
- mindsdb/api/http/namespaces/file.py +8 -2
- mindsdb/api/http/namespaces/sql.py +13 -27
- mindsdb/api/http/namespaces/tree.py +1 -1
- mindsdb/api/http/start.py +7 -2
- mindsdb/api/mcp/start.py +42 -5
- mindsdb/api/mysql/mysql_proxy/data_types/mysql_packet.py +0 -1
- mindsdb/api/mysql/mysql_proxy/data_types/mysql_packets/binary_resultset_row_package.py +52 -19
- mindsdb/api/mysql/mysql_proxy/executor/mysql_executor.py +8 -10
- mindsdb/api/mysql/mysql_proxy/libs/constants/mysql.py +54 -38
- mindsdb/api/mysql/mysql_proxy/mysql_proxy.py +86 -123
- mindsdb/api/mysql/mysql_proxy/utilities/dump.py +351 -0
- mindsdb/api/mysql/mysql_proxy/utilities/exceptions.py +0 -4
- mindsdb/api/postgres/postgres_proxy/executor/executor.py +1 -1
- mindsdb/api/postgres/postgres_proxy/postgres_packets/postgres_message_formats.py +2 -2
- mindsdb/api/postgres/postgres_proxy/postgres_proxy.py +5 -6
- mindsdb/integrations/handlers/altibase_handler/altibase_handler.py +26 -27
- mindsdb/integrations/handlers/altibase_handler/connection_args.py +13 -13
- mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler.py +8 -8
- mindsdb/integrations/handlers/altibase_handler/tests/test_altibase_handler_dsn.py +13 -13
- mindsdb/integrations/handlers/anthropic_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/anthropic_handler/anthropic_handler.py +1 -3
- mindsdb/integrations/handlers/aurora_handler/aurora_handler.py +1 -0
- mindsdb/integrations/handlers/autosklearn_handler/autosklearn_handler.py +1 -1
- mindsdb/integrations/handlers/autosklearn_handler/config.py +0 -1
- mindsdb/integrations/handlers/bigquery_handler/bigquery_handler.py +1 -1
- mindsdb/integrations/handlers/bigquery_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/bigquery_handler/tests/test_bigquery_handler.py +1 -1
- mindsdb/integrations/handlers/binance_handler/binance_handler.py +1 -0
- mindsdb/integrations/handlers/binance_handler/binance_tables.py +3 -4
- mindsdb/integrations/handlers/byom_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/chromadb_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/ckan_handler/ckan_handler.py +3 -0
- mindsdb/integrations/handlers/clickhouse_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/cloud_spanner_handler/tests/test_cloud_spanner_handler.py +0 -2
- mindsdb/integrations/handlers/cloud_sql_handler/cloud_sql_handler.py +0 -1
- mindsdb/integrations/handlers/cohere_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/cohere_handler/cohere_handler.py +11 -13
- mindsdb/integrations/handlers/confluence_handler/confluence_tables.py +6 -0
- mindsdb/integrations/handlers/databend_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/databend_handler/databend_handler.py +4 -4
- mindsdb/integrations/handlers/databend_handler/tests/__init__.py +0 -1
- mindsdb/integrations/handlers/databend_handler/tests/test_databend_handler.py +1 -1
- mindsdb/integrations/handlers/derby_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/derby_handler/derby_handler.py +14 -22
- mindsdb/integrations/handlers/derby_handler/tests/test_derby_handler.py +6 -6
- mindsdb/integrations/handlers/discord_handler/discord_handler.py +5 -5
- mindsdb/integrations/handlers/discord_handler/discord_tables.py +3 -3
- mindsdb/integrations/handlers/discord_handler/tests/test_discord.py +5 -3
- mindsdb/integrations/handlers/dockerhub_handler/dockerhub.py +3 -3
- mindsdb/integrations/handlers/dockerhub_handler/dockerhub_handler.py +2 -2
- mindsdb/integrations/handlers/dockerhub_handler/dockerhub_tables.py +57 -54
- mindsdb/integrations/handlers/dremio_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/druid_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/druid_handler/druid_handler.py +2 -2
- mindsdb/integrations/handlers/edgelessdb_handler/tests/test_edgelessdb_handler.py +9 -9
- mindsdb/integrations/handlers/email_handler/email_client.py +1 -1
- mindsdb/integrations/handlers/email_handler/email_ingestor.py +1 -1
- mindsdb/integrations/handlers/email_handler/email_tables.py +0 -1
- mindsdb/integrations/handlers/email_handler/settings.py +0 -1
- mindsdb/integrations/handlers/eventstoredb_handler/eventstoredb_handler.py +2 -1
- mindsdb/integrations/handlers/firebird_handler/firebird_handler.py +1 -1
- mindsdb/integrations/handlers/flaml_handler/flaml_handler.py +9 -9
- mindsdb/integrations/handlers/frappe_handler/frappe_client.py +5 -5
- mindsdb/integrations/handlers/frappe_handler/frappe_handler.py +6 -5
- mindsdb/integrations/handlers/frappe_handler/frappe_tables.py +2 -2
- mindsdb/integrations/handlers/github_handler/connection_args.py +2 -2
- mindsdb/integrations/handlers/github_handler/github_handler.py +1 -8
- mindsdb/integrations/handlers/github_handler/github_tables.py +13 -24
- mindsdb/integrations/handlers/gitlab_handler/gitlab_handler.py +2 -1
- mindsdb/integrations/handlers/gitlab_handler/gitlab_tables.py +1 -4
- mindsdb/integrations/handlers/gmail_handler/gmail_handler.py +6 -13
- mindsdb/integrations/handlers/gmail_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/google_analytics_handler/requirements.txt +2 -1
- mindsdb/integrations/handlers/google_books_handler/google_books_handler.py +2 -1
- mindsdb/integrations/handlers/google_books_handler/google_books_tables.py +0 -3
- mindsdb/integrations/handlers/google_books_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/google_calendar_handler/google_calendar_handler.py +4 -4
- mindsdb/integrations/handlers/google_calendar_handler/google_calendar_tables.py +2 -6
- mindsdb/integrations/handlers/google_calendar_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_handler.py +3 -2
- mindsdb/integrations/handlers/google_content_shopping_handler/google_content_shopping_tables.py +0 -3
- mindsdb/integrations/handlers/google_content_shopping_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/google_fit_handler/google_fit_handler.py +10 -12
- mindsdb/integrations/handlers/google_fit_handler/google_fit_tables.py +11 -13
- mindsdb/integrations/handlers/google_fit_handler/requirements.txt +2 -0
- mindsdb/integrations/handlers/google_search_handler/google_search_handler.py +2 -1
- mindsdb/integrations/handlers/google_search_handler/google_search_tables.py +0 -3
- mindsdb/integrations/handlers/google_search_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/groq_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/hackernews_handler/hn_handler.py +5 -7
- mindsdb/integrations/handlers/hackernews_handler/hn_table.py +6 -7
- mindsdb/integrations/handlers/hive_handler/tests/test_hive_handler.py +1 -1
- mindsdb/integrations/handlers/hsqldb_handler/connection_args.py +6 -6
- mindsdb/integrations/handlers/hsqldb_handler/hsqldb_handler.py +4 -3
- mindsdb/integrations/handlers/huggingface_api_handler/exceptions.py +1 -1
- mindsdb/integrations/handlers/huggingface_api_handler/huggingface_api_handler.py +1 -8
- mindsdb/integrations/handlers/huggingface_handler/huggingface_handler.py +6 -6
- mindsdb/integrations/handlers/huggingface_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/huggingface_handler/requirements_cpu.txt +1 -1
- mindsdb/integrations/handlers/ignite_handler/ignite_handler.py +2 -1
- mindsdb/integrations/handlers/impala_handler/impala_handler.py +9 -12
- mindsdb/integrations/handlers/impala_handler/tests/test_impala_handler.py +11 -11
- mindsdb/integrations/handlers/influxdb_handler/influxdb_handler.py +10 -13
- mindsdb/integrations/handlers/influxdb_handler/influxdb_tables.py +20 -20
- mindsdb/integrations/handlers/informix_handler/__about__.py +8 -8
- mindsdb/integrations/handlers/informix_handler/__init__.py +12 -5
- mindsdb/integrations/handlers/informix_handler/informix_handler.py +99 -133
- mindsdb/integrations/handlers/informix_handler/tests/test_informix_handler.py +13 -11
- mindsdb/integrations/handlers/ingres_handler/__about__.py +0 -1
- mindsdb/integrations/handlers/ingres_handler/ingres_handler.py +1 -0
- mindsdb/integrations/handlers/jira_handler/jira_handler.archived.py +75 -0
- mindsdb/integrations/handlers/jira_handler/jira_handler.py +113 -38
- mindsdb/integrations/handlers/jira_handler/jira_tables.py +229 -0
- mindsdb/integrations/handlers/jira_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/kinetica_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/langchain_handler/langchain_handler.py +4 -4
- mindsdb/integrations/handlers/langchain_handler/tools.py +9 -10
- mindsdb/integrations/handlers/leonardoai_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/lightfm_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/lightwood_handler/functions.py +2 -2
- mindsdb/integrations/handlers/lightwood_handler/lightwood_handler.py +0 -3
- mindsdb/integrations/handlers/lightwood_handler/requirements.txt +4 -4
- mindsdb/integrations/handlers/lightwood_handler/tests/test_lightwood_handler.py +11 -11
- mindsdb/integrations/handlers/lindorm_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/llama_index_handler/llama_index_handler.py +4 -4
- mindsdb/integrations/handlers/llama_index_handler/settings.py +10 -9
- mindsdb/integrations/handlers/materialize_handler/tests/test_materialize_handler.py +8 -10
- mindsdb/integrations/handlers/matrixone_handler/matrixone_handler.py +4 -4
- mindsdb/integrations/handlers/matrixone_handler/tests/test_matrixone_handler.py +8 -9
- mindsdb/integrations/handlers/maxdb_handler/connection_args.py +25 -25
- mindsdb/integrations/handlers/maxdb_handler/maxdb_handler.py +1 -0
- mindsdb/integrations/handlers/mediawiki_handler/mediawiki_handler.py +3 -2
- mindsdb/integrations/handlers/mediawiki_handler/mediawiki_tables.py +1 -1
- mindsdb/integrations/handlers/mendeley_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/mendeley_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/mendeley_handler/mendeley_handler.py +48 -56
- mindsdb/integrations/handlers/mendeley_handler/mendeley_tables.py +24 -29
- mindsdb/integrations/handlers/mendeley_handler/tests/test_mendeley_handler.py +19 -17
- mindsdb/integrations/handlers/merlion_handler/merlion_handler.py +5 -4
- mindsdb/integrations/handlers/minds_endpoint_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/mlflow_handler/mlflow_handler.py +58 -36
- mindsdb/integrations/handlers/monetdb_handler/__about__.py +8 -8
- mindsdb/integrations/handlers/monetdb_handler/__init__.py +15 -5
- mindsdb/integrations/handlers/monetdb_handler/connection_args.py +17 -18
- mindsdb/integrations/handlers/monetdb_handler/monetdb_handler.py +40 -57
- mindsdb/integrations/handlers/monetdb_handler/tests/test_monetdb_handler.py +7 -8
- mindsdb/integrations/handlers/monetdb_handler/utils/monet_get_id.py +13 -14
- mindsdb/integrations/handlers/monkeylearn_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/monkeylearn_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/monkeylearn_handler/monkeylearn_handler.py +2 -5
- mindsdb/integrations/handlers/ms_one_drive_handler/ms_graph_api_one_drive_client.py +1 -0
- mindsdb/integrations/handlers/ms_one_drive_handler/ms_one_drive_handler.py +1 -1
- mindsdb/integrations/handlers/ms_one_drive_handler/requirements.txt +2 -0
- mindsdb/integrations/handlers/ms_teams_handler/ms_graph_api_teams_client.py +23 -23
- mindsdb/integrations/handlers/ms_teams_handler/ms_teams_handler.py +3 -3
- mindsdb/integrations/handlers/ms_teams_handler/ms_teams_tables.py +10 -5
- mindsdb/integrations/handlers/ms_teams_handler/requirements.txt +3 -1
- mindsdb/integrations/handlers/mssql_handler/mssql_handler.py +73 -8
- mindsdb/integrations/handlers/mysql_handler/__about__.py +8 -8
- mindsdb/integrations/handlers/mysql_handler/__init__.py +15 -5
- mindsdb/integrations/handlers/mysql_handler/connection_args.py +43 -47
- mindsdb/integrations/handlers/mysql_handler/mysql_handler.py +101 -34
- mindsdb/integrations/handlers/mysql_handler/settings.py +15 -13
- mindsdb/integrations/handlers/neuralforecast_handler/neuralforecast_handler.py +1 -1
- mindsdb/integrations/handlers/newsapi_handler/newsapi_handler.py +1 -1
- mindsdb/integrations/handlers/newsapi_handler/tests/test_newsapi_handler.py +4 -4
- mindsdb/integrations/handlers/nuo_jdbc_handler/connection_args.py +2 -2
- mindsdb/integrations/handlers/nuo_jdbc_handler/nuo_jdbc_handler.py +28 -36
- mindsdb/integrations/handlers/nuo_jdbc_handler/tests/test_nuo_handler.py +5 -5
- mindsdb/integrations/handlers/oceanbase_handler/oceanbase_handler.py +0 -1
- mindsdb/integrations/handlers/oceanbase_handler/tests/test_oceanbase_handler.py +8 -10
- mindsdb/integrations/handlers/ollama_handler/ollama_handler.py +3 -3
- mindsdb/integrations/handlers/openai_handler/openai_handler.py +5 -4
- mindsdb/integrations/handlers/opengauss_handler/tests/test_opengauss_handler.py +1 -2
- mindsdb/integrations/handlers/openstreetmap_handler/__init__.py +7 -7
- mindsdb/integrations/handlers/oracle_handler/connection_args.py +6 -0
- mindsdb/integrations/handlers/oracle_handler/oracle_handler.py +77 -11
- mindsdb/integrations/handlers/orioledb_handler/tests/test_orioledb_handler.py +8 -10
- mindsdb/integrations/handlers/palm_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/palm_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/palm_handler/palm_handler.py +1 -3
- mindsdb/integrations/handlers/paypal_handler/paypal_handler.py +2 -2
- mindsdb/integrations/handlers/paypal_handler/paypal_tables.py +15 -14
- mindsdb/integrations/handlers/pgvector_handler/pgvector_handler.py +53 -10
- mindsdb/integrations/handlers/phoenix_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/phoenix_handler/phoenix_handler.py +1 -0
- mindsdb/integrations/handlers/pinot_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/pinot_handler/pinot_handler.py +3 -2
- mindsdb/integrations/handlers/plaid_handler/plaid_handler.py +13 -13
- mindsdb/integrations/handlers/plaid_handler/plaid_tables.py +10 -12
- mindsdb/integrations/handlers/plaid_handler/utils.py +4 -6
- mindsdb/integrations/handlers/planetscale_handler/planetscale_handler.py +1 -4
- mindsdb/integrations/handlers/portkey_handler/__init__.py +2 -2
- mindsdb/integrations/handlers/postgres_handler/postgres_handler.py +105 -24
- mindsdb/integrations/handlers/postgres_handler/tests/test_postgres_handler.py +11 -6
- mindsdb/integrations/handlers/questdb_handler/questdb_handler.py +1 -2
- mindsdb/integrations/handlers/questdb_handler/tests/test_questdb_handler.py +2 -3
- mindsdb/integrations/handlers/quickbooks_handler/quickbooks_handler.py +6 -8
- mindsdb/integrations/handlers/quickbooks_handler/quickbooks_table.py +10 -10
- mindsdb/integrations/handlers/rag_handler/ingest.py +2 -2
- mindsdb/integrations/handlers/rag_handler/rag_handler.py +1 -1
- mindsdb/integrations/handlers/rag_handler/settings.py +1 -1
- mindsdb/integrations/handlers/reddit_handler/reddit_handler.py +2 -7
- mindsdb/integrations/handlers/reddit_handler/reddit_tables.py +2 -3
- mindsdb/integrations/handlers/replicate_handler/replicate_handler.py +6 -6
- mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_handler.py +1 -2
- mindsdb/integrations/handlers/rocket_chat_handler/rocket_chat_tables.py +0 -3
- mindsdb/integrations/handlers/rockset_handler/connection_args.py +14 -14
- mindsdb/integrations/handlers/rockset_handler/tests/test_rockset_handler.py +1 -0
- mindsdb/integrations/handlers/scylla_handler/scylla_handler.py +6 -5
- mindsdb/integrations/handlers/sendinblue_handler/sendinblue_handler.py +2 -1
- mindsdb/integrations/handlers/sendinblue_handler/sendinblue_tables.py +16 -16
- mindsdb/integrations/handlers/sentence_transformers_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/sheets_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/shopify_handler/shopify_handler.py +7 -6
- mindsdb/integrations/handlers/shopify_handler/shopify_tables.py +38 -41
- mindsdb/integrations/handlers/singlestore_handler/__about__.py +1 -1
- mindsdb/integrations/handlers/singlestore_handler/__init__.py +0 -1
- mindsdb/integrations/handlers/singlestore_handler/singlestore_handler.py +1 -0
- mindsdb/integrations/handlers/singlestore_handler/tests/test_singlestore_handler.py +3 -3
- mindsdb/integrations/handlers/slack_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/snowflake_handler/requirements.txt +1 -1
- mindsdb/integrations/handlers/snowflake_handler/snowflake_handler.py +100 -6
- mindsdb/integrations/handlers/solr_handler/connection_args.py +7 -7
- mindsdb/integrations/handlers/solr_handler/solr_handler.py +2 -1
- mindsdb/integrations/handlers/solr_handler/tests/test_solr_handler.py +2 -1
- mindsdb/integrations/handlers/sqlany_handler/sqlany_handler.py +3 -2
- mindsdb/integrations/handlers/sqlite_handler/sqlite_handler.py +1 -0
- mindsdb/integrations/handlers/sqreamdb_handler/connection_args.py +1 -1
- mindsdb/integrations/handlers/sqreamdb_handler/sqreamdb_handler.py +15 -20
- mindsdb/integrations/handlers/sqreamdb_handler/tests/test_sqreamdb_handler.py +4 -4
- mindsdb/integrations/handlers/stabilityai_handler/__init__.py +1 -1
- mindsdb/integrations/handlers/starrocks_handler/starrocks_handler.py +0 -1
- mindsdb/integrations/handlers/starrocks_handler/tests/test_starrocks_handler.py +8 -10
- mindsdb/integrations/handlers/statsforecast_handler/statsforecast_handler.py +2 -2
- mindsdb/integrations/handlers/strava_handler/strava_handler.py +4 -8
- mindsdb/integrations/handlers/strava_handler/strava_tables.py +22 -30
- mindsdb/integrations/handlers/stripe_handler/stripe_handler.py +3 -2
- mindsdb/integrations/handlers/stripe_handler/stripe_tables.py +11 -27
- mindsdb/integrations/handlers/supabase_handler/tests/test_supabase_handler.py +1 -1
- mindsdb/integrations/handlers/surrealdb_handler/surrealdb_handler.py +4 -4
- mindsdb/integrations/handlers/tdengine_handler/tdengine_handler.py +25 -27
- mindsdb/integrations/handlers/tdengine_handler/tests/test_tdengine_handler.py +8 -8
- mindsdb/integrations/handlers/tidb_handler/tests/test_tidb_handler.py +1 -2
- mindsdb/integrations/handlers/timegpt_handler/timegpt_handler.py +5 -5
- mindsdb/integrations/handlers/tpot_handler/tpot_handler.py +21 -26
- mindsdb/integrations/handlers/trino_handler/trino_handler.py +14 -14
- mindsdb/integrations/handlers/twitter_handler/twitter_handler.py +2 -4
- mindsdb/integrations/handlers/unify_handler/tests/test_unify_handler.py +7 -8
- mindsdb/integrations/handlers/unify_handler/unify_handler.py +9 -9
- mindsdb/integrations/handlers/vertex_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/vertex_handler/vertex_client.py +1 -1
- mindsdb/integrations/handlers/vertica_handler/tests/test_vertica_handler.py +11 -11
- mindsdb/integrations/handlers/vertica_handler/vertica_handler.py +11 -14
- mindsdb/integrations/handlers/vitess_handler/tests/test_vitess_handler.py +9 -11
- mindsdb/integrations/handlers/vitess_handler/vitess_handler.py +0 -1
- mindsdb/integrations/handlers/web_handler/web_handler.py +1 -0
- mindsdb/integrations/handlers/whatsapp_handler/__init__.py +3 -3
- mindsdb/integrations/handlers/writer_handler/evaluate.py +1 -1
- mindsdb/integrations/handlers/writer_handler/settings.py +0 -1
- mindsdb/integrations/handlers/writer_handler/writer_handler.py +1 -0
- mindsdb/integrations/handlers/youtube_handler/requirements.txt +1 -0
- mindsdb/integrations/handlers/youtube_handler/youtube_handler.py +5 -5
- mindsdb/integrations/handlers/youtube_handler/youtube_tables.py +26 -27
- mindsdb/integrations/handlers/yugabyte_handler/tests/test_yugabyte_handler.py +3 -3
- mindsdb/integrations/handlers/yugabyte_handler/yugabyte_handler.py +0 -6
- mindsdb/integrations/libs/response.py +67 -52
- mindsdb/integrations/libs/vectordatabase_handler.py +6 -0
- mindsdb/integrations/utilities/files/file_reader.py +5 -2
- mindsdb/integrations/utilities/handler_utils.py +15 -3
- mindsdb/integrations/utilities/handlers/api_utilities/__init__.py +0 -1
- mindsdb/integrations/utilities/handlers/auth_utilities/__init__.py +0 -2
- mindsdb/integrations/utilities/utils.py +3 -3
- mindsdb/interfaces/agents/agents_controller.py +164 -1
- mindsdb/interfaces/agents/constants.py +29 -2
- mindsdb/interfaces/agents/langchain_agent.py +18 -8
- mindsdb/interfaces/agents/mindsdb_database_agent.py +101 -2
- mindsdb/interfaces/database/projects.py +1 -7
- mindsdb/interfaces/functions/controller.py +11 -14
- mindsdb/interfaces/functions/to_markdown.py +9 -124
- mindsdb/interfaces/knowledge_base/controller.py +47 -19
- mindsdb/interfaces/knowledge_base/preprocessing/document_preprocessor.py +41 -15
- mindsdb/interfaces/knowledge_base/preprocessing/json_chunker.py +434 -0
- mindsdb/interfaces/knowledge_base/preprocessing/models.py +54 -0
- mindsdb/interfaces/knowledge_base/utils.py +10 -15
- mindsdb/interfaces/model/model_controller.py +0 -2
- mindsdb/interfaces/query_context/context_controller.py +66 -10
- mindsdb/interfaces/skills/custom/text2sql/mindsdb_kb_tools.py +190 -0
- mindsdb/interfaces/skills/custom/text2sql/mindsdb_sql_toolkit.py +92 -0
- mindsdb/interfaces/skills/skill_tool.py +202 -57
- mindsdb/interfaces/skills/sql_agent.py +238 -28
- mindsdb/interfaces/storage/fs.py +1 -0
- mindsdb/interfaces/variables/__init__.py +0 -0
- mindsdb/interfaces/variables/variables_controller.py +97 -0
- mindsdb/migrations/env.py +5 -7
- mindsdb/migrations/migrate.py +47 -9
- mindsdb/migrations/versions/2025-05-21_9f150e4f9a05_checkpoint_1.py +360 -0
- mindsdb/utilities/config.py +333 -220
- mindsdb/utilities/context.py +1 -1
- mindsdb/utilities/functions.py +0 -36
- mindsdb/utilities/langfuse.py +19 -10
- mindsdb/utilities/otel/__init__.py +9 -193
- mindsdb/utilities/otel/metric_handlers/__init__.py +5 -1
- mindsdb/utilities/otel/prepare.py +198 -0
- mindsdb/utilities/sql.py +83 -0
- mindsdb/utilities/starters.py +13 -0
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/METADATA +351 -338
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/RECORD +348 -322
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/WHEEL +1 -1
- mindsdb/api/mysql/mysql_proxy/classes/sql_statement_parser.py +0 -151
- mindsdb/integrations/handlers/monkeylearn_handler/requirements.txt +0 -1
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/licenses/LICENSE +0 -0
- {mindsdb-25.4.5.0.dist-info → mindsdb-25.5.4.0.dist-info}/top_level.txt +0 -0
|
@@ -21,24 +21,17 @@ import sys
|
|
|
21
21
|
import tempfile
|
|
22
22
|
import traceback
|
|
23
23
|
from functools import partial
|
|
24
|
-
from typing import
|
|
24
|
+
from typing import List
|
|
25
25
|
from dataclasses import dataclass
|
|
26
26
|
|
|
27
|
-
from numpy import dtype as np_dtype
|
|
28
|
-
from pandas.api import types as pd_types
|
|
29
|
-
|
|
30
|
-
from mindsdb.api.mysql.mysql_proxy.libs.constants.mysql import NULL_VALUE
|
|
31
27
|
from mindsdb.api.mysql.mysql_proxy.data_types.mysql_datum import Datum
|
|
32
|
-
|
|
33
28
|
import mindsdb.utilities.hooks as hooks
|
|
34
29
|
import mindsdb.utilities.profiler as profiler
|
|
30
|
+
from mindsdb.utilities.sql import clear_sql
|
|
35
31
|
from mindsdb.api.mysql.mysql_proxy.classes.client_capabilities import ClentCapabilities
|
|
36
32
|
from mindsdb.api.mysql.mysql_proxy.classes.server_capabilities import (
|
|
37
33
|
server_capabilities,
|
|
38
34
|
)
|
|
39
|
-
from mindsdb.api.mysql.mysql_proxy.classes.sql_statement_parser import (
|
|
40
|
-
SqlStatementParser,
|
|
41
|
-
)
|
|
42
35
|
from mindsdb.api.executor.controllers import SessionController
|
|
43
36
|
from mindsdb.api.mysql.mysql_proxy.data_types.mysql_packet import Packet
|
|
44
37
|
from mindsdb.api.mysql.mysql_proxy.data_types.mysql_packets import (
|
|
@@ -63,14 +56,14 @@ from mindsdb.api.mysql.mysql_proxy.external_libs.mysql_scramble import (
|
|
|
63
56
|
scramble as scramble_func,
|
|
64
57
|
)
|
|
65
58
|
from mindsdb.api.mysql.mysql_proxy.libs.constants.mysql import (
|
|
66
|
-
|
|
59
|
+
DEFAULT_AUTH_METHOD,
|
|
67
60
|
CHARSET_NUMBERS,
|
|
61
|
+
SERVER_STATUS,
|
|
62
|
+
CAPABILITIES,
|
|
63
|
+
NULL_VALUE,
|
|
68
64
|
COMMANDS,
|
|
69
|
-
DEFAULT_AUTH_METHOD,
|
|
70
65
|
ERR,
|
|
71
|
-
|
|
72
|
-
TYPES,
|
|
73
|
-
getConstName,
|
|
66
|
+
getConstName
|
|
74
67
|
)
|
|
75
68
|
from mindsdb.api.executor.data_types.answer import ExecuteAnswer
|
|
76
69
|
from mindsdb.api.executor.data_types.response_type import RESPONSE_TYPE
|
|
@@ -81,12 +74,14 @@ from mindsdb.api.mysql.mysql_proxy.utilities import (
|
|
|
81
74
|
from mindsdb.api.executor import exceptions as exec_exc
|
|
82
75
|
|
|
83
76
|
from mindsdb.api.common.check_auth import check_auth
|
|
84
|
-
from mindsdb.api.mysql.mysql_proxy.
|
|
77
|
+
from mindsdb.api.mysql.mysql_proxy.libs.constants.mysql import MYSQL_DATA_TYPE
|
|
78
|
+
from mindsdb.api.executor.sql_query.result_set import Column, ResultSet
|
|
85
79
|
from mindsdb.utilities import log
|
|
86
80
|
from mindsdb.utilities.config import config
|
|
87
81
|
from mindsdb.utilities.context import context as ctx
|
|
88
|
-
from mindsdb.utilities.otel
|
|
82
|
+
from mindsdb.utilities.otel import increment_otel_query_request_counter
|
|
89
83
|
from mindsdb.utilities.wizards import make_ssl_cert
|
|
84
|
+
from mindsdb.api.mysql.mysql_proxy.utilities.dump import dump_result_set_to_mysql, column_to_mysql_column_dict
|
|
90
85
|
|
|
91
86
|
logger = log.getLogger(__name__)
|
|
92
87
|
|
|
@@ -98,18 +93,43 @@ def empty_fn():
|
|
|
98
93
|
@dataclass
|
|
99
94
|
class SQLAnswer:
|
|
100
95
|
resp_type: RESPONSE_TYPE = RESPONSE_TYPE.OK
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
96
|
+
result_set: ResultSet | None = None
|
|
97
|
+
status: int | None = None
|
|
98
|
+
state_track: List[List] | None = None
|
|
99
|
+
error_code: int | None = None
|
|
100
|
+
error_message: str | None = None
|
|
101
|
+
affected_rows: int | None = None
|
|
102
|
+
mysql_types: list[MYSQL_DATA_TYPE] | None = None
|
|
108
103
|
|
|
109
104
|
@property
|
|
110
105
|
def type(self):
|
|
111
106
|
return self.resp_type
|
|
112
107
|
|
|
108
|
+
def dump_http_response(self) -> dict:
|
|
109
|
+
if self.resp_type == RESPONSE_TYPE.OK:
|
|
110
|
+
return {
|
|
111
|
+
"type": self.resp_type,
|
|
112
|
+
"affected_rows": self.affected_rows,
|
|
113
|
+
}
|
|
114
|
+
elif self.resp_type in (RESPONSE_TYPE.TABLE, RESPONSE_TYPE.COLUMNS_TABLE):
|
|
115
|
+
data = self.result_set.to_lists(json_types=True)
|
|
116
|
+
return {
|
|
117
|
+
"type": RESPONSE_TYPE.TABLE,
|
|
118
|
+
"data": data,
|
|
119
|
+
"column_names": [
|
|
120
|
+
column.alias or column.name
|
|
121
|
+
for column in self.result_set.columns
|
|
122
|
+
],
|
|
123
|
+
}
|
|
124
|
+
elif self.resp_type == RESPONSE_TYPE.ERROR:
|
|
125
|
+
return {
|
|
126
|
+
"type": RESPONSE_TYPE.ERROR,
|
|
127
|
+
"error_code": self.error_code or 0,
|
|
128
|
+
"error_message": self.error_message,
|
|
129
|
+
}
|
|
130
|
+
else:
|
|
131
|
+
raise ValueError(f"Unsupported response type for dump HTTP response: {self.resp_type}")
|
|
132
|
+
|
|
113
133
|
|
|
114
134
|
class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
115
135
|
"""
|
|
@@ -312,14 +332,14 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
312
332
|
self.session.unregister_stmt(stmt_id)
|
|
313
333
|
|
|
314
334
|
def send_query_answer(self, answer: SQLAnswer):
|
|
315
|
-
if answer.type
|
|
335
|
+
if answer.type in (RESPONSE_TYPE.TABLE, RESPONSE_TYPE.COLUMNS_TABLE):
|
|
316
336
|
packages = []
|
|
317
337
|
|
|
318
|
-
if len(answer.
|
|
338
|
+
if len(answer.result_set) > 1000:
|
|
319
339
|
# for big responses leverage pandas map function to convert data to packages
|
|
320
|
-
self.send_table_packets(
|
|
340
|
+
self.send_table_packets(result_set=answer.result_set)
|
|
321
341
|
else:
|
|
322
|
-
packages += self.get_table_packets(
|
|
342
|
+
packages += self.get_table_packets(result_set=answer.result_set)
|
|
323
343
|
|
|
324
344
|
if answer.status is not None:
|
|
325
345
|
packages.append(self.last_packet(status=answer.status))
|
|
@@ -333,7 +353,7 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
333
353
|
ErrPacket, err_code=answer.error_code, msg=answer.error_message
|
|
334
354
|
).send()
|
|
335
355
|
|
|
336
|
-
def _get_column_defenition_packets(self, columns, data=None
|
|
356
|
+
def _get_column_defenition_packets(self, columns: dict, data=None):
|
|
337
357
|
if data is None:
|
|
338
358
|
data = []
|
|
339
359
|
packets = []
|
|
@@ -348,18 +368,16 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
348
368
|
column_name = column.get("name", "column_name")
|
|
349
369
|
column_alias = column.get("alias", column_name)
|
|
350
370
|
flags = column.get("flags", 0)
|
|
351
|
-
if
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
else:
|
|
362
|
-
length = max(len(str(row[i])), length)
|
|
371
|
+
if isinstance(flags, list):
|
|
372
|
+
flags = sum(flags)
|
|
373
|
+
if column.get('size') is None:
|
|
374
|
+
length = 1
|
|
375
|
+
for row in data:
|
|
376
|
+
if isinstance(row, dict):
|
|
377
|
+
length = max(len(str(row[column_alias])), length)
|
|
378
|
+
else:
|
|
379
|
+
length = max(len(str(row[i])), length)
|
|
380
|
+
column['size'] = 1
|
|
363
381
|
|
|
364
382
|
packets.append(
|
|
365
383
|
self.packet(
|
|
@@ -371,16 +389,19 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
371
389
|
column_name=column_name,
|
|
372
390
|
column_type=column["type"],
|
|
373
391
|
charset=column.get("charset", CHARSET_NUMBERS["utf8_unicode_ci"]),
|
|
374
|
-
max_length=
|
|
392
|
+
max_length=column["size"],
|
|
375
393
|
flags=flags,
|
|
376
394
|
)
|
|
377
395
|
)
|
|
378
396
|
return packets
|
|
379
397
|
|
|
380
|
-
def get_table_packets(self,
|
|
398
|
+
def get_table_packets(self, result_set: ResultSet, status=0):
|
|
399
|
+
data_frame, columns_dict = dump_result_set_to_mysql(result_set)
|
|
400
|
+
data = data_frame.to_dict('split')['data']
|
|
401
|
+
|
|
381
402
|
# TODO remove columns order
|
|
382
|
-
packets = [self.packet(ColumnCountPacket, count=len(
|
|
383
|
-
packets.extend(self._get_column_defenition_packets(
|
|
403
|
+
packets = [self.packet(ColumnCountPacket, count=len(columns_dict))]
|
|
404
|
+
packets.extend(self._get_column_defenition_packets(columns_dict, data))
|
|
384
405
|
|
|
385
406
|
if self.client_capabilities.DEPRECATE_EOF is False:
|
|
386
407
|
packets.append(self.packet(EofPacket, status=status))
|
|
@@ -388,9 +409,9 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
388
409
|
packets += [self.packet(ResultsetRowPacket, data=x) for x in data]
|
|
389
410
|
return packets
|
|
390
411
|
|
|
391
|
-
def send_table_packets(self,
|
|
412
|
+
def send_table_packets(self, result_set: ResultSet, status: int = 0):
|
|
413
|
+
df, columns_dicts = dump_result_set_to_mysql(result_set, infer_column_size=True)
|
|
392
414
|
# text protocol, convert all to string and serialize as packages
|
|
393
|
-
df = data.get_raw_df()
|
|
394
415
|
|
|
395
416
|
def apply_f(v):
|
|
396
417
|
if v is None:
|
|
@@ -399,23 +420,10 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
399
420
|
v = str(v)
|
|
400
421
|
return Datum.serialize_str(v)
|
|
401
422
|
|
|
402
|
-
# get column max size
|
|
403
|
-
# column_len is used by mysql client to determine width of columns, so it is not mandatory
|
|
404
|
-
# to get exactly max value. We can approximate them by sample.
|
|
405
|
-
columns_len = None
|
|
406
|
-
if len(df) > 0:
|
|
407
|
-
sample = df.head(100)
|
|
408
|
-
columns_len = []
|
|
409
|
-
for column in sample.columns:
|
|
410
|
-
try:
|
|
411
|
-
columns_len.append(sample[column].astype(str).str.len().max())
|
|
412
|
-
except Exception:
|
|
413
|
-
columns_len.append(1)
|
|
414
|
-
|
|
415
423
|
# columns packages
|
|
416
|
-
packets = [self.packet(ColumnCountPacket, count=len(
|
|
424
|
+
packets = [self.packet(ColumnCountPacket, count=len(columns_dicts))]
|
|
417
425
|
|
|
418
|
-
packets.extend(self._get_column_defenition_packets(
|
|
426
|
+
packets.extend(self._get_column_defenition_packets(columns_dicts))
|
|
419
427
|
|
|
420
428
|
if self.client_capabilities.DEPRECATE_EOF is False:
|
|
421
429
|
packets.append(self.packet(EofPacket, status=status))
|
|
@@ -488,57 +496,12 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
488
496
|
|
|
489
497
|
return {"is_cloud": False}
|
|
490
498
|
|
|
491
|
-
def to_mysql_columns(self, columns_list):
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
result = []
|
|
496
|
-
|
|
497
|
-
database = (
|
|
498
|
-
None if self.session.database == "" else self.session.database.lower()
|
|
499
|
-
)
|
|
500
|
-
for column_record in columns_list:
|
|
501
|
-
|
|
502
|
-
field_type = column_record.type
|
|
503
|
-
|
|
504
|
-
column_type = TYPES.MYSQL_TYPE_VAR_STRING
|
|
505
|
-
# is already in mysql protocol type?
|
|
506
|
-
if isinstance(field_type, int):
|
|
507
|
-
column_type = field_type
|
|
508
|
-
# pandas checks
|
|
509
|
-
elif isinstance(field_type, np_dtype):
|
|
510
|
-
if pd_types.is_integer_dtype(field_type):
|
|
511
|
-
column_type = TYPES.MYSQL_TYPE_LONG
|
|
512
|
-
elif pd_types.is_numeric_dtype(field_type):
|
|
513
|
-
column_type = TYPES.MYSQL_TYPE_DOUBLE
|
|
514
|
-
elif pd_types.is_datetime64_any_dtype(field_type):
|
|
515
|
-
column_type = TYPES.MYSQL_TYPE_DATETIME
|
|
516
|
-
# lightwood checks
|
|
517
|
-
elif field_type == dtype.date:
|
|
518
|
-
column_type = TYPES.MYSQL_TYPE_DATE
|
|
519
|
-
elif field_type == dtype.datetime:
|
|
520
|
-
column_type = TYPES.MYSQL_TYPE_DATETIME
|
|
521
|
-
elif field_type == dtype.float:
|
|
522
|
-
column_type = TYPES.MYSQL_TYPE_DOUBLE
|
|
523
|
-
elif field_type == dtype.integer:
|
|
524
|
-
column_type = TYPES.MYSQL_TYPE_LONG
|
|
525
|
-
|
|
526
|
-
result.append(
|
|
527
|
-
{
|
|
528
|
-
"database": column_record.database or database,
|
|
529
|
-
# TODO add 'original_table'
|
|
530
|
-
"table_name": column_record.table_name,
|
|
531
|
-
"name": column_record.name,
|
|
532
|
-
"alias": column_record.alias or column_record.name,
|
|
533
|
-
# NOTE all work with text-type, but if/when wanted change types to real,
|
|
534
|
-
# it will need to check all types casts in BinaryResultsetRowPacket
|
|
535
|
-
"type": column_type,
|
|
536
|
-
}
|
|
537
|
-
)
|
|
538
|
-
return result
|
|
499
|
+
def to_mysql_columns(self, columns_list: list[Column]) -> list[dict[str, str | int]]:
|
|
500
|
+
database_name = None if self.session.database == "" else self.session.database.lower()
|
|
501
|
+
return [column_to_mysql_column_dict(column, database_name=database_name) for column in columns_list]
|
|
539
502
|
|
|
540
503
|
@profiler.profile()
|
|
541
|
-
def process_query(self, sql):
|
|
504
|
+
def process_query(self, sql) -> SQLAnswer:
|
|
542
505
|
executor = Executor(session=self.session, sqlserver=self)
|
|
543
506
|
executor.query_execute(sql)
|
|
544
507
|
executor_answer = executor.executor_answer
|
|
@@ -553,16 +516,14 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
553
516
|
resp = SQLAnswer(
|
|
554
517
|
resp_type=RESPONSE_TYPE.TABLE,
|
|
555
518
|
state_track=executor_answer.state_track,
|
|
556
|
-
|
|
557
|
-
data=executor_answer.data,
|
|
519
|
+
result_set=executor_answer.data,
|
|
558
520
|
status=executor.server_status,
|
|
559
|
-
affected_rows=executor_answer.affected_rows
|
|
521
|
+
affected_rows=executor_answer.affected_rows,
|
|
522
|
+
mysql_types=executor_answer.data.mysql_types
|
|
560
523
|
)
|
|
561
524
|
|
|
562
525
|
# Increment the counter and include metadata in attributes
|
|
563
|
-
|
|
564
|
-
query_request_counter = get_query_request_counter()
|
|
565
|
-
query_request_counter.add(1, metadata)
|
|
526
|
+
increment_otel_query_request_counter(ctx.get_metadata(query=sql))
|
|
566
527
|
|
|
567
528
|
return resp
|
|
568
529
|
|
|
@@ -613,23 +574,25 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
613
574
|
return self.send_query_answer(resp)
|
|
614
575
|
|
|
615
576
|
# TODO prepared_stmt['type'] == 'lock' is not used but it works
|
|
616
|
-
|
|
617
|
-
|
|
577
|
+
result_set = executor_answer.data
|
|
578
|
+
data_frame, columns_dict = dump_result_set_to_mysql(result_set)
|
|
579
|
+
data = data_frame.to_dict('split')['data']
|
|
618
580
|
|
|
619
|
-
packages
|
|
581
|
+
packages = [self.packet(ColumnCountPacket, count=len(columns_dict))]
|
|
582
|
+
packages.extend(self._get_column_defenition_packets(columns_dict))
|
|
620
583
|
|
|
621
584
|
if self.client_capabilities.DEPRECATE_EOF is False:
|
|
622
585
|
packages.append(self.packet(EofPacket, status=0x0062))
|
|
623
586
|
|
|
624
587
|
# send all
|
|
625
|
-
for row in
|
|
588
|
+
for row in data:
|
|
626
589
|
packages.append(
|
|
627
|
-
self.packet(BinaryResultsetRowPacket, data=row, columns=
|
|
590
|
+
self.packet(BinaryResultsetRowPacket, data=row, columns=columns_dict)
|
|
628
591
|
)
|
|
629
592
|
|
|
630
593
|
server_status = executor.server_status or 0x0002
|
|
631
594
|
packages.append(self.last_packet(status=server_status))
|
|
632
|
-
prepared_stmt["fetched"] += len(
|
|
595
|
+
prepared_stmt["fetched"] += len(data)
|
|
633
596
|
|
|
634
597
|
return self.send_package_group(packages)
|
|
635
598
|
|
|
@@ -741,7 +704,7 @@ class MysqlProxy(SocketServer.BaseRequestHandler):
|
|
|
741
704
|
try:
|
|
742
705
|
if p.type.value == COMMANDS.COM_QUERY:
|
|
743
706
|
sql = self.decode_utf(p.sql.value)
|
|
744
|
-
sql =
|
|
707
|
+
sql = clear_sql(sql)
|
|
745
708
|
logger.debug(f'Incoming query: {sql}')
|
|
746
709
|
profiler.set_meta(
|
|
747
710
|
query=sql, api="mysql", environment=config.get("environment")
|