Hi Štefan,

The constraint names are to be referenced when altering tables.

I like the option you proposed to completely overwrite the column
constraints during table alterations, removing the need to declare
constraint names. It simplifies the constraint definition.

To iterate on the use case of dropping constraints of a column entirely,
the following might read clearer.

ALTER TABLE ks.table DROP CONSTRAINTS ON column_name;


To patch the constraints on a column, what you proposed makes perfect sense
to me.

- Yifan

On Fri, Oct 25, 2024 at 9:27 AM Štefan Miklošovič <smikloso...@apache.org>
wrote:

> I think you need to name the constraints because you want to do something
> like this, correct?
>
>     ALTER TABLE keyspace.table ALTER CONSTRAINT [name] CHECK (condition)
>
> But that is only necessary when there are multiple constraints on a column
> and you want to alter either / both of them.
>
> If we had this syntax:
>
>     CREATE TABLE ks.tb (id int, a int CONSTRAINED WITH a > 10);
>
> Then you can alter without name like this:
>
>     ALTER TABLE ks.tb ALTER a CONSTRAINED WITH a > 10;
>     ALTER TABLE ks.tb ALTER a CONSTRAINED WITH a > 10 AND a < 15;
>
> And we can drop it like this:
>
>     ALTER TABLE keyspace.table DROP CONSTRAINT a;
>
> If we have two constraints like this:
>
>     CREATE TABLE ks.tb (id int, a int CONSTRAINED WITH a > 10 AND a < 20);
>
> Then it is true that doing this
>
>     ALTER TABLE keyspace.table DROP CONSTRAINT a;
>
> would drop BOTH of them. Yes. But on the other hand, I am not sure we can
> justify the alternation on _individual_ constraints by adding complexity.
> Who is actually going to alter just one constraint / part of it anyway?
>
> If I had this:
>
>     CREATE TABLE ks.tb (id int, a int CONSTRAINED WITH a > 10 AND a < 20);
>
> And I wanted to have just a > 10 and drop a < 20 then I would do:
>
>     ALTER TABLE ks.tb ALTER a CONSTRAINED WITH a > 10;
>
> Instead of
>
>     ALTER TABLE keyspace.table DROP CONSTRAINT
> some_name_for_a_lower_than_20;
>
> On Fri, Oct 25, 2024 at 5:18 PM Štefan Miklošovič <smikloso...@apache.org>
> wrote:
>
>> Thinking about this more ..
>>
>> CREATE TABLE rgb ( name text PRIMARY KEY, r int CONSTRAINED WITH
>> r_value_range_lower_bound CHECK r >= 0 AND r_value_range_upper_bound
>> CHECK r < 256, ... );
>>
>> What about this:
>>
>> CREATE TABLE rgb ( name text PRIMARY KEY, r int CONSTRAINED WITH r >= 0
>> AND r < 256, ... );
>>
>> Why do we need to have names and CHECK after all? I am sorry if this was
>> already answered and I am glad to be educated in this area.
>>
>> Regards
>>
>> On Fri, Oct 25, 2024 at 5:13 PM Štefan Miklošovič <smikloso...@apache.org>
>> wrote:
>>
>>> 1.1.
>>> CONSTRAINED WITH is good for me
>>>
>>> 1.2
>>> I prefer 1.1. approach.
>>>
>>> 2.
>>> I am for explicit names over generated ones. I think that the only names
>>> which are generated are names for indexes when not specified.
>>>
>>> 3. I am OK with the exclusion. This is an interesting problem. If
>>> somebody wants these two to be constrained and checked then I guess the
>>> solution would be to have them both in a tuple instead of in two different
>>> columns. So we do not need to support this cross-columns feature. However,
>>> I am not sure how we would go around checking tuples. Is that covered? We
>>> would need to find a way how to reference that
>>>
>>> create table a_table (int id, a_tuple tuple<int, int>, CONSTRAINT
>>> a_tuple_constraint CHECK (a_tuple.1 != a_tuple.2)
>>>
>>> or something similar.
>>>
>>> BTW there is nothing about tuples in that CEP yet.
>>>
>>>
>>>
>>> On Fri, Oct 25, 2024 at 12:21 AM Yifan Cai <yc25c...@gmail.com> wrote:
>>>
>>>> Hello, everyone.
>>>>
>>>> I’ve been reviewing the patch for the constraints framework
>>>> <https://github.com/apache/cassandra/pull/3562>, and I believe there
>>>> are several aspects outlined in CEP-42 that warrant reconsideration. I’d
>>>> like to bring these points up for discussion.
>>>> *1. New Reserved Keyword*
>>>>
>>>> The patch introduces a new reserved keyword, "CONSTRAINT." Since
>>>> reserved keywords cannot be used as identifiers unless quoted, this can
>>>> complicate data definition declarations. We should aim to avoid adding new
>>>> reserved keywords where possible. Here are a couple of alternatives:
>>>>
>>>> 1.1 *Inline Constraint Definition*
>>>>
>>>> We could eliminate the keyword "CONSTRAINT." Instead, similar to data
>>>> masking, constraints could be defined using "CONSTRAINED WITH." For
>>>> example, in the following code, r_value_range_lower_bound and
>>>> r_value_range_upper_bound are constraint names, followed immediately
>>>> by their expressions, with multiple constraints connected using "AND".
>>>>
>>>> CREATE TABLE rgb (
>>>>   name text PRIMARY KEY,
>>>>   r int CONSTRAINED WITH r_value_range_lower_bound CHECK r >= 0 AND 
>>>> r_value_range_upper_bound CHECK r < 256,
>>>>   ...
>>>> );
>>>>
>>>> 1.2 *Special Symbol*
>>>>
>>>> Another option is to use a special symbol to differentiate from
>>>> identifiers, such as "@CONSTRAINT." However, since there is currently no
>>>> annotation-like concept in CQL, this might confuse users.
>>>>
>>>> CREATE TABLE rgb (
>>>>   name text PRIMARY KEY,
>>>>   r int,
>>>>   ...
>>>>   @CONSTRAINT r_value_range_lower_bound CHECK r >= 0,
>>>>   @CONSTRAINT r_value_range_upper_bound CHECK r < 256,
>>>>   ...
>>>> );
>>>>
>>>> *2. Constraint Name*
>>>>
>>>> CEP-42 states, "Name of the constraint is optional. If it is not
>>>> provided, a name is generated for the constraint."
>>>>
>>>> However, based on the actual statements defining constraints, I believe
>>>> names should be *mandatory* for clarity and usability.
>>>> System-generated names often lack descriptiveness.
>>>> *3. Cross-Column Constraints*
>>>>
>>>> CEP-42 proposes allowing constraints that compare multiple columns. For
>>>> example,
>>>>
>>>> CREATE TABLE keyspace.table (
>>>>   p1 int,
>>>>   p2 int,
>>>>   ...,
>>>>   CONSTRAINT [name] CHECK (p1 != p2)
>>>> );
>>>>
>>>> Such constraints can be problematic due to their referential nature.
>>>> Consider scenarios where column p2 is dropped, or when insert/update
>>>> operations include only partial values (e.g., only inserting p1).
>>>> Should the query result in a read (before write), or should it fail due to
>>>> incomplete values?
>>>>
>>>> For simplicity, I propose that, at least for the initial iteration, we
>>>> exclude support for cross-column constraints. In other words, constraints
>>>> should only check the values of individual columns.
>>>>
>>>> - Yifan
>>>>
>>>> On Thu, Sep 19, 2024 at 11:46 AM Patrick McFadin <pmcfa...@gmail.com>
>>>> wrote:
>>>>
>>>>> Thanks for the update. My inbox search failed me :D
>>>>>
>>>>> On Thu, Sep 19, 2024 at 11:31 AM Bernardo Botella <
>>>>> conta...@bernardobotella.com> wrote:
>>>>>
>>>>>> Hi Patrick,
>>>>>>
>>>>>> Thanks for taking a look at this and keeping the house tidy.
>>>>>>
>>>>>> I announced the voting results on a sepparate thread:
>>>>>> lists.apache.org
>>>>>> <https://lists.apache.org/thread/v73cwc8p80xx7zpkldjq6w1qrkf2k9h0>
>>>>>> [image: favicon.ico]
>>>>>> <https://lists.apache.org/thread/v73cwc8p80xx7zpkldjq6w1qrkf2k9h0>
>>>>>> <https://lists.apache.org/thread/v73cwc8p80xx7zpkldjq6w1qrkf2k9h0>
>>>>>>
>>>>>> As a follow up, this is not stalled, and I’m currently working on a
>>>>>> patch that will be soon available for review.
>>>>>>
>>>>>> Thanks,
>>>>>> Bernardo
>>>>>>
>>>>>>
>>>>>> On Sep 19, 2024, at 11:20 AM, Patrick McFadin <pmcfa...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> I'm going to cap this thread. Vote passes with no binding -1s.
>>>>>>
>>>>>> On Tue, Jul 2, 2024 at 2:25 PM Jordan West <jorda...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> +1
>>>>>>>
>>>>>>> On Tue, Jul 2, 2024 at 12:15 Francisco Guerrero <fran...@apache.org>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> +1
>>>>>>>>
>>>>>>>> On 2024/07/02 18:45:33 Josh McKenzie wrote:
>>>>>>>> > +1
>>>>>>>> >
>>>>>>>> > On Tue, Jul 2, 2024, at 1:18 PM, Abe Ratnofsky wrote:
>>>>>>>> > > +1 (nb)
>>>>>>>> > >
>>>>>>>> > >> On Jul 2, 2024, at 12:15 PM, Yifan Cai <yc25c...@gmail.com>
>>>>>>>> wrote:
>>>>>>>> > >>
>>>>>>>> > >> +1 on CEP-42.
>>>>>>>> > >>
>>>>>>>> > >> - Yifan
>>>>>>>> > >>
>>>>>>>> > >> On Tue, Jul 2, 2024 at 5:17 AM Jon Haddad <j...@jonhaddad.com>
>>>>>>>> wrote:
>>>>>>>> > >>> +1
>>>>>>>> > >>>
>>>>>>>> > >>> On Tue, Jul 2, 2024 at 5:06 AM <shailajako...@icloud.com>
>>>>>>>> wrote:
>>>>>>>> > >>>> +1
>>>>>>>> > >>>>
>>>>>>>> > >>>>
>>>>>>>> > >>>>> On Jul 1, 2024, at 8:34 PM, Doug Rohrer <droh...@apple.com>
>>>>>>>> wrote:
>>>>>>>> > >>>>>
>>>>>>>> > >>>>> +1 (nb) - Thanks for all of the suggestions and Bernardo
>>>>>>>> for wrangling the CEP into shape!
>>>>>>>> > >>>>>
>>>>>>>> > >>>>> Doug
>>>>>>>> > >>>>>
>>>>>>>> > >>>>>> On Jul 1, 2024, at 3:06 PM, Dinesh Joshi <
>>>>>>>> djo...@apache.org> wrote:
>>>>>>>> > >>>>>>
>>>>>>>> > >>>>>> +1
>>>>>>>> > >>>>>>
>>>>>>>> > >>>>>> On Mon, Jul 1, 2024 at 11:58 AM Ariel Weisberg <
>>>>>>>> ar...@weisberg.ws> wrote:
>>>>>>>> > >>>>>>> __
>>>>>>>> > >>>>>>> Hi,
>>>>>>>> > >>>>>>>
>>>>>>>> > >>>>>>> I am +1 on CEP-42 with the latest updates to the CEP to
>>>>>>>> clarify syntax, error messages, constraint naming and generated naming,
>>>>>>>> alter/drop, describe etc.
>>>>>>>> > >>>>>>>
>>>>>>>> > >>>>>>> I think this now tracks very closely to how other SQL
>>>>>>>> databases define constraints and the syntax is easily extensible to
>>>>>>>> multi-column and multi-table constraints.
>>>>>>>> > >>>>>>>
>>>>>>>> > >>>>>>> Ariel
>>>>>>>> > >>>>>>>
>>>>>>>> > >>>>>>> On Mon, Jul 1, 2024, at 9:48 AM, Bernardo Botella wrote:
>>>>>>>> > >>>>>>>> With all the feedback that came in the discussion thread
>>>>>>>> after the call for votes, I’d like to extend the period another 72 
>>>>>>>> hours
>>>>>>>> starting today.
>>>>>>>> > >>>>>>>>
>>>>>>>> > >>>>>>>> As before, a vote passes if there are at least 3 binding
>>>>>>>> +1s and no binding vetoes.
>>>>>>>> > >>>>>>>>
>>>>>>>> > >>>>>>>> Thanks,
>>>>>>>> > >>>>>>>> Bernardo Botella
>>>>>>>> > >>>>>>>>
>>>>>>>> > >>>>>>>>> On Jun 24, 2024, at 7:17 AM, Bernardo Botella <
>>>>>>>> conta...@bernardobotella.com> wrote:
>>>>>>>> > >>>>>>>>>
>>>>>>>> > >>>>>>>>> Hi everyone,
>>>>>>>> > >>>>>>>>>
>>>>>>>> > >>>>>>>>> I would like to start the voting for CEP-42.
>>>>>>>> > >>>>>>>>>
>>>>>>>> > >>>>>>>>> Proposal:
>>>>>>>> https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-42%3A+Constraints+Framework
>>>>>>>> > >>>>>>>>> Discussion:
>>>>>>>> https://lists.apache.org/thread/xc2phmxgsc7t3y9b23079vbflrhyyywj
>>>>>>>> > >>>>>>>>>
>>>>>>>> > >>>>>>>>> The vote will be open for 72 hours. A vote passes if
>>>>>>>> there are at least 3 binding +1s and no binding vetoes.
>>>>>>>> > >>>>>>>>>
>>>>>>>> > >>>>>>>>> Thanks,
>>>>>>>> > >>>>>>>>> Bernardo Botella
>>>>>>>> > >>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>

Attachment: favicon.ico
Description: Binary data

Reply via email to