Re: JSON Function Bike Shedding - Mailing list pgsql-hackers

From Merlin Moncure
Subject Re: JSON Function Bike Shedding
Date
Msg-id CAHyXU0znyE_kp7w9TgSZ2s+uNijG5AZ1o_VJE+C0Euu0vUCAPA@mail.gmail.com
Whole thread Raw
In response to Re: JSON Function Bike Shedding  ("David E. Wheeler" <david@justatheory.com>)
Responses Re: JSON Function Bike Shedding
List pgsql-hackers
On Fri, Feb 22, 2013 at 11:50 AM, David E. Wheeler
<david@justatheory.com> wrote:
> On Feb 22, 2013, at 9:37 AM, Robert Haas <robertmhaas@gmail.com> wrote:
>
>> What I think is NOT tolerable is choosing a set of short but arbitrary
>> names which are different from anything that we have now and
>> pretending that we'll want to use those again for the next data type
>> that comes along.  That's just wishful thinking.  Programmers who
>> believe that their decisions will act as precedent for all future code
>> are almost inevitably disappointed.  Precedent grows organically out
>> of what happens; it's very hard to create it ex nihilo, especially
>> since we have no clear idea what future data types we'll likely want
>> to add.  Sure, if we add something that's just like JSON but with a
>> few extra features, we'll be able to reuse the names no problem.  But
>> that's unlikely, because we typically resist the urge to add things
>> that are too much like what we already have.  The main reason we're
>> adding JSON when we already have hstore is because JSON has become
>> something of a standard.  We probably WILL add more "container" types
>> in the future, but I'd guess that they are likely to be as different
>> from JSON as JSON is from XML, or from arrays.  I'm not convinced we
>> can define a set of semantics that are going to sweep that broadly.
>
> Maybe. I would argue, however, that a key/value-oriented data type will always call those things "keys" and "values".
Sokeys() and vals() (or get_keys() and get_vals()) seems pretty reasonable to me. 
>
> Anyway, back to practicalities, Andrew last posted:
>
>> I am going to go the way that involves the least amount of explicit casting or array construction. So get_path()
stays,but becomes non-variadic. get() can take an int or variadic text[], so you can do: 
>>
>>    get(myjson,0)
>>    get(myjson,'f1')
>>    get(myjson,'f1','2','f3')
>>    get_path(myjson,'{f1,2,f3}')
>
> I would change these to mention the return types:
>
>    get_json(myjson,0)
>    get_json(myjson,'f1')
>    get_json(myjson,'f1','2','f3')
>    get_path_json(myjson,'{f1,2,f3}')
>
> And then the complementary text-returning versions:
>
>    get_text(myjson,0)
>    get_text(myjson,'f1')
>    get_text(myjson,'f1','2','f3')
>    get_path_text(myjson,'{f1,2,f3}')
>
> I do think that something like length() has pretty good semantics across data types, though. So to update the
proposednames, taking in the discussion, I now propose: 
>
> Existing Name                  Proposed Name
> --------------------------     -------------------
> json_array_length()             length()
> json_each()                     each_json()
> json_each_as_text()             each_text()
> json_get()                      get_json()
> json_get_as_text()              get_text()
> json_get_path()                 get_path_json()
> json_get_path_as_text()         get_path_text()
> json_object_keys()              get_keys()
> json_populate_record()          to_record()
> json_populate_recordset()       to_records()
> json_unnest()                   get_values()
> json_agg()                      json_agg()
>
> I still prefer to_record() and to_records() to populate_record(). It just feels more like a cast to me. I dislike
json_agg(),but assume we're stuck with it. 
>
> But at this point, I’m happy to leave Andrew to it. The functionality is awesome.


Agreed: +1 to your thoughts here.  But also +1 to the originals and +1
to Robert's point of view also.   This feature is of huge strategic
importance to the project and we need to lock this down and commit it. There is a huge difference between "i slightly
prefersome different 
names" and "the feature has issues".

So, i think the various positions are clear: this is one argument i'd
be happy to lose (or win).

merlin



pgsql-hackers by date:

Previous
From: Stephen Frost
Date:
Subject: Re: Optimizing pglz compressor
Next
From: Daniel Farina
Date:
Subject: Re: Enabling Checksums