mirror of https://github.com/sysown/proxysql
v3.0-5384
v3.0-noise-testing
v3.0
v3.0-ai260221
v3.0-misc0221
v2.7.3-test260221
v3.0-pgsql_monitor_repl_lag
v3.0-2233
v3.0_3596_3597
v4.0-mcp-stats2
v3.0-ff_inspect
v3.0_fix-pgsql-extended-query-routing_5387
v3.0-5243
v3.0-tsdb-feature
v4.0-mcp-stats
v3.0_pgsql_advanced_logging
v3.0-set_parser_v3
copilot/uninstall-amazon-linux-2023
v3.0-MCP_multi
GH-Actions
v3.0_pgsql_meta_command_describe_table
fix-prometheus-labels-test
v3.0-test0213
v3.0_pgsql-prepared-statement-refcount-race-5352
v3.0_improve_mysql_monitoring_5256
tap-mcp-client
v3.0-openssl-fix
v3.0-fixes0212
v3.0-5069
agent-skill-tap-test
v3.0_pgsql-meta-cmd-admin-5365
v3.0-webui_2602
v3.0-fix_5256
v3.0-5359
v3.0-misc260209
v3.0-5355
v3.0.6-fix_rustc_check
v3.0-mac3
v3.0_mac2
v3.0-scram_strtok
v3.0_mac
v3.0.6-revert_build_image_versions
v3.0.6-implement_FLUSH_STATS
fix/remove-wrong-index-connection-cleanup
session-track-system-variable
v3.0-merge-v4.0-genai
fix-genai-critical-issues
v3.0.6-add_fedora43
copilot/sub-pr-5329
gh-pages
feature/modern-docs
v4.0
v4.0_rag_ingest_sqlite_server
v4.0-fix-vec-search
v4.0-rag_tools_stats
v4.0_rag_ingest_2
v4.0_rag_sys_prompt
v3.0.6-fix_reg_test_5233_set_warning-t
v4.0-mcp_rules_test
v4.0_rag_mcp
v4.0-tsdb1
v4.0-tsdb
pr-5312-fixes
feature/v4-docs-init
v4.0-update-docker-build-image-versions
otel_system_libs
otel_clean
v3.0-5288
otel
otel_2
fix/postgresql-cluster-sync_2
v3.0.6-bump_version
v3.0_fix-pgsql-threshold-deadlock_5300
v3.0_pg-cancel-terminate-backend-param-support_5298
fix/postgresql-cluster-sync
v3.0-releate_notes_scripts_fixes
v3.0_fix_reg_test_5233_set_warning-t_test
v3.0.5-groups.json_add_missing_test
v3.0_pgsql-use-ssl-issue-5284
v3.0-misc260111
v3.0_buildTap
v3.0_bind-format-issue-5273-fix
v3.0-poll_doc
test_gh-actions_triggers
v3.0-timezone-parser-fix
v3.0-keylog_doc
v3.0_5272
v3.0_fork
v3.0_readme_update_postgres
v3.0_restapi_improvement
v3.0_mysql_monitor_crash_5256
v3.0.5-bump_version
v3.0-304release
v3.0-304-docInstall
v3.0-misc251220
v3.0-handle_unexp_ping
v3.0_mysql_monitor_cur_cmd_cmnt_fix
v3.0_pgsql-query-digest-gen-5253
misc251219
v3.0-set_testing_version
v3.0-issue5248
feature/gtid-range-update
v3.0_pgsql-monitor-sslsupport-5205
v3.0-issue5246
v3.0-issue5244
v3.0_get_server_version
v3.0_wait_timeout
v3.0-5062_2
v3.0-5062
postgresql-digest-testing-improvement
v3.0.4-rpm_spec_rework
v3.0_refactor_prepared_statement_cache_design_5211
v3.0.agentics
fix/issue-4855
v3.0_select_auto_commit
v3.0-5218
fix-5221
v3.0-5212
v3.0.4-add_opensuse16
refactor-gtid-events-count
refactor-gtid-events-count_doc
fix/5186-proxysql-stop-admin-crash
v3.0-4951
add-claude-github-actions-1763877527835
fix-rpm
feature/add-tap-test-documentation
v3.0-DS_crash
add-claude-github-actions-1763663272333
add-claude-github-actions-1763663091346
add-claude-github-actions-1763663091411
v3.0_FastForwardGracefulClose
v3.0.4-balance_test_groups
add-claude-github-actions-1763476725261
add-claude-github-actions-1763476725489
v3.0.4-bump_version
v3.0_optimizations_and_stability
v3.0_refactor_monitoring_ping
v3.0_add_delay_tap_test
v2.7.3.1
v3.0-stmt_exec_bounds_check
v3.0-fix_proclist_use_after_free
v3.0-fullauth_sid
v3.0_default_interface_global_var_5189
v3.0_add_delay_watchdog
v3.0_bind_fmt_patch
v3.0_admin_cmd_5170
v3.0.3-revert-opensuse16
v3.0-fix_use_after_free_in_pgsql_proclist
v3.0-fix_test_server_sess_status
v3.0-fix_use_after_free_in_proclist
v3.0.3-tap_groups_fix
revert-gtid-refactoring
v3.0_optimise_extended_query_response
v3.0.3-upgrade_json
fix-rest-api-tap-test
v3.0.3-upgrade_coredumper
crash-sqlite-max-len
v3.0-debug_log_pass
v3.0.3-makefiles_cleanup
v3.0_assert_to_warning
revert-5129-include_settings_information_schema_stats_expiry
v3.0_disable_pgsql_prometheus_5159
v3.0_pgsql_stat_activity_issue_4682
v3.0.3-upgrade_deps
v3.0.3-upgrade_curl
v3.0_transaction_alias_support_5152
v3.0.3-upgrade_clickhouse
v3.0.3-upgrade_sqlite3
v3.0.3-upgrade_libmicrohttp
v3.0_track_search_path_param_5148
v3.0_parameter_status_case_sensitive_issue_5145
v3.0_datestyle-parser-tweak
v3.0_fix-describe-portal-nodata-empty-query
v3.0_bind_fmt_bug_fix_5140
v3.0.3-add_debian13_builds
v3.0.3-add_centos10_builds
v3.0.3-add_fedora42_builds
v3.0_pgsql_query_cancel_terminate_issue_5136
v3.0_extended_query_pgsql_query_rules_5132
v3.0_postgres_query_logging_issue_5123
5127.changelog.update
v3.0_clang_compilation_fix
v3.0_extend_multiplex_status_test
v3.0_extended_query_protocol_issue_5118
v3.0_extended_query_protocol_phase_2
add_action_php_pdo_pgsql
v3.0_issue_5101
v3.0.sonar-cli
v3.0_issue_5102
v3.0_issue_5100
v3.0.sonar-config
v3.0_fix_issue_5086
v3.0_extended_query_protocol
v3.0.3-bump_version
v3.0_session_param_reset_connection
otel-tracepoint
v3.0_mirror_crash_fix
v3.0-pgsql_mon_table_fix
v3.0_qp_mem_leak_fix
v3.0.2-merge-upgrade_deps-add_new_distros
v3.0.2-upgrade_deps
v3.0-4976
v3.0.2-add_new_distros
v3.0-add_more_testing_groups-v2
v3.0-add_more_testing_groups
v3.0-upgrade_prometheus-cpp
v3.0_mysql_deprecate_native
v3.0-upgrade_json
v3.0-upgrade_sqlite3
v3.0-upgrade_libmicrohttpd
v3.0-upgrade_curl
v3.0-add_centos10_builds
v3.0-add_fedora42_builds
v3.0_PG_PrepStmt
v3.0_structured_libpq_error_message
v3.0-bump_version_to_3.0.2
v3.0-ReadySet1
v3.0-4935
v3.0-sliced_groups
v3.0-4861_fixes1
v3.0_track_transaction_param_state_4907
v3.0-4918
v3.0-4930
v3.0-build_tap_tests_in_container
v3.0_unknown_param_crash_fix_4919
v3.0_read_only_action_deprecated
v3.0-4861-mysql-logging_prepared_statement_parameters
v3.0-ff_conns_eof_caps_match
v3.0_refactor_connection_info_param
v3.0_reg_4867_tap_test
v3.0-4727
v3.0_auth_negotiation
v3.0-4877
v3.0-sqlite3_permission
v3.0-pass_env_to_docker
v3.0-4803_20250313
v3.0_shutdown_debug
v2.7
v2.7-fix_run_name
v3.0-fix_run_name
v3.0-ci_fixes_172
v3.0_improve_copy_stdin
v3.0_issue_4867
v3.0-4856
v3.0_session_parameter_tracking
v3.0_4799_4827
v3.0-3687
v2.7-pmm_runtime_servers_metrics
v2.7-4839
v3.0-4839
v2.7-4841
v2.7-bump_version_to_2.7.3
2.6.6-4841
v3.0-flush_debug
v3.0_collation_255
v2.x_pg_PrepStmtBase_240714
v3.0-4803-4817
v3.0-4803
v2.7-minorBugs
v3.0_debugFastLog
v3.0-privates
v3.0_compression_test_fix
v3.0-rev4806
v3.0-SetThreadName_optional
v3.0-rm_malloc_conf_on_version
v3.0-fix_aux_threads_ssl_leaks
v3.0-fix_ssl_params_leak
v3.0-conns_eof_caps_match
v2.x-logging_mem_2
v2.7_fix
v2.7_amd64_build_fix
v2.7-fix_aux_threads_ssl_leaks
v2.7-fix_ssl_params_leak
v2.7-rm_malloc_conf_on_version
v2.7_compression
v3.0_compression
openssl_enhancement
v3.0-actions-add-3p-test-parameter
v2.7-actions-add-3p-tests-parameter
v3.0_notice_support
v3.0-fix-builds
v3.0_dynamic_fast_forward
none
ssl_dynamic_lib
v3.0-fix_hang_on_resume
v2.7-fix_hang_on_resume
v3.0-remove-obsolete-distros
v3.0_refactor_query_cache
v2.x-logging_mem
v2.7_servers_defaults
v3.0_ssl_warnings
v3.0_copy_out_support
v3.0_randomized_cache_ttl
v3.0_issue_4707_threshold_resultset_size
v3.0-mariadb_column_metadata_integrity_check
v2.7-mariadb_column_metadata_integrity_check
ssl_optimization
v3.0-postgres_read_only
v2.7_reg_test_4716_single_semicolon
v2.7_issue_4707_threshold_resultset_size
v2.7_reg_test_4723_query_cache_stores_empty_result
2.7_randomized_cache_ttl
v3.0_env_opt_support
v3.0-fix_ubuntu24_fedora41_builds
v3.0_fix_multiple_builds
v3.0_servers_defaults
v3.0-bump_version_to_3.0.1
v3.0_reg_test_4716_single_semicolon
v2.7-update_actions_triggers_v2
v3.0-update_actions_triggers_v2
v3.0_test_aurora_build
v3.0_mem_leak_fixes
v3.0_escape_connection_param
v3.0_clang_linking_fix
v3.0-postgres_monitor_poc
v2.7-update_actions_triggers
v3.0_unsupported_features_error
v3.0_remove_pkgroot
v3.0_md5_auth_support
v3.0-update_actions_triggers
v3.0_pgsql_digest_stats_tables
v3.0-add_pkglist_targets
v2.7-bump_version_to_2.7.2
v3.0-doc240920
v3.0-4658_4659
v3.0_obsolete
v2.6
v2.7-4658_4659
v2.6_dns_cache_fixes
v2.7_dns_cache_fixes
v2.6.x-update_triggers
v2.6-4646
v2.7-4646
v2.7-PackageSpeedup
v2.7.1-update_actions
v2.7.1-add_fedora41
v2.7.1-update_gh_triggers
v2.7.1-bump_version_to_2.7.1
v2.7-update_version_to_2.7.0
v2.x
v2.x-4628
v2.x_stats_digest_uppercase
v2.x_proxy
v2.x-4589
v2.x-fix_connpool_metrics_init_val
v2.x-fix_change_user_assert
v2.6.x-use_versioned_build_images
v2.6.x-add_test_groups
v2.x-4612
v2.6.x-fix_gcov_files
v2.x_4598
v2.x-AT
v2.x-backend_conns_ssl_err_clear
v2.x-client_ssl_busy_wait
v2.6.4-fix_fedora40_arm64_build
v2.x-240708
set-thread-names
v2.x-POLLHUP
v2.x_240702
x509_mmap
v2.x-4572
v2.6.x-testing-global-multiplexing-disabled
v2.x-4567
v2.6.x-update_to_openssl_3.3.1
use-wrlock-in-dns-cache-empty
v2.6.x-fix_use_local_includes
v2.x-digest_spaces_fix
v2.6.x-fix-darwin
v2.6.x-freebsd_fixes
v2.x_monitor_slave_lag_when_null_4521
v2.x-fix_cluster_leaks
v2.x-disable_ssl_tickets
v2.6.x-ubuntu24-fedora40
v2.x_hostgroup_online_servers
fix-tests-build
v2.x_240429-2
v2.x_240429
v2.x_240427
v2.x_240424
v2.x-admin_list_ciphers
v2.x_240421_fixes
v2.x-4493
v2.x-4510
v2.x_240421
v2.6.x-freebsd_fixes_2
v2.x-jemalloc_defaults
v2.x-4491
v2.6.x-fix_docker_compose
2.x-AWS_RDS_autodiscovery
v2.x-stmt_explain
v2.x-sqlite3_pass_exts-2
v2.x-caching_sha2_compress
v2.x-ps3371
v2.x-restartbackoff
v2.x-doc240320
v2.x-sqlite3_pass_exts
v2.x-tap_tests_opt_ssl
v2.6-4466
v2.x-clang_cppdotenv
v2.6.0-update_to_libhttpserver_v0.19
v2.x_Servers_SSL_Params
v2.x_sha2pass_draft3
v2.x_openssl_verify_load_cacert_duration
v2.x_memleak_fix_stats_mysql_prepared_statements_info
v2.x_shun_replication_lag
v2.6.0-fix-test_ssl-poolout
v2.x_dns_stale_record_fix
v2.x_router_2ports
v2.6.0-update_to_openssl_v3.2.1
v2.6.0-update_to_openssl_v3.1.5
v2.6.0-fix-package-licensing
v2.x-2411025
v2.x-profiling_poc1
v2.6.0-4437-deprecate-old-distros
v2.x-4438
v2.x-year
v2.x-4335
v2.x-4241
v2.x-pause_status
v2.x-4396
v2.x-4355
v2.x-2091
v2.x-aurora_autodiscovery-refactor_cluster_mysql_servers-gr_bootstrap_mode
v2.x_issue_4399
v2.x-4415
v2.x_fixed_tap_rpath
v2.6.0-set_testing-240-iterate-all-rhg
v2.x_update_mariadb_connector_to_3.3.8
v2.6.0-clang-fix
v2.x_unified_makefile_fixes
v2.x_issue_4402
v2.x_sha2pass_draft2
v2.x_cleanup231208
v2.x-webui_fixes
v2.6.0-centos9
v2.6.0-more-makefile-fixes
v2.x_warning_support
v2.x_testing_ci_test_failures
v2.x_issue_4380
v2.x_no_reg_test_3273
v2.x-set_testing_fix
v2.x-depr_checksum_vars_fix
v2.x-20230914_test
v2.x-20230913_test
v2.5.5-branch
v2.5.5-branch_255_patches
v2.x-aurora_autodiscovery-refactor_cluster_mysql_servers-gr_bootstrap_mode_2
v2.x_mysql_connector_j_fixes
v2.6-deprecate_old_clickhouse_2
v2.6-deprecate_old_clickhouse
v2.x-4300
v2.x_update_dns_records_count
v2.x-clickhouse230726
v2.6.0-tap_test_fixes
v2.x-4272
v2.x-4264
v2.x-fast_routing_race_cond_fix
v2.x_refactor_cluster_mysql_servers
v2.x-aurora_autodiscovery
v2.x_read_only_actions_offline_hard_servers
v2.x-patch_libdaemon_umask
v2.x-prometheus0717
v2.x-change_user_compression
v2.x-zd70545
v2.x-aurora_autodiscovery_shunned_promotion
v2.x-tap20230609
v2.x_unix_socket_ssl
v2.x_ssl_support_kill_query
v2.x_ssl_keylog_support
v2.x-dynamic_test_mysql_query_rules_fast_routing
v2.x_coredump_stats_fix
v2.x_issue_4194
v2.x-test20230530
v2.x-poll_optimization
v2.x_troubleshooting-feature
v2.x-fix_charset_init_handshake
v2.x_sha2pass_draft2-TEST
v.2x_dns_cache_issue_4210
v2.x-gr_autodiscovery
v2.x-hostgroup_attributes_servers_defaults
v2.x_dns_cache_update_message
v2.x-ssl3_warnings2
v2.x-log_insert_id2
v2.x-cluster_sync_disabled_modules_checksums
v2.x-session_track_system_variables_v2
v2.x-status-variables-for-set-stmts
v2.x-enable_session_state_trackers
v2.x-increase-logging-eof_fast_forward-t
v2.x-3863-special-query
v2.x-session_track_system_variables
v2.x_refactor_read_only_action
v2.x_sha2pass_draft1
CodeQL
v2.x-3863
v2.2.0-sqliteserver_read_only
v2.x-digest_umap_aux-comparison
v2.4.8
v2.x-HG_init_connect
v2.x-4105_4114
v2.x-3583-server_closed_conn
v2.x-4066-upgrade_deps
v2.x-group_replication_rework-SHUNNED_promotion
v2.1.0-var-global-multiplex
v2.x-CI-hostname-tap-test-fixes
v2.x-limit-version-check
v2.x-fix_deprecate_eof_warning
v2.x-3698
v2.x_tidb_replica_read
v2.x-HostGroups_attributes
v2.0.18.221009
v2.x-ci_reg_test_3273_ssl_con
TAP_test_restapi
v2.x-tap_tests_groups
v2.x-tap_test_sqlite3_server-t
PRS_3888_3903_2
PRS_3888_3903
v2.x_code_refactor_2206
v2.x-multipacket_poc_1
v2.x-impr_hg_latency_obsv
v2.x-gcc-warnings
v2.x-hg_lock_session_id
v2.x-3768
v2.x-3371
v2.x-ci_verifications
v2.x-thread_local_qps_limit
v2.x-parser_table
v2.1.1-3207
v2.x-qps_limits
v2.x-3711
v2.x-3642
v2.x-3674
v2.x-ssl3_warnings
V2
v2.3.2
v2.3.2_3646_3647
v2.x-client_err_limit_conn_timeout
v2.x-keep_multiplexing_regression_fix
v2.3.2-3628
v2.2.2-to-v2.3.0-7
v2.2.2-to-v2.3.0-7_merge
v2.2.2-to-v2.3.0-6
v2.2.2-to-v2.3.0-6_merge
v2.2.2-to-v2.3.0-5
v2.2.2-to-v2.3.0-4
v2.2.2-to-v2.3.0-3
v2.2.2-to-v2.3.0-2
v2.2.2-to-v2.3.0-1
v2.3.1
v2.0.14-70226
v2.3.0
v2.x-client_err_limit-gr_replication_lag_action
v2.2.2
v2.2.1-3603
v2.2.1-centos7-ASAN
v2.2.1
v2.2.1-3601
v2.2.1-3599
v2.2.1-3597
v2.2.1-3595
v2.2.0-restapi_server_exc_log
v2.x-3574
v2.x-3558
v2.2.0-3546-centos-7-gcc-8
v2.x-3549
v2.x-cluster_large_mysql_users
v2.x-cov_ci_verification
v2.0.14-tb1
v2.0.14-tb1-3494
v2.0.14-tb1-3488
v2.0.14-tb1-3117
v2.0.14-tb1-2762
v2.0.14-2762
v1.4.13-arm
v2.1.1-3296
v2.2.0
v2.0.18
v2.1.1
v2.0.18-3342
v2.0.18-3182
v2.1.1-3184
v2.1.0-revert-da7fdfe14
v2.0.18-revert-da7fdfe14
v1.4.13-70160
v2.0.18-3354
v2.0.18-3350
v2.0.14-3339
1.4.13-70160
v2.0.18-3339
v2.1.1-3317
v2.1.1-3319
v2.0.18-3317
v2.1.2-LBalgo
v2.0.18-1574
v2.1.2-hgman
v2.0.17
v2.1.0
v2.0.17-3288
v2.0.17-3276
v2.0.17-3273
v2.0.16
v2.0.16-3267
v2.0.16-3265
v2.0.16-3262
v2.0.16-3261
v2.1.1-3252
v2.1.1-collation
v2.0.16-3252
v2.0.16-collation
v2.1.0-3238
v2.1.0-parser
v2.0.16-3219
v2.0.16-3216
v2.0.16-3201
v2.0.16-2330
revert-3191-v2.0.16-3190
v2.0.16-3204
v2.0.16-3177
v2.0.16-2619
v2.0.16-3190
v2.0.16-3187
v2.1.0-70118
v2.0.16-3133
v2.0.16-3133_ci_verification
v2.0.16-3150
v2.0.16-change_user
v2.0.15
v2.0.15_amd64_fix
v2.0.15_arm64_packages
v1.4.14-ssl
v2.0.15_arm64
v2.1.0-2820
v2.0.15-sslbug
v2.0.15-KillTrx
v2.0.14
v2.0.14-ch_build_fix
v2.0.14-focal
v2.0.14-valgrind20200904
v2.1.0-3042
v2.0.14-3035
v2.0.14-3036
v2.0.14-2955
v2.0.14-vars
v2.0.14-3005
v2.0.14-3003
v2.0.14_2970_2979
v2.0.14-NOTSOCK
v2.1.0'
v2.0.14-2958
v1.4.10-zd
v2.0.13
v2.0.13-autocommit_fix
v2.1.0-2892
v2.0.13-2711
v2.0.13-duplicated_variables
v2.0.13-duplicated_variables_for_2.1.0
v2.0.12-deprecate_eof
v2.1.0-1377
v2.1.0-admin_queries
v2.0.12-var-global-multiplex
v2.1.0-var-foreign-key
v2.0.12
v2.0.12-tab-small-log
v2.0.12-var-foreign-key
v2.0.12-var-long-query-time
v2.0.12-galera-shunned
v2.1.0-admin_queries_2
v2.1.0-tap-rm-config
v2.0.12-tap-rm-config-test
v2.1.0-QP_stmt_3
v2.0.11-fix-multi-2-ci
v2.0.11-fix-multi
v2.0.11-266_0-3
2.1.0
v2.0.11
v2.1.0-track-vars
v2.1.0-track-variables
v2.0.11-track-variables
v2.0.11-2526
v2.0.11-tap-tests
v2.0.13-2698-commit1
v2.0.10-galera-pxc-maint-mode
v2.0.11-track-vars
v2.0.10-2647
v2.0.11-track
v2.0.11-track-session-vars
v2.0.9-var-array-review
v2.0.11-stats
v2.0.10
v2.0.10-centos67
v1.4.14.2
1.4.14.2
v1.4.14-show-warnings
v2.0.9
v2.0.9-var-array_2
v2.0.9-var-array
v1.4.16
v2.0.8
val214-changing_charset
v2.0.6
v1.4.16-1922_2
v1.4.13.2
v2.0.4-charset248
v2.0.5
v1.4.10-67841
v2.0.4
v2.0.4-sqlite327
v2.0.3
v2.0.2
v1.4.15
v2.0.1
v1.4.14
v2.0.0
v1.4.14-ping_shun
v1.4.14-1828
v1.4.14-latency_awareness
v1.4.12
v1.4.13-admin_deadlock
v2.0.0-improve_speed
v1.4.13
v1.4.13-autocommit_revert
v1.4.11.2
v1.4.13-ps
v2.0.0_bionic_deb_fix
v2_962
v1.4.12-1640
v1.4.11-names_tz
v1.4.12-1693
master
v1.4.11
v1.4.10
v1.4.6
v1.3.10
jenkins_test
v2.0.0-cachegrind
v1.4.9
v2.0-lab
v149_1511
v149_1382
v1.4.7-f2
v1.4.7-f1
v149_1491
v1.4.5-kub
v1.4.8
v2.0-web2
v1.4.3
v1.4.7
bsd_install_update
v1.4.2
v1.4.1-ch2
v1.4.1
v1.3.9
v1.4.1-ch
v1.3.8
v1.3.8-dev
v1.3.7
v1.3.7-dev
v1.3.6-dev
v1.4.0-clickhouse
v1.4.0
v1.3.6
v1.3.5
v1.3.5-dev
v1.4.0-955
v1.3.4
v1.3.4-dev
v1.3.3
v1.3.3-dev
v1.3.2
v1.3.2-dev
v1.3.2-766
v1.3.0h
v1.3.1-utf8mb4
1.4.0-840
v1.3.1
v1.2.6
v1.3.0
v1.4.0-797
v1.2.5-715
v1.2.5
v1.2.4-lowmem
v1.3.1-dev-mem
v1.2.0
connleak
lab-1.2.0
v1.1.2
T107_add_proxysql_consul_requirements
T89_write_consul_integration_doc
T98_consul_multi_table_config
mongoose
evhttp
SQLiteServer
1.0
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
2.7.3
2.6.6.1
3.0.1
2.7.2
3.0.0
2.6.6
2.7.1
2.7.0
2.6.5
2.6.4
2.6.3
2.6.2
2.6.1
2.5.5
2.6.0
2.5.4
2.5.3
2.5.2
2.5.1
2.4.8
2.5.0
2.4.7
2.4.6
2.4.5
2.4.4
2.4.3
2.4.2
2.4.1
2.4.0
2.3.2
2.3.1
2.3.0
2.2.2
2.2.1
2.2.0
2.0.18
2.1.1
2.0.17
2.0.16
2.0.15
2.0.14
2.0.13
2.0.12
2.0.11
2.1.0
2.0.10
2.0.9
2.0.8
2.0.7
2.0.6
2.0.5
2.0.4
2.0.3
2.0.2
1.4.16
1.4.15
2.0.1
1.4.14
1.4.13
1.4.12
1.4.11
1.4.10
1.3.10
1.4.9
2.0.0
1.4.8
1.4.7
1.4.6
1.4.4
1.4.3
1.4.2
1.3.9
1.3.8
1.4.1
1.3.7
1.4.0
1.3.6
1.3.5
1.3.4
1.3.3
1.3.2
1.3.1
1.3.0h
1.3.0g
1.3.0f
1.3.0e
1.3.0d
1.3.0c
v1.3.0b
1.4.5
v1.1.0
v1.1.0-rc
v1.1.1-beta
v1.1.1-beta.1
v1.1.1-beta.2
v1.1.1-beta.3
v1.1.1-beta.4
v1.1.1-beta.5
v1.1.1-beta.6
v1.1.2
v1.2.0a
v1.2.0b
v1.2.0c
v1.2.0d
v1.2.0e
v1.2.0f
v1.2.0g
v1.2.0h
v1.2.0i
v1.2.0j
v1.2.0k
v1.2.1
v1.2.2
v1.2.3
v1.2.4
v1.2.4.0923
v1.2.5
v1.2.6
v1.3.0
v1.3.0a
v1.3.0g
v1.3.0h
v1.3.1
v1.3.10
v1.3.2
v1.3.2-1
v1.3.3
v1.3.4
v1.3.5
v1.3.6
v1.3.7
v1.3.8
v1.3.9
v1.3.9-prev.1
v1.4.0
v1.4.1
v1.4.10
v1.4.11
v1.4.12
v1.4.13
v1.4.14
v1.4.15
v1.4.16
v1.4.2
v1.4.3
v1.4.4
v1.4.5
v1.4.6
v1.4.7
v1.4.8
v1.4.9
v2.0.0-beta.1
v2.0.0-rc1
v2.0.0-rc2
v2.0.1
v2.0.10
v2.0.11
v2.0.12
v2.0.13
v2.0.14
v2.0.15
v2.0.16
v2.0.17
v2.0.18
v2.0.2
v2.0.3
v2.0.4
v2.0.5
v2.0.6
v2.0.7
v2.0.8
v2.0.9
v2.1.0
v2.1.1
v2.2.0
v2.2.1
v2.2.2
v2.3.0
v2.3.1
v2.3.2
v2.4.0
v2.4.1
v2.4.2
v2.4.3
v2.4.4
v2.4.5
v2.4.6
v2.4.7
v2.4.8
v2.5.0
v2.5.1
v2.5.2
v2.5.3
v2.5.4
v2.5.5
v2.6.0
v2.6.1
v2.6.2
v2.6.3
v2.6.4
v2.6.5
v2.6.6
v2.7.0
v2.7.1
v2.7.2
v2.7.3
v3.0.0-alpha
v3.0.1
v3.0.2
v3.0.3
v3.0.4
v3.0.5
${ noResults }
1977 Commits (3fe8a48f705bea9bb77c3255e54bbc1ace125ebb)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
3fe8a48f70 |
Fix genai variable handling and add API key masking
- Add has_variable() method to GenAI_Threads_Handler for variable validation - Add genai- prefix check in is_valid_global_variable() - Auto-initialize NL2SQL converter when genai-nl2sql_enabled is set to true at runtime - Make init_nl2sql() public to allow runtime initialization - Mask API keys in logs (show only first 2 chars, rest as 'x') |
1 month ago |
|
|
4018a0ad3b |
fix: Follow MCP pattern for GenAI variables runtime table population
Update flush_genai_variables___database_to_runtime() to match the MCP pattern exactly: - Add 'lock' parameter (default true) for flexibility - Use ProxySQL_Admin's wrlock()/wrunlock() instead of GloGATH's - Use consistent variable naming (var_name = name + 6 for 'genai-' prefix) - Follow exact same locking pattern as MCP variables This fixes the issue where runtime_global_variables table was not being populated on startup because the locking pattern was incorrect. |
1 month ago |
|
|
527bfed297 |
fix: Migrate AI variables to GenAI module for proper architecture
This commit fixes a serious design flaw where AI configuration variables were not integrated with the ProxySQL admin interface. All ai_* variables have been migrated to the GenAI module as genai-* variables. Changes: - Added 21 new genai_* variables to GenAI_Thread.h structure - Implemented get/set functions for all new variables in GenAI_Thread.cpp - Removed internal variables struct from AI_Features_Manager - AI_Features_Manager now reads from GloGATH instead of internal state - Updated documentation to reference genai-* variables - Fixed debug.cpp assertion for PROXY_DEBUG_NL2SQL and PROXY_DEBUG_ANOMALY Variable mapping: - ai_nl2sql_enabled → genai-nl2sql_enabled - ai_anomaly_detection_enabled → genai-anomaly_enabled - ai_features_enabled → genai-enabled - All other ai_* variables follow the same pattern The flush functions automatically handle all variables in the genai_thread_variables_names array, so database persistence works correctly without additional changes. Related to: https://github.com/ProxySQL/proxysql-vec/pull/13 |
1 month ago |
|
|
ae4200dbc0 |
Enhance AI features with improved validation, memory safety, error handling, and performance monitoring
- Rename validate_provider_name to validate_provider_format for clarity - Add null checks and error handling for all strdup() operations - Enhance error messages with more context and HTTP status codes - Implement performance monitoring with timing metrics for LLM calls and cache operations - Add comprehensive test coverage for edge cases, retry scenarios, and performance - Extend status variables to track performance metrics - Update MySQL session to report timing information to AI manager |
1 month ago |
|
|
8f38b8a577 |
feat: Add exponential backoff retry for transient LLM failures
This commit adds configurable retry logic with exponential backoff for NL2SQL LLM API calls. Changes: - Add retry configuration to NL2SQLRequest (max_retries, retry_backoff_ms, retry_multiplier, retry_max_backoff_ms) - Add is_retryable_error() to identify retryable HTTP/CURL errors - Add sleep_with_jitter() for exponential backoff with 10% jitter - Add call_generic_openai_with_retry() wrapper - Add call_generic_anthropic_with_retry() wrapper - Update NL2SQL_Converter::convert() to use retry wrappers Default retry behavior: - 3 retries with 1000ms initial backoff - 2.0x multiplier, 30000ms max backoff - Retries on empty responses (transient failures) Part of: Phase 3 of NL2SQL improvement plan |
1 month ago |
|
|
d0dc36ac0b |
feat: Add structured logging with timing and request IDs
Add comprehensive structured logging for NL2SQL LLM API calls with request correlation, timing metrics, and detailed error context. Changes: - Add request_id field to NL2SQLRequest with UUID-like auto-generation - Add structured logging macros: * LOG_LLM_REQUEST: Logs URL, model, prompt length with request ID * LOG_LLM_RESPONSE: Logs HTTP status, duration_ms, response preview * LOG_LLM_ERROR: Logs error phase, message, and status code - Update call_generic_openai() signature to accept req_id parameter - Update call_generic_anthropic() signature to accept req_id parameter - Add timing metrics to both LLM call functions using clock_gettime() - Replace existing debug logging with structured logging macros - Update convert() to pass request_id to LLM calls Request IDs are generated as UUID-like strings (e.g., "12345678-9abc-def0-1234-567890abcdef") and are included in all log messages for correlation. This allows tracking a single NL2SQL request through all log lines from request to response. Timing is measured using CLOCK_MONOTONIC for accurate duration tracking of LLM API calls, reported in milliseconds. This provides much better debugging capability when troubleshooting NL2SQL issues, as administrators can now: - Correlate all log lines for a single request - See exact timing of LLM API calls - Identify which phase of processing failed - Track request/response metrics Fixes #2 - Add Structured Logging |
1 month ago |
|
|
45e592b623 |
feat: Add structured error messages with context to NL2SQL
Add comprehensive error details to help users debug NL2SQL conversion issues. Changes: - Add error_code, error_details, http_status_code, provider_used fields to NL2SQLResult - Add NL2SQLErrorCode enum with structured error codes: * SUCCESS, ERR_API_KEY_MISSING, ERR_API_KEY_INVALID, ERR_TIMEOUT * ERR_CONNECTION_FAILED, ERR_RATE_LIMITED, ERR_SERVER_ERROR * ERR_EMPTY_RESPONSE, ERR_INVALID_RESPONSE, ERR_SQL_INJECTION_DETECTED * ERR_VALIDATION_FAILED, ERR_UNKNOWN_PROVIDER, ERR_REQUEST_TOO_LARGE - Add nl2sql_error_code_to_string() function for error code conversion - Add format_error_context() helper to create detailed error messages including: * Query (truncated if too long) * Schema name * Provider attempted * Endpoint URL * Specific error message - Add set_error_details() helper to populate error fields - Update error handling in convert() to use new error details - Track provider_used in successful conversions This provides much better debugging information when NL2SQL conversions fail, making it easier to identify misconfigurations and connectivity issues. Fixes #1 - Improve Error Messages |
1 month ago |
|
|
36b11223b2 |
feat: Improve SQL validation with multi-factor scoring
Add comprehensive SQL validation with confidence scoring based on: - SQL keyword detection (17 keywords covering DDL/DML/transactions) - Structural validation (balanced parentheses and quotes) - SQL injection pattern detection - Length and quality checks Confidence scoring: - Base 0.4 for valid SQL keyword - +0.15 for balanced parentheses - +0.15 for balanced quotes - +0.1 for minimum length - +0.1 for FROM clause in SELECT statements - +0.1 for no injection patterns - -0.3 penalty for injection patterns detected Low confidence (< 0.5) results are logged with detailed info. Cache storage threshold updated to 0.5 confidence (from implicit valid_sql). This improves detection of malformed or potentially malicious SQL while providing granular confidence scores for downstream use. |
1 month ago |
|
|
897d306d2d |
Refactor: Simplify NL2SQL to use only generic providers
Remove Ollama-specific provider code and use only generic OpenAI-compatible and Anthropic-compatible providers. Ollama is now used via its OpenAI-compatible endpoint at /v1/chat/completions. Changes: - Remove LOCAL_OLLAMA from ModelProvider enum - Remove ai_nl2sql_ollama_model and ai_nl2sql_ollama_url variables - Remove call_ollama() function from LLM_Clients.cpp - Update default configuration to use OpenAI provider with Ollama URL - Update all documentation to reflect generic-only approach Configuration: - ai_nl2sql_provider: 'openai' or 'anthropic' (default: 'openai') - ai_nl2sql_provider_url: endpoint URL (default: Ollama OpenAI-compatible) - ai_nl2sql_provider_model: model name - ai_nl2sql_provider_key: API key (optional for local endpoints) This simplifies the codebase by removing a separate code path for Ollama and aligns with the goal of avoiding provider-specific variables. |
1 month ago |
|
|
fec7d64093 |
feat: Implement NL2SQL vector cache with GenAI embedding generation
Implemented semantic caching for NL2SQL using sqlite-vec and GenAI module: Changes to lib/AI_Features_Manager.cpp: - Create virtual vec0 tables for similarity search: * nl2sql_cache_vec for NL2SQL cache * anomaly_patterns_vec for threat patterns * query_history_vec for query history Changes to include/NL2SQL_Converter.h: - Add get_query_embedding() method declaration Changes to lib/NL2SQL_Converter.cpp: - Add GenAI_Thread.h include and GloGATH extern - Implement get_query_embedding() - calls GloGATH->embed_documents() - Implement check_vector_cache() - sqlite-vec KNN search with cosine distance - Implement store_in_vector_cache() - stores embedding and updates vec table - Implement clear_cache() - deletes from both main and vec tables - Implement get_cache_stats() - returns cache entry/hit counts - Add vector_to_json() helper for sqlite-vec MATCH queries Features: - Uses GenAI module (llama-server) for embedding generation - Cosine similarity search via sqlite-vec vec_distance_cosine() - Configurable similarity threshold (ai_nl2sql_cache_similarity_threshold) - Automatic hit counting and timestamp tracking |
1 month ago |
|
|
52a70b0b09 |
feat: Implement AI-based Anomaly Detection for ProxySQL
Phase 3: Anomaly Detection Implementation
This commit implements a comprehensive multi-stage anomaly detection
system for real-time SQL query security analysis.
**Core Detection Methods:**
1. **SQL Injection Pattern Detection** (lib/Anomaly_Detector.cpp)
- Regex-based detection of 11 SQL injection patterns
- Suspicious keyword detection (11 patterns)
- Covers: tautologies, union-based, comment-based, stacked queries
2. **Query Normalization** (lib/Anomaly_Detector.cpp:normalize_query)
- Converts to lowercase
- Removes SQL comments
- Replaces string/numeric literals with placeholders
- Normalizes whitespace
3. **Rate Limiting** (lib/Anomaly_Detector.cpp:check_rate_limiting)
- Per user/host query rate tracking
- Configurable time windows (3600s default)
- Auto-block on threshold exceeded
- Prevents DoS and brute force attacks
4. **Statistical Anomaly Detection** (lib/Anomaly_Detector.cpp:check_statistical_anomaly)
- Z-score based outlier detection
- Abnormal execution time detection (>5s)
- Large result set detection (>10000 rows)
- Behavioral profiling per user
5. **Embedding-based Similarity** (lib/Anomaly_Detector.cpp:check_embedding_similarity)
- Placeholder for vector similarity search
- Framework for sqlite-vec integration
- Detects novel attack variations
**Query Flow Integration:**
- Added `detect_ai_anomaly()` to MySQL_Session (line 3626)
- Integrated after libinjection SQLi detection (line 5150)
- Blocks queries when risk threshold exceeded (default: 0.70)
- Sends error response with anomaly details
**Status Variables Added:**
- `ai_detected_anomalies`: Total anomalies detected
- `ai_blocked_queries`: Total queries blocked
- Available via: `SELECT * FROM stats_mysql_global`
**Configuration (defaults):**
- `enabled`: true
- `risk_threshold`: 70 (0-100)
- `similarity_threshold`: 85 (0-100)
- `rate_limit`: 100 queries/hour
- `auto_block`: true
- `log_only`: false
**Detection Pipeline:**
```
Query → SQLi Check → AI Anomaly Check → [Block if needed] → Execute
(libinjection) (Multi-stage)
```
**Files Modified:**
- include/MySQL_Session.h: Added detect_ai_anomaly() declaration
- include/MySQL_Thread.h: Added AI status variables
- lib/Anomaly_Detector.cpp: Full implementation (700+ lines)
- lib/MySQL_Session.cpp: Integration and query flow
- lib/MySQL_Thread.cpp: Status variable definitions
**Next Steps:**
- Add unit tests for each detection method
- Add integration tests with sample attacks
- Add user and developer documentation
Related: Phase 1-2 (NL2SQL foundation and testing)
Related: Phase 4 (Vector storage for embeddings)
|
1 month ago |
|
|
3f44229e28 |
feat: Add MCP AI Tool Handler for NL2SQL with test script
Phase 5: MCP Tool Implementation for NL2SQL
This commit implements the AI Tool Handler for the MCP (Model Context
Protocol) server, exposing NL2SQL functionality as an MCP tool.
**New Files:**
- include/AI_Tool_Handler.h: Header for AI_Tool_Handler class
- Provides ai_nl2sql_convert tool via MCP protocol
- Wraps NL2SQL_Converter and Anomaly_Detector
- Inherits from MCP_Tool_Handler base class
- lib/AI_Tool_Handler.cpp: Implementation
- Implements ai_nl2sql_convert tool execution
- Accepts parameters: natural_language (required), schema,
context_tables, max_latency_ms, allow_cache
- Returns JSON response with sql_query, confidence, explanation,
cached, cache_id
- scripts/mcp/test_nl2sql_tools.sh: Test script for NL2SQL MCP tool
- Tests ai_nl2sql_convert via JSON-RPC over HTTPS
- 10 test cases covering SELECT, WHERE, JOIN, aggregation, etc.
- Includes error handling test for empty queries
- Supports --verbose, --quiet options
**Modified Files:**
- include/MCP_Thread.h: Add AI_Tool_Handler forward declaration and pointer
- lib/Makefile: Add AI_Tool_Handler.oo to _OBJ_CXX list
- lib/ProxySQL_MCP_Server.cpp: Initialize and register AI tool handler
- Creates AI_Tool_Handler with GloAI components
- Registers /mcp/ai endpoint
- Adds cleanup in destructor
**MCP Tool Details:**
- Endpoint: /mcp/ai
- Tool: ai_nl2sql_convert
- Parameters:
- natural_language (string, required): Natural language query
- schema (string, optional): Database schema name
- context_tables (string, optional): Comma-separated table list
- max_latency_ms (integer, optional): Max acceptable latency
- allow_cache (boolean, optional): Check semantic cache (default: true)
**Testing:**
Run the test script with:
./scripts/mcp/test_nl2sql_tools.sh [--verbose] [--quiet]
See scripts/mcp/test_nl2sql_tools.sh --help for usage.
Related: Phase 1-4 (Documentation, Unit Tests, Integration Tests, E2E Tests)
Related: Phase 6-8 (User Docs, Developer Docs, Test Docs)
|
1 month ago |
|
|
4f45c25945 |
docs: Add comprehensive doxygen comments to NL2SQL headers and LLM_Clients
- Add file-level doxygen documentation with @file, @brief, @date, @version - Add detailed class and method documentation with @param, @return, @note, @see - Document data structures (NL2SQLRequest, NL2SQLResult, ModelProvider) - Add section comments and inline documentation for implementation files - Document all three LLM provider APIs (Ollama, OpenAI, Anthropic) |
1 month ago |
|
|
bc4fff12ce |
feat: Add NL2SQL query interception in MySQL_Session
- Add NL2SQL handler declaration - Add routing for 'NL2SQL:' prefix - Return resultset with generated SQL and metadata |
1 month ago |
|
|
147a059781 |
feat: Add NL2SQL converter with hybrid LLM support
- Add NL2SQL_Converter with prompt building and model selection - Add LLM clients for Ollama, OpenAI, Anthropic APIs - Update Makefile for new source files |
1 month ago |
|
|
d9346fe64d |
feat: Add AI features manager foundation
- Add AI_Features_Manager coordinator class - Add AI_Vector_Storage interface (stub) - Add Anomaly_Detector class (stub for Phase 3) - Update includes and main initialization |
1 month ago |
|
|
313f637cf0
|
Merge branch 'v3.1-vec' into v3.1-MCP1
Signed-off-by: René Cannaò <rene.cannao@gmail.com> |
1 month ago |
|
|
c86a048d9c |
Implement MCP multi-endpoint architecture with dedicated tool handlers
This commit implements Option 1 (Multiple Tool Handlers) for the MCP module, where each of the 5 endpoints has its own dedicated tool handler with specific tools. ## Architecture Changes - Created MCP_Tool_Handler base class interface for all tool handlers - Each endpoint now has its own dedicated tool handler: - /mcp/config → Config_Tool_Handler (configuration management) - /mcp/query → Query_Tool_Handler (database exploration) - /mcp/admin → Admin_Tool_Handler (administrative operations) - /mcp/cache → Cache_Tool_Handler (cache management) - /mcp/observe → Observe_Tool_Handler (monitoring & metrics) ## New Files Base Interface: - include/MCP_Tool_Handler.h - Base class for all tool handlers Tool Handlers: - include/Config_Tool_Handler.h, lib/Config_Tool_Handler.cpp - include/Query_Tool_Handler.h, lib/Query_Tool_Handler.cpp - include/Admin_Tool_Handler.h, lib/Admin_Tool_Handler.cpp - include/Cache_Tool_Handler.h, lib/Cache_Tool_Handler.cpp - include/Observe_Tool_Handler.h, lib/Observe_Tool_Handler.cpp Documentation: - doc/MCP/Architecture.md - Comprehensive architecture documentation ## Modified Files - include/MCP_Thread.h, lib/MCP_Thread.cpp - Added 5 tool handler pointers - include/MCP_Endpoint.h, lib/MCP_Endpoint.cpp - Use tool_handler base class - lib/ProxySQL_MCP_Server.cpp - Create and pass handlers to endpoints - lib/Makefile - Added new source files ## Implementation Status - Config_Tool_Handler: Functional (get_config, set_config, list_variables, get_status) - Query_Tool_Handler: Functional (wraps MySQL_Tool_Handler, all 18 tools) - Admin_Tool_Handler: Stub implementations (TODO: implement) - Cache_Tool_Handler: Stub implementations (TODO: implement) - Observe_Tool_Handler: Stub implementations (TODO: implement) See GitHub Issue #8 for detailed TODO list. Co-authored-by: Claude <claude@anthropic.com> |
1 month ago |
|
|
2e7109d894 |
Fix lock ordering in flush_mcp_variables___database_to_runtime
The crash was caused by incorrect lock ordering. The admin version has: 1. wrlock() (acquire admin lock) 2. Process variables 3. checksum_mutex lock() (acquire checksum lock) 4. flush to runtime + generate checksum 5. checksum_mutex unlock() (release checksum lock) 6. wrunlock() (release admin lock) The MCP version had the wrong order with the checksum_mutex lock outside the wrlock/wrunlock region. This also added the missing 'lock' parameter that exists in the admin version but was missing in MCP. Changes: - Added 'lock' parameter to flush_mcp_variables___database_to_runtime() - Added conditional wrlock()/wrunlock() calls (if lock=true) - Moved checksum generation inside the wrlock/wrunlock region - Updated function signature in header file |
1 month ago |
|
|
06aa6d6ef7 |
Add comprehensive Doxygen documentation for connection pool
Added missing documentation for MySQL connection pool implementation: Header (MySQL_Tool_Handler.h): - Added MySQLConnection struct documentation with member descriptions - Added member variable documentation using ///< Doxygen style Implementation (MySQL_Tool_Handler.cpp): - Added Doxygen blocks for close() method - Added Doxygen blocks for init_connection_pool() with detailed behavior - Added Doxygen blocks for get_connection() with thread-safety notes - Added Doxygen blocks for return_connection() with reuse behavior - Added Doxygen blocks for execute_query() with JSON format documentation All new connection pool methods now have complete @brief, @param, and @return documentation following Doxygen conventions. |
1 month ago |
|
|
4eab519848 |
Implement MySQL connection pool for MySQL_Tool_Handler
Added built-in connection pool to MySQL_Tool_Handler for direct MySQL connections to backend servers. Changes: - Added MySQLConnection struct with MYSQL* pointer, host, port, in_use flag - Added connection_pool vector, pool_lock mutex, pool_size counter - Implemented init_connection_pool() to create MYSQL connections using mysql_init/mysql_real_connect - Implemented get_connection() and return_connection() with thread-safe locking - Implemented execute_query() helper method for executing SQL and returning JSON results - Updated tool methods to use actual MySQL connections: - list_schemas: Query information_schema.schemata - list_tables: Query information_schema.tables with metadata - describe_table: Query columns, primary keys, indexes - sample_rows: Execute SELECT with LIMIT - sample_distinct: Execute SELECT DISTINCT with GROUP BY - run_sql_readonly: Execute validated SELECT queries - explain_sql: Execute EXPLAIN queries - Fixed MYSQL forward declaration (use typedef struct st_mysql MYSQL) The connection pool creates one connection per configured host:port pair with 5-second timeouts for connect/read/write operations. |
1 month ago |
|
|
221ff23991 |
Add MySQL exploration MCP tools with SQLite catalog
Implemented MCP (Model Context Protocol) server providing tools for
LLM-based MySQL database exploration:
- MySQL_Catalog: SQLite-based catalog for LLM external memory with
upsert, get, search, list, merge, delete operations and FTS support
- MySQL_Tool_Handler: 17+ database exploration tools with guardrails:
* Inventory: list_schemas, list_tables
* Structure: describe_table, get_constraints, describe_view
* Profiling: table_profile, column_profile
* Sampling: sample_rows (max 20), sample_distinct (max 50)
* Query: run_sql_readonly (max 200 rows, 2s timeout, SELECT-only)
* Relationship: suggest_joins, find_reference_candidates
* Catalog: catalog_upsert, catalog_get, catalog_search,
catalog_list, catalog_merge, catalog_delete
- MCP Module Integration:
* Added 6 new configuration variables for MySQL tool handler
(mysql_hosts, mysql_ports, mysql_user, mysql_password,
mysql_schema, catalog_path)
* Added MySQL_Tool_Handler pointer to MCP_Threads_Handler
* Implemented tool routing in MCP endpoint for tools/list,
tools/describe, and tools/call methods
- TAP Tests: Updated to expect 14 MCP variables (was 8)
Files:
- include/MySQL_Catalog.h, lib/MySQL_Catalog.cpp
- include/MySQL_Tool_Handler.h, lib/MySQL_Tool_Handler.cpp
- include/MCP_Thread.h, lib/MCP_Thread.cpp
- include/MCP_Endpoint.h, lib/MCP_Endpoint.cpp
- lib/Makefile, test/tap/tests/mcp_module-t.cpp
|
1 month ago |
|
|
81c53896bc |
Fix MCP module TAP test failures
- Add MCP variables to load_save_disk_commands map for LOAD/SAVE commands - Add MCP variable validation in is_valid_global_variable() for SET commands - Implement has_variable() method in MCP_Threads_Handler - Add CHECKSUM command handlers for MCP VARIABLES (DISK/MEMORY/MEM) Test results improved from 28 passed / 16 failed to 49 passed / 3 failed. Remaining 3 failures are test expectation issues (boolean representation). |
1 month ago |
|
|
245e61ee86 |
Make MCP_Threads_Handler a standalone independent class
Remove unnecessary inheritance from MySQL_Threads_Handler. The MCP module should be independent and not depend on MySQL/PostgreSQL thread handlers. Changes: - MCP_Threads_Handler now manages its own pthread_rwlock_t for synchronization - Simplified init() signature (removed unused num/stack parameters) - Added ProxySQL_Main_init_MCP_module() call in main initialization phase - Include only standard C++ headers (pthread.h, cstring, cstdlib) |
1 month ago |
|
|
87fff9e046 |
Add MCP (Model Context Protocol) module skeleton
Add new MCP module supporting multiple MCP server endpoints over HTTPS with JSON-RPC 2.0 protocol skeleton. Each endpoint (/mcp/config, /mcp/observe, /mcp/query, /mcp/admin, /mcp/cache) is a distinct MCP server with its own authentication configuration. Features: - HTTPS server using existing ProxySQL TLS certificates - JSON-RPC 2.0 skeleton implementation (actual protocol TBD) - 5 MCP endpoints with per-endpoint auth configuration - LOAD/SAVE MCP VARIABLES admin commands - Configuration file support (mcp_variables section) Implementation follows GenAI module pattern: - MCP_Threads_Handler: Main module handler with variable management - ProxySQL_MCP_Server: HTTPS server wrapper using libhttpserver - MCP_JSONRPC_Resource: Base endpoint class with JSON-RPC skeleton |
1 month ago |
|
|
db2485be37 |
Add comprehensive doxygen documentation to GenAI async module
This commit adds extensive doxygen-format documentation to all key functions in the GenAI async module to improve code maintainability and API clarity. Documented functions: - lib/GenAI_Thread.cpp: - unregister_client() - cleanup flow and usage - call_llama_batch_embedding() - HTTP client with JSON format - call_llama_rerank() - HTTP client with JSON format - execute_sql_for_documents() - stub for document_from_sql - process_json_query() - autonomous JSON query processing - lib/MySQL_Session.cpp: - genai_send_async() - async flow and error handling - handle_genai_response() - response handling flow - genai_cleanup_request() - resource cleanup details - check_genai_events() - main loop integration Enhanced header documentation: - GenAI_RequestHeader - communication flow details - GenAI_ResponseHeader - response format details - register_client() - registration flow - unregister_client() - cleanup flow - embed_documents() - BLOCKING warning - rerank_documents() - BLOCKING warning - process_json_query() - supported formats All documentation includes: - @brief descriptions - @param parameter details - @return return value explanations - @note important warnings and usage notes - @see cross-references to related functions - Detailed workflow descriptions - Error handling details - Memory management notes |
1 month ago |
|
|
8405027124 |
Integrate GenAI async event handling into main MySQL session loop
- Add check_genai_events() function for non-blocking epoll_wait on GenAI response fds - Integrate GenAI event checking into main handler() WAITING_CLIENT_DATA case - Add goto handler_again to process multiple GenAI responses in one iteration The async GenAI architecture is now fully integrated. MySQL threads no longer block when processing GENAI: queries - they send requests asynchronously via socketpair and continue processing other queries while GenAI workers handle the embedding/reranking operations. |
1 month ago |
|
|
0ff2e38e22 |
Implement async GenAI module with socketpair-based non-blocking architecture
- Add GenAI_RequestHeader and GenAI_ResponseHeader protocol structures for socketpair communication - Implement GenAI listener_loop to read requests from epoll and queue to workers - Implement GenAI worker_loop to process requests and send responses via socketpair - Add GenAI_PendingRequest state management to MySQL_Session/Base_Session - Implement MySQL_Session async handlers: genai_send_async(), handle_genai_response(), genai_cleanup_request() - Modify MySQL_Session genai handler to use async path when epoll is available - Initialize GenAI epoll fd in Base_Session::init() This completes the async architecture that was planned but never fully implemented (previously had only placeholder comments). The GenAI module now processes requests asynchronously without blocking MySQL threads. |
1 month ago |
|
|
a82f58e22b |
Refactor GenAI module for autonomous JSON query processing
Move all JSON parsing and operation routing logic from MySQL_Session to GenAI module. MySQL_Session now simply passes GENAI: queries to the GenAI module via process_json_query(), which handles everything autonomously. This simplifies the architecture and achieves better separation of concerns: - MySQL_Session: Detects GENAI: prefix and forwards to GenAI module - GenAI module: Handles JSON parsing, operation routing, and result formatting Changes: - GenAI_Thread.h: Add GENAI_OP_JSON operation type, json_query field, and process_json_query() method declaration - GenAI_Thread.cpp: Implement process_json_query() with embed/rerank support and document_from_sql framework (stubbed for future MySQL connection handling) - MySQL_Session.cpp: Simplify genai handler to just call process_json_query() and parse JSON result (reduces net code by ~215 lines) |
1 month ago |
|
|
cc3e97b7b8 |
Merge EMBED and RERANK into unified GENAI: query syntax
This commit refactors the experimental GenAI query syntax to use a single
GENAI: keyword with type-based operations instead of separate EMBED: and RERANK: keywords.
Changes:
- Replace EMBED: and RERANK: detection with unified GENAI: detection
- Merge genai_embedding and genai_rerank handlers into single genai handler
- Add 'type' field to operation JSON ("embed" or "rerank")
- Add 'columns' field for rerank operation (2 or 3, default 3)
- columns=2: Returns only index and score
- columns=3: Returns index, score, and document (default)
Old syntax:
EMBED: ["doc1", "doc2"]
RERANK: {"query": "...", "documents": [...], "top_n": 5}
New syntax:
GENAI: {"type": "embed", "documents": ["doc1", "doc2"]}
GENAI: {"type": "rerank", "query": "...", "documents": [...], "top_n": 5, "columns": 2}
This provides a cleaner, more extensible API for future GenAI operations.
|
1 month ago |
|
|
39939f598b |
Add experimental GenAI RERANK: query support for MySQL
This commit adds experimental support for reranking documents directly
from MySQL queries using a special RERANK: syntax.
Changes:
- Add handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_COM_QUERY___genai_rerank()
- Add RERANK: query detection alongside EMBED: detection
- Implement JSON parsing for query, documents array, and optional top_n
- Build resultset with index, score, and document columns
- Use MySQL ERR_Packet for error handling
Query format: RERANK: {"query": "search query", "documents": ["doc1", "doc2", ...], "top_n": 5}
Result format: 1 row per result, 3 columns (index, score, document)
|
1 month ago |
|
|
253591d262 |
Add experimental GenAI EMBED: query support for MySQL
This commit adds experimental support for generating embeddings directly from MySQL queries using a special EMBED: syntax. Changes: - Add MYDS_INTERNAL_GENAI to MySQL_DS_type enum for GenAI connections - Add handler___status_WAITING_CLIENT_DATA___STATE_SLEEP___MYSQL_COM_QUERY___genai_embedding() - Implement EMBED: query detection and JSON parsing for document arrays - Build CSV resultset with embeddings (1 row per document, 1 column) - Add myconn NULL check in MySQL_Thread for INTERNAL_GENAI type - Add "debug_genai" name to debug module array - Remove HAVE_LIBCURL checks (libcurl is always statically linked) - Use static curl header: "curl/curl.h" instead of <curl/curl.h> - Remove curl_global_cleanup() from GenAI module (should only be in main()) Query format: EMBED: ["doc1", "doc2", ...] Result format: 1 row per document, 1 column with CSV embeddings Error handling uses MySQL ERR_Packet instead of resultsets. |
1 month ago |
|
|
1da9e384d2 |
Add poll() fallback for GenAI module when epoll is not available
This change adds compile-time detection and fallback to poll() on systems that don't support epoll(), improving portability across different platforms. Header changes (include/GenAI_Thread.h): - Make sys/epoll.h include conditional on #ifdef epoll_create1 Implementation changes (lib/GenAI_Thread.cpp): - Add poll.h include for poll() support - Add EPOLL_CREATE compatibility macro (epoll_create1 or epoll_create) - Add #include <poll.h> for poll() support - Update init() to use pipe() for wakeup when epoll is not available - Update register_client() to skip epoll_ctl when epoll is not available - Update unregister_client() to skip epoll_ctl when epoll is not available - Update listener_loop() to use poll() when epoll is not available The compile-time detection works by checking if epoll_create1 is defined (Linux-specific glibc function since 2.9). On systems without epoll, the code falls back to using poll() with a pipe for wakeup signaling. |
1 month ago |
|
|
960704066d |
Implement real GenAI module with embedding and rerank support
Header changes (include/GenAI_Thread.h): - Add GenAI_EmbeddingResult, GenAI_RerankResult, GenAI_RerankResultArray structs - Add GenAI_Document, GenAI_Request structures for internal queue - Add 5 configuration variables: genai_threads, genai_embedding_uri, genai_rerank_uri, genai_embedding_timeout_ms, genai_rerank_timeout_ms - Add status variables: threads_initialized, active_requests, completed_requests, failed_requests - Add public API methods: embed_documents(), rerank_documents() - Add client management: register_client(), unregister_client() - Add threading components: worker threads, listener thread, epoll Implementation changes (lib/GenAI_Thread.cpp): - Implement move constructors/destructors for result structures - Initialize default values for variables (threads=4, embedding port 8013, rerank port 8012, timeout 30s) - Implement get_variable/set_variable with validation for all 5 variables - Implement call_llama_batch_embedding() using libcurl - Implement call_llama_rerank() using libcurl - Implement embed_documents() public API (single or batch) - Implement rerank_documents() public API with top_n parameter - Implement register_client() for socket pair integration - Implement listener_loop() and worker_loop() for async processing - Add proper error handling and status tracking Debug integration (include/proxysql_structs.h): - Add PROXY_DEBUG_GENAI to debug_module enum |
1 month ago |
|
|
c476f56f97 |
Add initial GenAI module placeholder
Implement a new GenAI module for ProxySQL with basic infrastructure: - GenAI_Threads_Handler class for managing GenAI module configuration - Support for genai- prefixed variables in global_variables table - Dummy variables: genai-var1 (string) and genai-var2 (integer) - Config file support via genai_variables section - Flush functions for runtime_to_database and database_to_runtime - Module lifecycle: initialization at startup, graceful shutdown - LOAD/SAVE GENAI VARIABLES admin command infrastructure Core functionality verified: - Config file loading works - Variables persist in global_variables table - Disk save/load via SQL works - Module initializes and shuts down properly Related files: - include/GenAI_Thread.h: New GenAI thread handler class - lib/GenAI_Thread.cpp: Implementation with dummy variables - lib/Admin_Handler.cpp: Added GENAI command vectors and handlers - lib/Admin_FlushVariables.cpp: Added genai flush functions - lib/ProxySQL_Admin.cpp: Added init_genai_variables() and load_save_disk_commands entry - include/proxysql_admin.h: Added function declarations - lib/Makefile: Added GenAI_Thread.oo to build - src/main.cpp: Added module initialization and cleanup - src/proxysql.cfg: Added genai_variables configuration section |
2 months ago |
|
|
5c8a32a0b0 |
Merge branch 'v3.0' of github.com:sysown/proxysql into v3.0-handle_unexp_ping
|
2 months ago |
|
|
6fea828e86 |
Improve logging in unexpected COM_PING packet handling
Logging messages now include 'client address', 'session status' and 'data stream status'. Client address is also logged when OK packets are dispatched, this should help tracking if a client has received the expected packets or not. |
2 months ago |
|
|
88edaac61b
|
Merge pull request #5258 from sysown/misc251219
Documentation additions and bug fix for vacuum_stats() |
2 months ago |
|
|
0f7ff1f374
|
Merge branch 'v3.0' into v3.0_pgsql-query-digest-gen-5253
Signed-off-by: René Cannaò <rene@proxysql.com> |
2 months ago |
|
|
2667540fcc
|
Merge pull request #5237 from sysown/v3.0_pgsql-monitor-sslsupport-5205
Add SSL support for backend connections in PGSQL monitor |
2 months ago |
|
|
d0e88599ee |
Add special handling for unexpected COM_PING packets
Implements a workaround for the handling of unexpected 'COM_PING' packets received during query processing, while a resultset is yet being streamed to the client. Received 'COM_PING' packets are queued in the form of a counter. This counter is later used to sent the corresponding number of 'OK' packets to the client after 'MySQL_Session' has finished processing the current query. |
2 months ago |
|
|
efe0d4fe61 |
Add extensive doxygen documentation for vacuum_stats and stats_pgsql_stat_activity
This commit documents: 1. The vacuum_stats() function's purpose, behavior, and the reason why stats_pgsql_stat_activity is excluded from bulk deletion operations 2. The fact that stats_pgsql_stat_activity is a SQL VIEW (not a table) and attempting DELETE on it would cause SQLite error: "cannot modify stats_pgsql_stat_activity because it is a view" The documentation explains: - Why TRUNCATE stats_mysql_query_digest triggers vacuum_stats(true) - Why both MySQL and PostgreSQL tables are cleared regardless of protocol - How the view is automatically cleared via its underlying table stats_pgsql_processlist - The importance of keeping the view excluded from deletion lists |
2 months ago |
|
|
42864e8867 |
Improved Tokenizer for PostgreSQL
- Added `process_pg_typecast()` to handle PostgreSQL type cast syntax (::)
- Recognizes type casts in various contexts: 'value'::type, column::type, etc.
- Added `process_array_literal()` for PostgreSQL array processing
- Handles both ARRAY[] constructor and {} literal syntax
- Processes multi-dimensional arrays and nested array structures
- Added `process_literal_prefix_type()` for PostgreSQL prefixed literals
- Processes E'' escape string constants with backslash escapes
- Handles U&'' Unicode string literals with optional UESCAPE clauses
- Supports x'' hex string literals and b'' bit string literals
- Manages B'' bit strings and bytea literals (\\xDEADBEEF format)
- Added `process_replace_boolean()` for boolean literal replacement
- Replaces TRUE and FALSE literals with parameter placeholders
- Maintains case-insensitive matching (true, True, TRUE, etc.)
- Preserves boolean context in expressions and WHERE clauses
|
2 months ago |
|
|
2987242d4f |
Fix cache_empty_result=0 not caching non-empty resultsets (issue #5248)
The `cache_empty_result` field in query rules has three possible values: • -1: Use global setting (`query_cache_stores_empty_result`) • 0: Do NOT cache empty resultsets, but cache non-empty resultsets • 1: Always cache resultsets (both empty and non-empty) Previously, when `cache_empty_result` was set to 0, nothing was cached at all, even for non-empty resultsets. This prevented users from disabling caching for empty resultsets while still allowing caching of non-empty resultsets on a per-rule basis. Changes: 1. Modified caching logic in MySQL_Session.cpp and PgSQL_Session.cpp to add the condition `(qpo->cache_empty_result == 0 && MyRS->num_rows)` (MySQL) and `(qpo->cache_empty_result == 0 && num_rows)` (PgSQL) to allow caching when cache_empty_result=0 AND result has rows. 2. Added comprehensive Doxygen documentation in query_processor.h explaining the semantics of cache_empty_result values. 3. Updated Query_Processor.cpp with inline comments explaining the three possible values. Now when cache_empty_result is set to 0: - Empty resultsets (0 rows) are NOT cached - Non-empty resultsets (>0 rows) ARE cached - This matches the intended per-rule behavior described in issue #5248. Fixes: https://github.com/sysown/proxysql/issues/5248 |
2 months ago |
|
|
fae283cf7e |
Add SSL and non-SSL connection OK metrics for PostgreSQL monitor connections
Adds two new metrics, ssl_connections_OK and non_ssl_connections_OK, to improve visibility into PostgreSQL monitor connection status. |
2 months ago |
|
|
6c97d3d244 |
Add extensive Doxygen documentation for ProxySQL_Config and Read_Global_Variables_from_configfile
This commit adds detailed Doxygen documentation for: 1. The ProxySQL_Config class - describes its role in configuration management 2. The Read_Global_Variables_from_configfile() method - documents its behavior, parameters, return value, and the automatic prefix stripping feature The documentation explains the automatic prefix stripping behavior that handles cases where users mistakenly include module prefix (e.g., "mysql-") in variable names within configuration files. |
2 months ago |
|
|
895c814c77 |
Added utility functions to support pgsql query digest testing
|
3 months ago |
|
|
285fb1b4e1 |
Add PostgreSQL dialect support: dollar-quoted strings, identifier quoting, and dialect-specific comment rules
This change introduces PostgreSQL-aware tokenization by adding support for dollar-quoted strings, PostgreSQL’s double-quoted identifiers, and its comment rules. The tokenizer now correctly parses $$…$$ and $tag$…$tag$, treats " as an identifier delimiter in PostgreSQL, disables MySQL-only # comments, and accepts -- as a comment starter without requiring a trailing space. All new behavior is fully isolated behind the dialect flag to avoid impacting MySQL parsing. Add PostgreSQL dollar-quoted strings * New parser state: st_dollar_quote_string. * Recognizes $$ … $$ and $tag$ … $tag$ sequences. * Tracks opening tag and searches for matching terminator. * Normalizes entire literal to ?. * Integrated into get_next_st() and stage_1_parsing(). |
3 months ago |
|
|
b73160ef5f
|
Merge pull request #4901 from sysown/v3.0_wait_timeout
[WIP] Setting client side wait_timeout |
3 months ago |
|
|
5a7b22181f |
Fix metrics collection for wait_timeout counters
The get_status_variable() function was only scanning worker threads but ignoring auxiliary threads (idle threads) where timeout terminations are detected. This caused the timeout termination counter to show incorrect/zero values. - Added idle thread scanning to both overloaded versions of get_status_variable() function - Now properly collects metrics from both worker and idle threads - Fixes the issue where proxysql_mysql_timeout_terminated_connections_total showed zero despite actual timeout terminations Resolves the metrics reading issue identified in the previous commits. |
3 months ago |