Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
Страницы: (2) 1 [2]  ( Перейти к первому непрочитанному сообщению )  
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Проверка на поддержку транзакций.
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16116
Пользователь №: 6543
На форуме: 8 лет, 9 месяцев, 22 дня
Карма: 304

Трезвый :
6 лет, 7 месяцев, 1 день


Цитата (killer8080 @ 18.03.2017 - 14:35)
для SELECT, DELETE, INSERT, REPLACE, UPDATE можно использовать EXPLAIN
Это для версии не ниже 5.6 Но не это главное. Эксплайн показывает не имя таблицы, а алиас, если он есть. Я это первым делом попробовал. smile.gif


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 265
Пользователь №: 26735
На форуме: 6 лет, 4 месяца, 18 дней
Карма: 15




Цитата (twin @ 18.03.2017 - 13:52)
Цитата (Santehnick @ 18.03.2017 - 13:38)
DROP/CREATE делают неявный коммит
Они меня не интересуют.

В примере ты удаляешь нетранзакционную таблицу внутри транзакции, затем делаешь роллбек и всё сыпется. Спрашиваешь как избежать. Тебе отвечают почему так происходит. Ты надуваешь щеки, что тебя это не интересует. Если не интересует, тогда писать такой пример не нужно.

Цитата

Цитата
1. не существует метода PDO::startTransaction

Существует. В моем билдере существует.

В примере, билдера не видно. Видно нативный PDO объект. Приводи адекватные сниппеты кода. Гадалок нет.

По поводу как проверить. Никак не нужно проверять. База данных позволяет делать изменения внутри транзакции в нетранзакционных таблицах независимо от autocommit mode
Цитата
If you use tables that are not transaction-safe within a transaction, changes to those tables are stored at once, regardless of the status of autocommit mode. источик


Ты пытаешься изменить поведение уровнем выше. Этого нельзя делать. Пользователь этого не ожидает. Обрати внимание, ни сам PHP, ни билдеры, ни ORMы этого не делают. Если погуглишь, даже вопросов таких не найдешь. Если протокол взаимодействия предполагает именно такое поведение, то такое поведение и должно быть. Без предупреждений или чего-либо еще.

Если выражаться в терминах ООП, то это похоже на нарушение принципа Барбары Лисков
Цитата
Более простыми словами можно сказать, что поведение наследуемых классов не должно противоречить поведению, заданному базовым классом, то есть поведение наследуемых классов должно быть ожидаемым для кода, использующего переменную базового типа. (вики)

За базовый класс, можно принять базу данных, а за наследуемый класс твой билдер. И если твой билдер меняет базовое поведение базы данных, то фактически можно сказать, что твой билдер не удовлетворяет принципу Барбары Лисков. Это плохо. Я меняю myisam внутри транзакции и не ожидаю никаких предупреждений, но билдер говорит "ай яй яй не хорошо". Почему?
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16116
Пользователь №: 6543
На форуме: 8 лет, 9 месяцев, 22 дня
Карма: 304

Трезвый :
6 лет, 7 месяцев, 1 день


Цитата (Santehnick @ 18.03.2017 - 15:19)
В примере ты удаляешь нетранзакционную таблицу внутри транзакции, затем делаешь роллбек и всё сыпется. Спрашиваешь как избежать. Тебе отвечают почему так происходит. Ты надуваешь щеки, что тебя это не интересует. Если не интересует, тогда писать такой пример не нужно.
Хорошо, не буду надувать щеки. :) Я собственно получил что хотел, а дорогу в мануал я прекрасно знаю. Понятно, что тебе хочется самоутвердиться. Не стану мешать - законное желание.

Вообще конечно смешно. Ты говоришь, что гадалок нет, а сам пытаешься угадать... да нет. Даже не так. Ты пытаешься применить свои знания туда, где это совсем не нужно. Потому что не знаешь предмета.

