Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Increase List Size Limit Beyond 100 #949

Closed
mohayu22 opened this issue May 25, 2023 · 5 comments · Fixed by #1001
Closed

Increase List Size Limit Beyond 100 #949

mohayu22 opened this issue May 25, 2023 · 5 comments · Fixed by #1001
Labels
enhancement New request

Comments

@mohayu22
Copy link
Contributor

mohayu22 commented May 25, 2023

In Postgres, there is a limitation that prevents more than 100 arguments from being passed to a function. This limitation also applies to lists and maps constructed using the functions agtype_build_list and agtype_build_map. As a result, the size of lists and maps is restricted to a maximum of 100 elements.

SELECT * FROM cypher('test', $$
       RETURN [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
 $$) AS (res agtype);
ERROR:  cannot pass more than 100 arguments to a function

The same restriction applies to map properties.

Why:

  • A user may have a reading list that includes more than 100 books.
  • Neo4j doesn't impose a fixed limit on the number of list items or properties a node can have.

Implementation:

Change agtype_build_list and agtype_build_map to accept one agtype argument instead of VARIADIC "any"

SELECT agtype_build_list('[1, 1, 1]'::agtype);
 agtype_build_list 
-------------------
 [[1, 1, 1]]
(1 row)

Setup:
Apache AGE (master) - PostgreSQL 11.18

@mohayu22 mohayu22 added the enhancement New request label May 25, 2023
@Amr-Shams
Copy link

SELECT * FROM cypher('test', $$
       RETURN $1
 $$, '[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]')
 $$) AS (res agtype);

By passing the list as a single string argument, you are able to bypass this limitation since the entire list is treated as a single argument. The cypher function can then reference the list using a positional placeholder like $1. this is a way around to overcome the limitations of an argument as it makes no scene to pass all the argument and yet they are not stored in a list

@farooquememon385
Copy link

the agtype_build_list function accepts a maximum of 100 arguments. If you try to pass more than 100 arguments to the agtype_build_list function, you will get an error.

You can use the agtype_build_list_from_array function instead that does not have this limitation. You can pass any number of arguments to the agtype_build_list_from_array function and it will return a list with those values.

1 similar comment
@farooquememon385
Copy link

the agtype_build_list function accepts a maximum of 100 arguments. If you try to pass more than 100 arguments to the agtype_build_list function, you will get an error.

You can use the agtype_build_list_from_array function instead that does not have this limitation. You can pass any number of arguments to the agtype_build_list_from_array function and it will return a list with those values.

@Munmud
Copy link
Contributor

Munmud commented May 29, 2023

the agtype_build_list function accepts a maximum of 100 arguments. If you try to pass more than 100 arguments to the agtype_build_list function, you will get an error.

You can use the agtype_build_list_from_array function instead that does not have this limitation. You can pass any number of arguments to the agtype_build_list_from_array function and it will return a list with those values.

@farooquememon385 Can you please give us an example plsease ?

@MuhammadTahaNaveed
Copy link
Member

Closing this as completed. Fix in PR #1001 .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New request
Projects
Development

Successfully merging a pull request may close this issue.

6 participants