I wonder if the issue is in catch. One thing that did chance, based on your description, is you no longer getting unhandled exception.
It can be useful to standup another attempt to login, in case "hanging" behavior was due to some kind of seldom/one off condition.
Changing focus a bit, here is similar question in Stack Overflow
See if it provides any help.
Also, rather than going for a stack trace, I'd use println (t.getMessage());
and put another println("past catch") right after the catch.
Running these few lines in debugger is even better. Usually in debugger there is command window or some other way to find how to explore elements in the driver, though you did say it's not producing anything in initial description, you still have browser's development tools ( F12 ) to inspect the page and find how to identify elements.
Sometimes elements are obstructed due to SSL ( https ) protocol, in which case it can be useful to ask developer or ops team to open access on port 80 ( http ) to train testing scripts, once scripts works, even if elements obscured by means of https connection, the script will still be working.
Drno,
все мы со своими предпочтениями
у всех моих сотрудников золотые айфоны с золотыми ай часами
а у меня до последнего момента была старенькая моторола за 50 уе или ниже, и я был счастлив
Akina,
why? there is field quantity...
the data model allows to reduce this inefficiency, since distinct is always spool ( can't remember eager or lasy ) to perform sorting and following selection :)
Follow the money, in sql currency is machine resource.
distinct isn't needed anymore
can be removed
except table J / field номер_изделия
should be used in the join with equality sign, and the pairs of details should be distributed within изделие.
не упоминайте всуе, простота си обманчива.
Типичный случай применения "template" тривиален, все множества с сочленениями через указатель имеют выбор между си - свободный указатель и указатель с жестким определением типа данных.
Каждый из этих частных случаев на си (без ухищрений с struct) требует полного описания, но со struct не дает транслятору полного доступа к инструкциям, что ведет к не запланированным прерываниям во время выполнения.
Template освобождает конструктора от повторения линий инструкций, а транслятор получает доступ ко всем деталям инструкций по, проверяя их на возможные ошибки во время сборки.
Армянское Радио,
you didn't read right
if( left.size() != right.size() )
{
throw std::range_error("sizes mismatch!");
}
will remain, but its intent, really, is to be performed before "call", not after.
These checks should be part of a contract, not execution steps inside function body.
Point is, innovations running ahead of "standards" are needed. Whoever gets those right drives standard forward.
нет, precompiled headers, не ускоряют build.
Если Вы ещё раз прочитаете пост о
а. создании промежуточного буфера трансляции ( в быстрой памяти )
б. процессе построения древа формальных инструкций выполнимого
в. собственно трансляции этого древа на ранних этапах в двоичный код, а со временем в инструкции языка ассемблера
Вы увидите, что создание слоя предварительного анализа заголовков никак не может помочь ускорению трансляции в стадии в, поскольку она полностью сменяет все, что построено в секциях а и б.
И поскольку в финальной стадии все надо строить заново, то длительность выполнения всей операции только растет, при чем весьма серьёзно.
Единственный случай, когда это помогает со скоростью, это когда в коде ничего не изменилось. Тогда компилятор может действительно быстро удостовериться, что все осталось как было и ничего не делать намного быстрее.
Единственный надежный способ ускорять стадию в это минимизировать количество операций связанных с этим шагом.
Именно для этого используется режим компиляции только нового / обновленного кода, совмещенный с созданием буфера предварительного анализа формальных операций ( так называемый "объектный код" ).
В этом случае компилятор оценивает в первую очередь, что именно изменилось, и изменяет или добавляет только эти инструкции в конечный выполнимый.
У этого подхода есть проблема.
В случае, если Вы требуете включить опции оптимизирующие код ( их ведь включают отдельно ) транслятору придется отказаться от быстрого выполнения стадии в и вернуться к полному выполнению всех стадий трансляции кода. Но это ведь можно делать отдельно. Поскольку доверие к сегодняшним трансляторам очень высокое. И если первый, пусть не самый оптимальный вариант выполнимого, может использоваться для поиска дефектов и добавления различных фишек, то высоко оптимизированный вариант продукта всегда можно создать, когда дефекты и фишки признаны на удовлетворительно уровне.
Исключение так и будет исключением, в базе или нет. Вопрос где они нужнее. Если задача качество данных, то ключи нужны и там и там.
Если же задача сгладить впечатление и дать пользователю возможность использовать ПО поверх возможных огрехов, то наверное они не нужны ни там ни там.
Если же задача сделать ПО по - проворнее, то с ключами зависимости надо не забыть поставить индекс на каждый ключ, а без ключей "прозвонить" запросы и поставить индексы против полей использующихся для join или where.
Одной смены паролей не достаточно. Если один из сервисов под прикрытием "работы" занимается не санкционированным изменением данных.
Надо ещё и привилегии изменить, и установить аудит за изменениями в таблице.
Эти вещи не так просты, и могут не заканчиваться на самом сайте. Кто - то может входить в контекст запроса через рекламный блок, и выполнять действия, не санкционированные и не описанные кодом. Ведь так или иначе все на линии и так или иначе может быть достигнуто из открытой сети.
Поэтому существенно выполнить полный цикл работ сейчас, пока внимание заострено и пользователь понимает, что есть риски, которые его беспокоят.
Вытягивать эти вещи "пост-фактум" превращается в пытки обеих сторон, кроме того, возникают уже вопросы с доверием ( в худшем случае ) и с качеством работы.
Всегда хочется как лучше, но действовать надо, как в худшей ситуации.
Мда
--- https://code.visualstudio.com/docs/cpp/config-wsl
---
Using C++ and WSL in VS Code
In this tutorial, you will configure Visual Studio Code to use the GCC C++ compiler (g++) and GDB debugger on Ubuntu in the Windows Subsystem for Linux (WSL). GCC stands for GNU Compiler Collection; GDB is the GNU debugger. WSL is a Linux environment within Windows that runs directly on the machine hardware, not in a virtual machine.
---
Ох уж эти молодые. На ходу подметки рвут :)))
Верно)
Ещё одним недостатком запроса, который предложил выше, в случае, если у админа нет клиентов, он не выдаст ни одной строчки. Наверное надо прояснить, если строка с токеном админа и NULL значениями поможет в таком случае пояснить, что админ есть, но соответствующих записей пока не создано. Так же можно, наверное, подтвердить присутствие клиентов, у которых нет логов.
одним из возможных изменений будет, как Вы и предложили, поле в родстве logs, соответствующий запрос:
select logs.id
, logs.serial
, logs.action
, logs.ip
, logs.date
from owners owners
left join clients clients on clients.token = owners.token
left join logs logs on logs.serial = clients.serial
and logs.token = owners.token
where owners.token = 'abcd...'
-----
но такое изменение увеличит размер каждой записи logs. Если записи частые, то есть смысл сделать родство "sessions", занести в эту таблицу поле serial, поле token, а в logs ввести поле sessions, тогда запрос будет таким
select logs.id
, logs.serial
, logs.action
, logs.ip
, logs.date
from owners owners
left join clients clients on clients.token = owners.token
left join (sessions sessions
inner join logs logs on logs.session = clients.session)
on sessions.token = clients.token and sessions.serial = clients.serial
where owners.token = 'abcd...'
MySQL не силен в выполнении таких запросов, поэтому его лучше разбить на следующие подзапросы, с использованием временных таблиц
DROP IF EXISTS TEMPORARY TABLE temp_clients;
DROP IF EXISTS TEMPORARY TABLE temp_sessions;
DROP IF EXISTS TEMPORARY TABLE temp_logs1;
DROP IF EXISTS TEMPORARY TABLE temp_logs2;
CREATE IF NOT EXISTS TEMPORARY TABLE temp_clients (token, serial);
CREATE IF NOT EXISTS TEMPORARY TABLE temp_sessions (sessions, token, serial);
CREATE IF NOT EXISTS TEMPORARY TABLE temp_logs1 ( token, serial, id, session, action, ip, date);
CREATE IF NOT EXISTS TEMPORARY TABLE temp_logs2 ( token, serial, id, action, ip, date, important_owner_property);
INSERT INTO temp_clients (token, serial)
select owners.token
, clients.serial
from owners owners
left join clients clients on clients.token = owners.token
where owners.token = 'abc...';
INSERT INTO temp_sessions (session, token, serial)
select sessions.session
, clients.token
, clients.serial
from temp_clients clients
left join sessions sessions on sessions.token = clients.token and sessions.serial = clients.serial;
insert into temp_logs2
( token, serial, id, action, ip, date)
select clients.token
, clients.serial
, logs.id
, logs.action
, logs.ip
, logs.date
from temp_clients clients
left join temp_logs1 logs on logs.token= clients.token and logs.serial = clients.serial;
update logs
set important_owner_property = owners.mportant_owner_property
from temp_logs2 logs
inner join owners owners on owners.token = logs.token
where owners.mportant_owner_property is not NULL;
It can be useful to standup another attempt to login, in case "hanging" behavior was due to some kind of seldom/one off condition.
Changing focus a bit, here is similar question in Stack Overflow
See if it provides any help.
Also, rather than going for a stack trace, I'd use println (t.getMessage());
and put another println("past catch") right after the catch.
Running these few lines in debugger is even better. Usually in debugger there is command window or some other way to find how to explore elements in the driver, though you did say it's not producing anything in initial description, you still have browser's development tools ( F12 ) to inspect the page and find how to identify elements.
Sometimes elements are obstructed due to SSL ( https ) protocol, in which case it can be useful to ask developer or ops team to open access on port 80 ( http ) to train testing scripts, once scripts works, even if elements obscured by means of https connection, the script will still be working.