Я не меняю поведение. Это нужно мне для дебаггера. Просто хочу выкинуть предупреждение, что он не дебажит таблицы, не поддерживающие транзакции. Именно потому, что это может привести к непредсказуемым результатам. Дебаггер как раз использует транзакцию.

Да, дебаггер используется билдером, так что там все в тему. А принцип Лисков я прекрасно знаю. Кстати, принципы знать нужно не только для того, чтобы их фанатично соблюдать. Но и для того, чтобы осознанно нарушать, где это плезно. Это так, к слову.

Если уж так интересно посмотреть на сниппет, то пожалуйста:

    public function execute($params = null)
{
$sql = $this->createSqlString($params);

if (false === $this->checkEngine($sql)) {
AbcError::logic(' Component PDO: '. ABC_NO_TRANSACTION);
return false;
}

if ($this->pdo->inTransaction()) {
$this->pdo->exec("SAVEPOINT sqldebug");
$this->pdo->query($sql);
$this->pdo->exec("ROLLBACK TO SAVEPOINT sqldebug");
} else {
$this->pdo->beginTransaction();
$this->pdo->query($sql);
$this->pdo->rollback();
}

return parent::execute($params);
}
Вот сейчас доделаю метод checkEngine() и возрадуюсь. :)


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 265
Пользователь №: 26735
На форуме: 6 лет, 4 месяца, 18 дней
Карма: 15




Цитата (twin @ 18.03.2017 - 15:53)
Ты говоришь, что гадалок нет, а сам пытаешься угадать...

предположить. или что еще можно было сделать с твоим примером?
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16116
Пользователь №: 6543
На форуме: 8 лет, 9 месяцев, 22 дня
Карма: 304

Трезвый :
6 лет, 7 месяцев, 1 день


Цитата (Santehnick @ 18.03.2017 - 16:39)
предположить. или что еще можно было сделать с твоим примером?
Ну я же не просил расказывать мне азы. Я задал конкретный вопрос. Раз задал, значит мне нужно так. Как минимум культурные люди сначала интересуются, для чего столь экзотическая задача. А не отправляют в мануал, как сопливого школьника.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Arh  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



146%
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 2378
Пользователь №: 27172
На форуме: 6 лет, 3 месяца, 24 дня
Карма: 76




twin
Решил поменять стиль расстановки фигурных скобок?)


--------------------
:)
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16116
Пользователь №: 6543
На форуме: 8 лет, 9 месяцев, 22 дня
Карма: 304

Трезвый :
6 лет, 7 месяцев, 1 день


Цитата (Arh @ 18.03.2017 - 17:35)
Решил поменять стиль расстановки фигурных скобок?)

Не, это же фреймворк. Я его изначально в PSR писал. Коньюнктура, мать его biggrin.gif


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









Цитата (twin @ 18.03.2017 - 19:53)
Это нужно мне для дебаггера. Просто хочу выкинуть предупреждение, что он не дебажит таблицы, не поддерживающие транзакции. Дебаггер как раз использует транзакцию.

Можешь объяснить, просто интересно. Каким образом он дебажит таблицы и зачем ему для этого понадобились транзакции?
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3706
Пользователь №: 38635
На форуме: 3 года, 6 месяцев, 29 дней
Карма: 198




twin
А курсоры?
Вот тут как раз и нужна транзакция, если отправляется не одновременно несколько запросов к курсору и нужно держать его открытым.


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









AllesKlar, курсоры read-only, зачем там транзакция?
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
AllesKlar  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 3706
Пользователь №: 38635
На форуме: 3 года, 6 месяцев, 29 дней
Карма: 198




Guest
Представься, чтоли

Я же написал
Цитата
если отправляется не одновременно несколько запросов к курсору и нужно держать его открытым.

- открыли курсор
- отправили запрос к нему
- соединение закрылось
- курсор закрылся.
- нужен еще один запрос к этому же курсору... как ?

- открыли транзакцию.
- открыли курсор
- пока транзакция не будет закрыта, курсор будет открыт


