1. C++ / Говнокод #18221

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    QString queryString = QString("SELECT `angle`, `heights` FROM `heights%1` WHERE `angle` / 10 ").arg(camera->cid());
    
    	if (from <= 0 || to > 360)
    	{
    		if (from <= 0) // to the right of North
    		{
    			from += 360;
    
    			qSwap<double>(from, to);
    		}
    		else if (to > 360) // to the left of North
    		{
    			to -= 360;
    
    			qSwap<double>(from, to);
    		}
    
    		from += 0.1;
    		to -= 0.1;
    
    		queryString += "NOT ";
    	}
    
    	queryString += QString("BETWEEN %1 AND %2").arg(from, 0, 'f', 1).arg(to, 0, 'f', 1);

    извращался как мог, сколько дадите по шкале от 0 до 10?

    Запостил: Wexter, 22 Мая 2015

    Комментарии (24) RSS

    • >>QString("BETWEEN %1 AND %2").arg(from, 0, 'f', 1).arg(to, 0, 'f', 1);
      Ололо, еще чуть-чуть и получится qtLinq.
      Ответить
    • > heights%1 + .arg(camera->cid())
      это что ещё за ахтунг
      партишионинг?

      > QString("BETWEEN %1 AND %2")
      а бинд в твой кутэ не завезли?

      все остальное не заслуживает внимания
      Ответить
      • > а бинд в твой кутэ не завезли?
        Завезли: http://doc.qt.io/qt-5/qsqlquery.html#bindValue. Но как же не пожевать кактус?
        Ответить
        • завезли да криво, если юзать prepared statement с bindValue на линуксах - поля типа float/double возвращаются всегда со значением 0, так и живём :)
          Ответить
          • Лол, и правда.
            Ответить
          • Только там не 0, а NULL. Сейчас разберёмся.
            Ответить
          • Нет, всё нормально втыкает. И из селектов норм возвращается. Это я лоханулся с именами параметров.
            Ответить
          • В общем пример и версии Qt и myqsl в студию.
            Ответить
            • пример https://github.com/Wexter/QtSQLTest/
              пруф и версии: http://i.imgur.com/k5HsHQC.png
              как видно баг воспроизводится только если в поле типа double число с точкой, без точки выбирается нормально
              даже есть багрепорты https://bugreports.qt.io/browse/QTBUG-4931
              но замечено подобное только на linux, под виндой всё работает нормально
              Ответить
              • QMake version 3.0
                Using Qt version 5.4.1
                mysqld  Ver 5.6.24-0ubuntu2 for debian-linux-gnu on x86_64 ((Ubuntu))
                
                create table coords(cid integer, id integer auto_increment primary key, latitude double, longitude double, height double);
                
                insert into coords(cid, latitude, longitude, height) values(2, 57.900903, 28.626589, 80);
                
                QSqlRecord(5)
                 0: QSqlField("cid", int, length: 11, precision: 0, required: no, generated: yes, typeID: 3, autoValue: false, readOnly: false) "2" 
                 1: QSqlField("id", int, length: 11, precision: 0, required: yes, generated: yes, typeID: 3, autoValue: true, readOnly: false) "1" 
                 2: QSqlField("latitude", double, length: 22, precision: 31, required: no, generated: yes, typeID: 5, autoValue: false, readOnly: false) "57.900903" 
                 3: QSqlField("longitude", double, length: 22, precision: 31, required: no, generated: yes, typeID: 5, autoValue: false, readOnly: false) "28.626589" 
                 4: QSqlField("height", double, length: 22, precision: 31, required: no, generated: yes, typeID: 5, autoValue: false, readOnly: false) "80"
                Ответить
              • QMake version 3.0
                Using Qt version 5.3.2
                
                QSqlRecord( 5 )
                 " 0:" QSqlField("cid", int, length: 11, precision: 0, required: no, generated: yes, typeID: 3) "2" 
                 " 1:" QSqlField("id", int, length: 11, precision: 0, required: yes, generated: yes, typeID: 3) "1" 
                 " 2:" QSqlField("latitude", double, length: 22, precision: 31, required: no, generated: yes, typeID: 5) "57.900903" 
                 " 3:" QSqlField("longitude", double, length: 22, precision: 31, required: no, generated: yes, typeID: 5) "28.626589" 
                 " 4:" QSqlField("height", double, length: 22, precision: 31, required: no, generated: yes, typeID: 5) "80"
                Ответить
              • В общем на 5.3.2 и 5.4.1 воспроизвести не получилось. А 5.3.1 сейчас нету в maintenance tool :(
                Ответить
                • а какая версия libmysqlclient слинкована с qt?
                  Ответить
                  • libmysqlclient.so.18
                    Ответить
                    • у меня .16, видимо в это дело.
                      ставил qt инсталлятором с сайта, а там собрано с .16
                      Ответить
                      • > а там собрано с .16
                        Ага, я пересобирал плагин под 18-ю, которая в 15.04 ставится.
                        Ответить
      • > все остальное не заслуживает внимания
        А как же 0.1?
        Ответить
    • > qSwap<double>(from, to)
      Можешь не писать тип, в подобных случаях крестокомпилятор его сам определит.
      Ответить
    • >>QString queryString = QString("SELECT `angle`, `heights` FROM `heights%1` WHERE `angle` / 10 ").arg(camera->cid());

      Какой комшар. Как я понял, от крестов паскаля не ждут.
      Ответить

    Добавить комментарий