- 1
- 2
- 3
- 4
- 5
QSqlQuery my_query;
my_query.prepare(
QString("INSERT INTO table1 (number, address, age) VALUES (%1, '%2', %3);")
.arg(fromInput1).arg(fromInput2).arg(fromInput3)
);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+64
QSqlQuery my_query;
my_query.prepare(
QString("INSERT INTO table1 (number, address, age) VALUES (%1, '%2', %3);")
.arg(fromInput1).arg(fromInput2).arg(fromInput3)
);
Жаль, но похоже автор не осилил экранирование от SQL-иньекций.
И кстати полнотекстовой поиск в нормальных БД только по слову целеком ищет или может и по части слова? Слышал что SQLite может только слова индексировать полностью, а не их части.
И мне интересно почему они всегда строят деревья вместо возможности заюзать хештаблицы аля мапа слово на позицию.
> вместо возможности заюзать хештаблицы аля мапа слово на позицию
Потому что будет слишком дохуя?
А чем мапа из дерева меньше мапы из хештаблицы?
Поэтому в том же постгресе сделано так: И индекс строится уже по нормализованным словам. И ищет более-менее мягко, и индексы не так уж пухнут, как если в них забивать все-все-все куски...
Чё это вдруг? Чем хештаблица не устроила то?
Что во что твоя карта будет отображать?
P.S. Я не особо шарю в кишках GiST и GIN индексов ;( Более того, для меня они чорная магия.
В гуглокартинках по обоим гуглится такая жопа, что я чуть не проблювался. Особенно от первого.
Ладно первое я ещё могу представить. Второе - это что?
Допустим все префиксы всех слов мы скидали в хештейбл. Получилась здоровая ёба. Собственно мапим например 'джигурд' на строку таблицы.
Да нафига они нужны? Это же только дичайше раздует индекс (мелкие префиксы встречаются в дохера и больше строк), да добавит ложных сработок (по слову 'ху' будет искаться и 'хуй' и 'художник' и 'хутор'...). Ну и по серединам слов один хрен искать не будет :(
P.S. Надеюсь ты не предлагаешь потом искать все префиксы искомых слов в этой мапе (чтобы по 'художнику' находился 'хуй')? :)
Поэтому и выбрали более-менее разумную альтернативу - тупо обрезать окончания у слов. В оракле и M$ может быть и по-другому, надо дождаться d++ или dbdev...
Имел в виду просто слова без окончаний мапить на строку. Я не предлагал строить префиксные деревья или забивать мапу всеми префиксами одного слова
Дык постгрешный GIN и sqlite вроде так и делают?
Единственное предположение у меня в том, что часто < нужно делать, но вот в случае поиска подстроки < уже не нужно. Так что это не оправдание, а вот самое главное оправдание видимо рехешинг при расширении. И он видимо дохрена долгий
И локальности нету - в хеш-табличках же стоящие рядом ключи размазаны по всей таблице, в в дереве - стоят рядом. (Хотя в этой конкретной задаче локальность вроде как и не нужна).
вероятно, индексы лежат на диске, а в этом случае локальность очень даже нужна. Мало кто захочет при изменении одного нода перезаписывать весь индекс целиком.
Я тут как раз just for lulz пишу биграмный поиск на крестах, тема близка :) У меня только in-memory, потому юзаю хэш-таблицы.
Поиск в тексте по двум символам?
А вот здесь все индексы, какие там есть.
@>
Няшно. Пошел читать.
Питушки мотивируют.
Какие-то мапы строят в MS: http://technet.microsoft.com/en-us/library/ms142505(v=sql.105).aspx
в оракле да, Oracle Text доступен даже в Express Edition, хотя, вроде, раньше имелся только начиная со Standard
В MS SQL Server-e полнотекстовой поиск является отдельным сервисом (есть во всех версиях, кроме экспресс), который надо отметить галкой при установке, запускается отдельно от ядра СУБД (хотя часть поиска всё-же есть в ядре). По-умолчанию не включён.
На ненормальных тоже норм. По крайней мере кутишный драйвер БД разбирается в экранировке намного лучше юзера :)
Олсо там есть баг: http://govnokod.ru/12077