From 83a0d72d71706d3ce8dc7f71ef7746159415a040 Mon Sep 17 00:00:00 2001 From: Eden Kirin Date: Thu, 19 Oct 2023 08:43:49 +0200 Subject: [PATCH] Initial --- go.mod | 15 +++++++++++++++ go.sum | 27 +++++++++++++++++++++++++++ main.go | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 92 insertions(+) create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..98a0b96 --- /dev/null +++ b/go.mod @@ -0,0 +1,15 @@ +module db-bench + +go 1.21.2 + +require ( + github.com/jackc/pgpassfile v1.0.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect + github.com/jackc/pgx/v5 v5.4.3 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect + golang.org/x/crypto v0.9.0 // indirect + golang.org/x/text v0.9.0 // indirect + gorm.io/driver/postgres v1.5.3 // indirect + gorm.io/gorm v1.25.5 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..a71c8ec --- /dev/null +++ b/go.sum @@ -0,0 +1,27 @@ +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= +github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= +github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.4.3 h1:cxFyXhxlvAifxnkKKdlxv8XqUf59tDlYjnV5YYfsJJY= +github.com/jackc/pgx/v5 v5.4.3/go.mod h1:Ig06C2Vu0t5qXC60W8sqIthScaEnFvojjj9dSljmHRA= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= +golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= +golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gorm.io/driver/postgres v1.5.3 h1:qKGY5CPHOuj47K/VxbCXJfFvIUeqMSXXadqdCY+MbBU= +gorm.io/driver/postgres v1.5.3/go.mod h1:F+LtvlFhZT7UBiA81mC9W6Su3D4WUhSboc/36QZU0gk= +gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55 h1:sC1Xj4TYrLqg1n3AN10w871An7wJM0gzgcm8jkIkECQ= +gorm.io/gorm v1.25.2-0.20230530020048-26663ab9bf55/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k= +gorm.io/gorm v1.25.5 h1:zR9lOiiYf09VNh5Q1gphfyia1JpiClIWG9hQaxB/mls= +gorm.io/gorm v1.25.5/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8= diff --git a/main.go b/main.go new file mode 100644 index 0000000..595ff6e --- /dev/null +++ b/main.go @@ -0,0 +1,50 @@ +package main + +import ( + "fmt" + "strconv" + "strings" + "time" + + "gorm.io/driver/postgres" + "gorm.io/gorm" + gormLogger "gorm.io/gorm/logger" +) + +const DB_HOST = "localhost" +const DB_PORT = 5433 +const DB_NAME = "televend" +const DB_USER = "televend" +const DB_PASSWORD = "televend" + +const SAMPLE_QUERY = `SELECT custom_users.user_ptr_id, custom_users.alive, custom_users.external_id, custom_users.role, custom_users.event_types, custom_users.notify_email, custom_users.notify_sms, custom_users.tel, custom_users.weekday_mask, custom_users.timezone, custom_users.errors_subscription, custom_users.product_subscription, custom_users.info_subscription, custom_users.preferred_language, custom_users.api_service, custom_users.uses_boxes, custom_users.mobile_notes, custom_users.assignment_type, custom_users.import_subscription, custom_users.starting_point, custom_users.end_point, custom_users.access_all_company, custom_users.device_info, custom_users.device_notification, custom_users.technician_view, custom_users.pick_and_pack_status, custom_users.call_center_tickets, custom_users.technical_mobile_app, custom_users.cash_collector, custom_users._assigned_clients, custom_users.avatar, custom_users.avatar_thumb, custom_users.starting_point_latitude, custom_users.starting_point_longitude, custom_users.end_point_latitude, custom_users.end_point_longitude, custom_users.visit_plan_id, custom_users.warehouse_id, custom_users.location_warehouse_id, custom_users.company_id, custom_users.user_role_id, custom_users.dashboard_config_id, custom_users.changed_by_id, custom_users.creator_id, custom_users.vehicle_id, custom_users.evoca_horeca_role_id, auth_user_1.first_name || ' ' || auth_user_1.last_name AS anon_1, auth_user_1.id, auth_user_1.first_name, auth_user_1.last_name, auth_user_1.email, auth_user_1.username, auth_user_1.password, auth_user_1.is_active, auth_user_1.is_staff, auth_user_1.is_superuser, auth_user_1.last_login, auth_user_1.date_joined, vending_companies_1.id AS id_1, vending_companies_1.alive AS alive_1, vending_companies_1.logo, vending_companies_1.caption, vending_companies_1.address, vending_companies_1.city, vending_companies_1.phone, vending_companies_1.email AS email_1, vending_companies_1.external_id AS external_id_1, vending_companies_1.enabled, vending_companies_1.note, vending_companies_1.aes_key, vending_companies_1.truck_stock, vending_companies_1.type, vending_companies_1.country_code, vending_companies_1.currency, vending_companies_1.timezone AS timezone_1, vending_companies_1.wallet_creation, vending_companies_1.urgency_limit_3, vending_companies_1.urgency_limit_4, vending_companies_1.expiry_affects_urgency, vending_companies_1.day_urg_3, vending_companies_1.day_urg_4, vending_companies_1.facing_affects_urgency, vending_companies_1.facing_urgency_3, vending_companies_1.facing_urgency_4, vending_companies_1.working_days, vending_companies_1.cashreport_time, vending_companies_1.urgency_calculation_time, vending_companies_1.urgency_calculation_times, vending_companies_1.decimal_places, vending_companies_1.default_max_credit, vending_companies_1.televend_keep_alive_addresses, vending_companies_1.undefined_column_forced_warning, vending_companies_1.status, vending_companies_1.route_microservice, vending_companies_1.light_speed_integration, vending_companies_1.amiclo, vending_companies_1.is_eva_dts_readout_enabled, vending_companies_1.eva_dts_readout_time_array, vending_companies_1.extra_pricelists_setting, vending_companies_1.column_mapping_setting, vending_companies_1.days_between_cc, vending_companies_1.integration_newis, vending_companies_1.integration_wallet, vending_companies_1.horeca, vending_companies_1.warehouse_management_enabled, vending_companies_1.coffee_company, vending_companies_1.vat_number, vending_companies_1.access_id, user_role_template_1.id AS id_2, user_role_template_1.name, user_role_template_1.alive AS alive_2, user_role_template_1.machine_view, user_role_template_1.machine_edit, user_role_template_1.machine_device_view, user_role_template_1.machine_device_edit, user_role_template_1.machine_stock_view, user_role_template_1.machine_stock_edit, user_role_template_1.machine_planogram_view, user_role_template_1.machine_planogram_edit, user_role_template_1.product_view, user_role_template_1.product_edit, user_role_template_1.report_refill_log_view, user_role_template_1.report_vend_revenue_view, user_role_template_1.report_overview_view, user_role_template_1.report_vend_list_view, user_role_template_1.cash_details_view, user_role_template_1.event_view, user_role_template_1.event_edit, user_role_template_1.route_view, user_role_template_1.route_view_assigned, user_role_template_1.route_edit, user_role_template_1.user_view, user_role_template_1.user_edit, user_role_template_1.machine_assign_view, user_role_template_1.machine_assign_edit, user_role_template_1.cash_flow_view, user_role_template_1.cash_flow_induce, user_role_template_1.cash_conformity_view, user_role_template_1.erp_integration_view, user_role_template_1.erp_integration_edit, user_role_template_1.filling_route_assign_view, user_role_template_1.event_assign_view, user_role_template_1.report_builder_view, user_role_template_1.administration_view, user_role_template_1.importer, user_role_template_1.importer_edit, user_role_template_1.importer_view, user_role_template_1.task_manager_edit, user_role_template_1.task_manager_view, user_role_template_1.warehouse_edit, user_role_template_1.warehouse_view, user_role_template_1.meter_readings_edit, user_role_template_1.meter_readings_view, user_role_template_1.planogram_analysis_view, user_role_template_1.report_routing_reports_view, user_role_template_1.product_view_assigned, user_role_template_1.routing_configuration_view, user_role_template_1.routing_configuration_edit, user_role_template_1.report_transaction_list_view, user_role_template_1.tax_report_generator_view, user_role_template_1.global_manage_brand_model_view, user_role_template_1.global_manage_brand_model_edit, user_role_template_1.televend_cloud_application, user_role_template_1.evoca_horeca_application, user_role_template_1.call_centre_configuration_edit, user_role_template_1.call_centre_configuration_view, user_role_template_1.contract_list_edit, user_role_template_1.contract_list_view, user_role_template_1.credit_refund_view, user_role_template_1.fiscal_setup_edit, user_role_template_1.fiscal_setup_view, user_role_template_1.event_configuration_edit, user_role_template_1.event_configuration_view, user_role_template_1.custom_forms_edit, user_role_template_1.custom_forms_view, user_role_template_1.planer_edit, user_role_template_1.planer_view, user_role_template_1.spare_parts_edit, user_role_template_1.spare_parts_view, user_role_template_1.stream_edit, user_role_template_1.stream_view, user_role_template_1.moneybag_tracking_view, user_role_template_1.reports_generator_view, user_role_template_1.technical_center_reports_view, user_role_template_1.asset_management_edit, user_role_template_1.asset_management_view, user_role_template_1.horeca_general_dashboard_view, user_role_template_1.horeca_machine_dashboard_view, user_role_template_1.horeca_machine_list_view, user_role_template_1.horeca_events_view, user_role_template_1.horeca_beverages_view, user_role_template_1.horeca_machine_setup_view, user_role_template_1.horeca_machine_setup_edit, user_role_template_1.horeca_administration_view, user_role_template_1.horeca_administration_edit, user_role_template_1.horeca_reports_view, user_role_template_1.horeca_users_view, user_role_template_1.horeca_users_edit, user_role_template_1.fiscal_data_collection_edit, user_role_template_1.fiscal_data_collection_view, user_role_template_1.fiscal_devices_edit, user_role_template_1.fiscal_devices_view, user_role_template_1.product_warehouse_edit, user_role_template_1.product_warehouse_view +FROM custom_users JOIN auth_user ON custom_users.user_ptr_id = auth_user.id LEFT OUTER JOIN auth_user AS auth_user_1 ON auth_user_1.id = custom_users.user_ptr_id LEFT OUTER JOIN vending_companies AS vending_companies_1 ON vending_companies_1.id = custom_users.company_id LEFT OUTER JOIN user_role_template AS user_role_template_1 ON user_role_template_1.id = custom_users.user_role_id +WHERE auth_user.email = lower('superdeveloper1@intis.hr') AND custom_users.alive = true` + +func main() { + var connectionString = strings.Join([]string{ + "postgres://", + DB_USER, ":", + DB_PASSWORD, "@", + DB_HOST, ":", + strconv.Itoa(DB_PORT), "/", + DB_NAME, + "?sslmode=disable", + "&TimeZone=UTC", + }, "") + + DBConn, err := gorm.Open(postgres.Open(connectionString), &gorm.Config{ + Logger: gormLogger.Default.LogMode(gormLogger.Info), + }) + if err != nil { + panic(fmt.Sprintf("Error connecting to database: %s. Terminating!", err)) + } + + db, _ := DBConn.DB() + + start := time.Now() + db.Exec(SAMPLE_QUERY) + elapsed := time.Since(start) + + fmt.Printf("Execution time: %s\n", elapsed) +}