|
|
|
Функция на С++. Передача массива
|
|||
|---|---|---|---|
|
#18+
Свел задачу к минимуму. Нужно передать массив из 5 элементов и вывести значение, например, 4-го. Код C++ Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Скомпилировал, выполняю запрос select approx(array[1,3,4,21,8]) Результат 23. Стал разбираться, начал смотреть значение каждого индекса, в итоге собрался массив вида {176, 1, 0, 23, 5, 1, 3, 4, 21, 8, 7} Последний 5 элементов совпадают с тем, что передано, а первые 5 не пойму откуда берутся. Помогите разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2014, 11:21:32 |
|
||
|
Функция на С++. Передача массива
|
|||
|---|---|---|---|
|
#18+
В дополнение. CREATE OR REPLACE FUNCTION approx(integer[]) RETURNS integer AS '$libdir/approx', 'approx' LANGUAGE c COST 1; ALTER FUNCTION approx(integer[]) OWNER TO postgres; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2014, 11:22:30 |
|
||
|
Функция на С++. Передача массива
|
|||
|---|---|---|---|
|
#18+
Symantek, Чисто подозрение - тип array из postgresql не соответствует POD array в c++. Например, весьма подозрительным выглядит число 5 перед самими значениями - как будто размер самого массива. Собственно первые ссылки из гугла, вроде бы как, подтверждают гипотезу. Решение - правильная конвертация из типа array в postgresql в тот тип данных в полюсах, что вам нужен. Опять же, не имею никакого опыта работы с postgresql, просто наблюдение. Т.е. вместо указателя на into там лежит более хитрая структура. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2014, 00:10:45 |
|
||
|
Функция на С++. Передача массива
|
|||
|---|---|---|---|
|
#18+
Symantek, посмотрите: 1) http://www.postgresql.org/docs/9.3/static/xfunc-c.html 35.9.4. Version 1 Calling Conventions PG_FUNCTION_ARGS PG_GETARG_* PG_RETURN_* 2) http://doxygen.postgresql.org/array_8h_source.html ArrayType PG_GETARG_ARRAYTYPE_P ARR_DATA_PTR 3) вариант получения сылки на значения в контрибе intarray http://www.postgresql.org/docs/9.3/static/intarray.html http://doxygen.postgresql.org/__int_8h.html #define ARRPTR ( x ) ( (int32 *) ARR_DATA_PTR(x) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2014, 04:13:24 |
|
||
|
Функция на С++. Передача массива
|
|||
|---|---|---|---|
|
#18+
Глянь тут https://github.com/ringerc/scrapcode/tree/master/postgresql/array_sum http://blog.pipefish.com/2013/06/06/passing-postgres-arrays-to-a-custom-server-side-function-written-in-c.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2014, 01:14:38 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=38746162&tid=1998489]: |
0ms |
get settings: |
9ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
186ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
24ms |
get tp. blocked users: |
1ms |
| others: | 237ms |
| total: | 478ms |

| 0 / 0 |