--------------------
[продано копирайтерам]
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16116
Пользователь №: 6543
На форуме: 8 лет, 9 месяцев, 22 дня
Карма: 304

Трезвый :
6 лет, 7 месяцев, 1 день


Цитата (Guest @ 18.03.2017 - 20:21)
Можешь объяснить, просто интересно. Каким образом он дебажит таблицы и зачем ему для этого понадобились транзакции?
Ну в двух словах так. Компонент Pdo, это наследник от штатного PDO. Если включен режим отладки, то он использует не штатный PDOStatement, а тоже наследника. Тот, в свою очередь, сам собирает запрос (биндит параметры) и запускает его в транзакции. Чтобы не портить таблицу. Если запрос отработал нормально - откатываем транзакцию и скрипт продолжает движение. Если в запросе ошибка, то PDO бросит исключение, которое отлавливает обработчик и выдает вот такую шнягу (там чуть ниже таблица). Такая же хрень есть и для mysqli_ Это в общих чертах, там немного сложнее, но принцип я примерно рассказал.

Еще есть режим тестирования, когда это всё запускается принудительно.

Транзакция там нужна, чтобы дебаггер не влиял на целостность данных. А если это нетранзакционная таблица, то можно так отдебажить, что без штанов останешься. smile.gif

Если интересна реализация, то вот тут к примеру.

AllesKlar
Тоже не понял, чем курсоры помешали... Они помоему совсем не из этой темы.


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Santehnick  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 265
Пользователь №: 26735
На форуме: 6 лет, 4 месяца, 18 дней
Карма: 15




Ясно. Это работает так. Есть проект на ABC фреймворке и вам нужно получить профилировочную информацию такую как текст запроса/время выполнения и explain, тогда вам нужно выполнить такие шаги:

1. Найти запрос, который вас интересует.
2. До вызова запроса написать $pdo->test();
3. Анализировать результат
4. Удалить $pdo->test();

Что сделает фреймворк. При insert/update/delete запросе покажет текст этого запроса и для этого ему потребуется:

1. Открыть новую транзакцию или создать savepoint если мы уже внутри транзакции.
2. Выполнить запрос.
3. Откатить транзакцию или откатиться к savepoint.

Для select фреймворку понадобится аналогичная процедура, но дополнительно выдаст время выполнения и explain.

Ну как вам? Нравится? Кстати, посмотрите еще контейнер зависимостей. Там тоже великолепно сделано.
PM
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
twin  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Глухой нуб
******

Профиль
Группа: Администратор
Почтальон группы
Сообщений: 16116
Пользователь №: 6543
На форуме: 8 лет, 9 месяцев, 22 дня
Карма: 304

Трезвый :
6 лет, 7 месяцев, 1 день


Santehnick
То, что ты описал, это бонус. На самом деле режим дебаггинга задается в конфиге. Вот тут:
                'pdo' => ['dsn'    => 'mysql:dbname=abc_example;host=localhost',
'opt' => [],
'user' => 'root',
'pass' => '',
'prefix' => 'abc_',
'debug' => true, // Режим дебаггинга
Если эта опция включена, то фреймворк автоматически выполнит всё это при кривом запросе. Если нужно посмотреть на живой запрос, то тогда нужно
Цитата (Santehnick @ 19.03.2017 - 01:45)
1. Найти запрос, который вас интересует.
2. До вызова запроса написать $pdo->test();
3. Анализировать результат
4. Удалить $pdo->test();
А можно этого и не делать, оно никому не мешает.

А что не так с контейнером?


--------------------
Если вам недостаточно собственных заблуждений, можно расширить их мнениями экспертов.

Нужно уважать мнение оппонета. Ведь заблуждаться - его святое право.

Настаивал, настаиваю и буду настаивать на своем. На кедровых орешках.

user posted image
PMСайт пользователяICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темыСтраницы: (2) 1 [2]  Ответ в темуСоздание новой темыСоздание опроса