ФорумРазработкаБазы данных → Срачь из темы про goDB

Срачь из темы про goDB

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2010 г. 9:56, спустя 5 минут 32 секунды

    все, я запутался…
    главрыб, koc, костыль
    Спустя 11 сек.
    как с вами нае запутаться
    Спустя 82 сек.
    да, проверил, точно перепутал…
    Спустя 61 сек.

    AlexB, ага. А теперь давай прикрутим динамические фильтры
    а тогда зачем этот пост? то есть тебе нравится код костыля?
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2010 г. 10:20, спустя 20 минут 7 секунд

    Почему тебе оно больше нравится
    $qb->select('u')
    ->from('User', 'u')
    ->where('u.id = ?1')
    ->orderBy('u.name ASC');


    чем


    goDB::query('
    SELECT u FROM User AS u WHERE u.id = ?i ORDER BY u.name ASC ',
    $data,
    'assoc'
    );


    или


    User.objects.filter(field=1).order_by('name')
    Спустя 54 сек.
    В последнем примере используется filter вместо get, так как судя по тому что там есть сортировка, то id это не PRIMARY KEY
    Спустя 24 сек.
    а id в джанге зарезервирован под primary key
    Спустя 32 сек.
    По нормальному выглядит так:

    User.objects.get(pk=1)
    Спустя 197 сек.

    $qb->select(array('u')) // string 'u' is converted to array internally
    ->from('User', 'u')
    ->where($qb->expr()->orx(
    $qb->expr()->eq('u.id', '?1'),
    $qb->expr()->like('u.nickname', '?2')
    ))
    ->orderBy('u.surname', 'ASC'));


    это вообще не читабельно, надо привыкнуть наверное :)


    User.objects.filter(field=1, nickname__contains=2).order_by('surname')
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • Абырвалг

    Сообщения: 6480 Репутация: N Группа: Джедаи

    Spritz 15 сентября 2010 г. 10:24, спустя 3 минуты 14 секунд

    мне пример из пайтона понравился больше всего, единственное что наверно было бы идеологически правильнее UsersCollection

    статика (goDB::query()) меня вообще не устраивает. На таких простых примерах естественно я буду писать DQL руками

  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2010 г. 10:31, спустя 7 минут 37 секунд

    статика (goDB::query()) меня вообще не устраивает

    я юзаю статику, мне так удобнее, чем обращатся к $this->db, но goDB::query это только хелпер, в основном юзают так как ты любишь http://pyha.ru/go/godb/intro/
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 15 сентября 2010 г. 14:14, спустя 3 часа 42 минуты 45 секунд


    Почему тебе оно больше нравится
    $qb->select('u')
    ->from('User', 'u')
    ->where('u.id = ?1')
    ->orderBy('u.name ASC');


    чем


    goDB::query('
    SELECT u FROM User AS u WHERE u.id = ?i ORDER BY u.name ASC ',
    $data,
    'assoc'
    );



    А ты попробуй в этом месте добавить условие по каким-то входным данным. Например join чего-то или условие какое-нит. В QB можно просто сделать, что то типа:
    $qb->select('u')
    ->from('User', 'u')
    ->where('u.id = ?1')
    ->orderBy('u.name ASC');
    if ($filter) {
    $qb->andWhere($filter['field'], $filter['value']);
    }

    а что надо проделать в другом случае?
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2010 г. 14:53, спустя 38 минут 54 секунды

    а что надо проделать в другом случае?

    собрать все в конце… от перестановки значений сумма не меняется
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 15 сентября 2010 г. 14:58, спустя 5 минут

    adw0rd, та ну как сказать. Вот я собрал в конце http://pyha.ru/forum/topic/5121.msg114359#msg114359 - по-моему удобство отстаёт.
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2010 г. 15:03, спустя 5 минут 30 секунд

    А что там за $params, покажи концовку, где запрос выполняется
    Спустя 21 сек.
    и напиши полный аналог с использование вашего булдера
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 15 сентября 2010 г. 15:16, спустя 12 минут 24 секунды

    А что там за $params, покажи концовку, где запрос выполняется

    ну у меня идёт так:
    $this->_getDb()->query($sql, $params)->fetchAll()

    и напиши полный аналог с использование вашего булдера

    ну вообще зависит от реализации. Ту, что я давал - это конечно гавно, но можно и нормальную реализовать:
    $qb = new Qb(Qb::SELECT)
    $qb->addField('track_id', 'track')
    ->addField('track_title', 'track')
    ->order('track_id', 'track', Qb::ORDER_DESC)
    ->limit($from, $count);
    if (null !== $albomId) { //это условие можно даже проверить в нижлежайшем методе
    $qb->addWhere('albom_id', $albomId, Qb::FORMAT_INT) // FORMAT_INT == '?i'
    }

    $this->_getDb()->query($qb->getSql(), $qb->getParams())->fetchAll()

    Не знаю как Фабъен, но Фаулер пишет позитивно о QB ))
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2010 г. 15:36, спустя 19 минут 45 секунд


    $pattern = 'SELECT track_id, track_title FROM trac ?q ORDER BY track_id DESC';
    $where = '';
    if (null !== $albomId) { //это условие можно даже проверить в нижлежайшем методе
    $where = 'albom_id = ' . $albomId;
    }
    $db->query($pattern, array($where), 'assoc');
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2010 г. 15:44, спустя 8 минут 43 секунды


    d = Trac.objects.order_by('-track_id')
    d.filter(album_id=albomid) #это условие можно даже проверить в нижлежайшем методе
    Спустя 38 сек.
    d = Trac.objects.order_by('-track_id').filter(album_id=albomid)
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 15 сентября 2010 г. 15:46, спустя 1 минуту 18 секунд

    adw0rd, не убедил )) суть в собирании запроса по кускам, добовляются в билдер не в той последовательности, в какой будут сложены в итоге. Это даёт гибкости динамической сборки.
    зы: твой пример нифига не читабелен ИМХО и ты опустил как бы кое какие важные вещи ))
    ну ладно хули спорить… Олег правильно сказал
    Насчёт ORM vs Builder vs native-SQL: кто из них лучше тема для обширного и бессмысленного холивара.
    Каждый выбирает, что ему нравится


  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2010 г. 15:51, спустя 5 минут 46 секунд

    adw0rd, не убедил )) суть в собирании запроса по кускам, добовляются в билдер не в той последовательности, в какой будут сложены в итоге. Это даёт гибкости динамической сборки.

    я и не пытался, приведи тогда нормальный пример на билдере, что бы я наконец не смог это повторить на sql
    Спустя 60 сек.
    зы: твой пример нифига не читабелен ИМХО и ты опустил как бы кое какие важные вещи ))

    прикольно это слышать, не знаю как другим, но мне твой пример кажется менее читабельным, зато более избыточным
    какие вещи я опустил?
    Спустя 107 сек.
    Если уж выебыватся с "билдерами", то взгляни на джанговский орм - вот это нормальный билдер,
    а не то ни се - qb, и не натив и не orm что-то между
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 15 сентября 2010 г. 16:03, спустя 11 минут 27 секунд

    Больше всего в твоем примере мне не нравится:

    * имена таблиц передается постоянно, нахуй этот пиздец избыточный?
       ->addField('track_id', 'track')
    ->addField('track_title', 'track')


    * ебанутые константы Qb::SELECT (неужели нельзя это предусмотреть методом чтоле, типа $Qb->select() или типа того), Qb::ORDER_DESC (это вообще пиздец, в нормальных билдера юзают типа "-"), Qb::FORMAT_INT (Это вместо маленького плейсхолдера? гавно)
    - с какого они века? хуже только гавно типа Qb::DB_FETCH_MODE_SUPER_SELECT_2
    Спустя 107 сек.
    $qb->addWhere('albom_id', $albomId, Qb::FORMAT_INT)

    лучше уж так
    $qb->addWhere('albom_id', intval($albomId))
    Спустя 47 сек.
    ->order('track_id', 'track', Qb::ORDER_DESC)

    на
    ->order('-track_id', 'track')
    Спустя 144 сек.
    $this->_getDb()->query($qb->getSql(), $qb->getParams())->fetchAll()

    а это зачем таком супер билдеру? он не может выполнять запрос сам, когда его вдруг начинают выводить в буфер или итерировать?

    __iter__ ( или IteratorAggregator)
    __str__ ( или __toString())
    Спустя 80 сек.
    Вместо одного языка запросов выдумали другой из еще хуже конструкций для генерации первого…
    https://smappi.org/ - платформа по созданию API на все случаи жизни

Пожалуйста, авторизуйтесь, чтобы написать комментарий!