We do not have any constraint names so

ALTER TABLE ks.table DROP CONSTRAINT a;

can not be mistaken for it, but if you insist, this would be better than
the alternative:

ALTER TABLE ks.table DROP CONSTRAINTS ON column_name;

However, that also means that we would have two new reserved words,
CONSTRAINTS and CONSTRAINED

ALTER TABLE ks.table DROP CONSTRAINTS ON column_name;

and

CREATE TABLE ks.tb (id int primary key, a int CONSTRAINED WITH a >= 0 AND a
< 256);

I think that we should strive for having just one form of that.

Maybe this could fly?

CREATE TABLE ks.tb (id int primary key, a int CONSTRAINED WITH a >= 0 AND a
< 256);
ALTER TABLE ks.tb ALTER a CONSTRAINED WITH a > 20 AND a < 300;
ALTER TABLE ks.tb DROP CONSTRAINED ON column_name;

On Fri, Oct 25, 2024 at 9:53 PM Yifan Cai <yc25c...@gmail.com> wrote:

> The identifier "a" in the statement "DROP CONSTRAINT a;" might be mistaken
> for a constraint name.
>
> Revising it to "DROP CONSTRAINTS ON a" more clearly conveys the intent of
> removing all constraints defined on column "a". However, it requires
> CONSTRAINTS to be added to the reserved keywords. I would propose a new
> iteration.
>
> ALTER TABLE ks.table ALTER [IF EXISTS] <column> DROP CONSTRAINTS;
>
>
> Thank you for providing additional examples to illustrate the unnecessity
> of constraint names.
>
> - Yifan
>
> On Fri, Oct 25, 2024 at 11:16 AM Yifan Cai <yc25c...@gmail.com> wrote:
>
>> 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