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

Support arrays with start index != 1 #23

Open
Cito opened this issue Feb 15, 2020 · 1 comment
Open

Support arrays with start index != 1 #23

Cito opened this issue Feb 15, 2020 · 1 comment
Milestone

Comments

@Cito
Copy link
Member

Cito commented Feb 15, 2020

The current implementation of the cast_array function in the C module ignores the start index of PostgreSQL arrays. They are assumed to always be 1. As discussed on the mailing list in September 2016, this should be improved:

The idea is that the cast_array function should take an additonal, optional cls parameter which will then be used as the base class for the array. If that parameter is None or list, then the method works as before, returning a list or a list of lists for multidimensional arrays. If it is any other class, then this will be considered as a subclass of list that will be used instead of the builtin list for building the return values. In addition, the instances of this list subclass will have a lower attribute set to the start index of the corresponding PostgreSQL (sub)arrays by the cast_array function.

It should then be possible to change the default value for cls passed into the cast_array function to a custom list subclass. That subclass could consider the start index when getting items, and return None it the index points to outside the array. This would emulate the behavior of PostgreSQL arrays more closely.

Note that when we support start indices when converting Pg to Py, we also need to support them when converting from Py to Pg. Currently this is done with the ARRAY constructor, which doesn't allow for start indices as far as I know, so this needs to be changed.

(copied from Trac ticket 72, created 2016-09-21)

@Cito
Copy link
Member Author

Cito commented Feb 15, 2020

Currently I see no real demand for this functionality which is difficult to implement and to use, so I have postponed it and decreased the priority.

If we're going to implement this, we should find a concrete usage example first, and use this for the tests and as an example in the documentation.

Idea: Instead of setting the lower attribute, the array parser could also pass the start index when creating the array e.g. like PgArray(lower=7).

(copied from Trac 2019-04-25)

@Cito Cito added this to the 6.0 milestone Feb 15, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant