The problem is that when I do this minimal CQL which shows this feature:

CREATE TABLE ks.tb_copy LIKE ks.tb;

then you are saying that when I _do not_ specify WITH OPTIONS then I get
Cassandra's defaults. Only after I specify WITH OPTIONS, it would truly be
a copy.

This is not a good design. Because to have an exact copy, I have to make a
conscious effort to include OPTIONS as well. That should not be the case. I
just want to have a copy, totally the same stuff, when I use the minimal
version of that statement. It would be better to opt-out from options like

CREATE TABLE ks.tb_copy LIKE ks.tb WITHOUT OPTIONS (you feel me) but we do
not support this (yet).

On Tue, Oct 22, 2024 at 5:28 PM Štefan Miklošovič <smikloso...@apache.org>
wrote:

> I just don't see OPTIONS as important. When I want to copy a table, I am
> copying a table _with everything_. Options included, by default. Why would
> I want to have a copy of a table with options different from the base one?
>
>
> On Mon, Oct 21, 2024 at 3:55 PM Bernardo Botella <
> conta...@bernardobotella.com> wrote:
>
>> Hi Guo,
>>
>> +1 for the CONSTRAINTS keyword to be added into the default behavior.
>>
>> Bernardo
>>
>> On Oct 21, 2024, at 12:01 AM, guo Maxwell <cclive1...@gmail.com> wrote:
>>
>> I think the CONSTRAINTS keyword  keyword may be in the same situation as
>> datamask.
>> Maybe it is better to include  constraints into  the default behavior of
>> table copy together with column name, column data type and data mask.
>>
>> guo Maxwell <cclive1...@gmail.com> 于2024年10月21日周一 14:56写道:
>>
>>> To yifan :
>>> I don't mind adding the ALL keyword, and it has been updated into CEP.
>>>
>>> As all you can see, our original intention was that the grammar would
>>> not be too complicated, which is what I described in cep
>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-43++Apache+Cassandra+CREATE+TABLE++LIKE>
>>> .
>>> We gave up PG-related grammar, including INCLUDING/EXCLUDING and so on .
>>>
>>> guo Maxwell <cclive1...@gmail.com> 于2024年10月21日周一 14:52写道:
>>>
>>>> Hi ,
>>>> To sefan :
>>>> I may want to explain that if there is no OPTION keyword in the CQL
>>>> statement, then the newly created table will only have the
>>>> original table's  column name 、column type and data mask ,I think this is
>>>> the most basic choice when copying tables to users.
>>>> Then  we do some  addition, we can add original table's table options
>>>> like compaction strategy/compress strategy、index and so on.
>>>>
>>>> Recently, I have also thought about the situation of CONSTRAINTS
>>>> keyword. I think it is similar to data mask. Agree that it should be
>>>> included in the basic options of  table copy (column name, column data type
>>>> , column data mask and constraints).
>>>>
>>>> Dave Herrington <he...@rhinosource.com> 于2024年10月19日周六 01:15写道:
>>>>
>>>>> It seems like a natural extension of the CREATE TABLE statement.
>>>>> Looking forward to using it in the future.
>>>>>
>>>>> -Dave
>>>>>
>>>>> On Thu, Oct 17, 2024 at 5:11 PM Štefan Miklošovič <
>>>>> smikloso...@apache.org> wrote:
>>>>>
>>>>>> Right?! Reads like English, the impact on the existing CQL is
>>>>>> minimal. One LIKE which basically needs to be there and keywords of 
>>>>>> logical
>>>>>> "components" which seamlessly integrate with WITH.
>>>>>>
>>>>>> I would _not_ use WITH CONSTRAINTS because constraints will be
>>>>>> inherently part of a table schema. It is not an "option". We can not
>>>>>> "opt-out" from them. Remember we are copying a table here so if a base 
>>>>>> one
>>>>>> has constraints, its copy will have them too. A user can subsequently
>>>>>> "ALTER" them.
>>>>>>
>>>>>> On Thu, Oct 17, 2024 at 5:31 PM Dave Herrington <
>>>>>> he...@rhinosource.com> wrote:
>>>>>>
>>>>>>> Basing it on CREATE TABLE, the BNF definition of the simple
>>>>>>> implementation would look something like this:
>>>>>>>
>>>>>>> create_table_statement::= CREATE TABLE [ IF NOT EXISTS ] table_name
>>>>>>> LIKE base_table_name
>>>>>>> [ WITH included_objects ] [ [ AND ] table_options ]
>>>>>>> table_options::= COMPACT STORAGE [ AND table_options ]
>>>>>>> | CLUSTERING ORDER BY '(' clustering_order ')'
>>>>>>> [ AND table_options ]  | options
>>>>>>> clustering_order::= column_name (ASC | DESC) ( ',' column_name (ASC
>>>>>>> | DESC) )*
>>>>>>> included_objects::= dependent_objects [ AND dependent_objects ]
>>>>>>> dependent_objects:= INDEXES | TRIGGERS | CONSTRAINTS | VIEWS
>>>>>>>
>>>>>>>
>>>>>>> CREATE TABLE [ IF NOT EXISTS ] [<keyspace_name>.]<table_name> LIKE
>>>>>>> [<keyspace_name>.]<base_table_name>
>>>>>>>   [ WITH [ <included_objects > ]
>>>>>>>   [ [ AND ] [ <table_options> ] ]
>>>>>>>   [ [ AND ] CLUSTERING ORDER BY [ <clustering_column_name> (ASC |
>>>>>>> DESC) ] ]
>>>>>>> ;
>>>>>>>
>>>>>>> Examples:
>>>>>>>
>>>>>>> -- Create base table:
>>>>>>> CREATE TABLE cycling.cyclist_name (
>>>>>>>   id UUID PRIMARY KEY,
>>>>>>>   lastname text,
>>>>>>>   firstname text
>>>>>>> );
>>>>>>>
>>>>>>> -- Create an exact copy of the base table, but do not create any
>>>>>>> dependent objects:
>>>>>>> CREATE TABLE cycling.cyclist_name2 LIKE cycling.cyclist_name;
>>>>>>>
>>>>>>> -- Create an exact copy with all dependent objects (constraints
>>>>>>> excluded for now):
>>>>>>> CREATE TABLE cycling.cyclist_name3 LIKE cycling.cyclist_name
>>>>>>> WITH INDEXES AND TRIGGERS AND VIEWS;
>>>>>>>
>>>>>>> -- Create a copy with LCS compaction, a default TTL and all
>>>>>>> dependent objects except indexes:
>>>>>>> CREATE TABLE cycling.cyclist_name4 LIKE cycling.cyclist_name
>>>>>>> WITH TRIGGERS AND VIEWS
>>>>>>> AND compaction = { 'class' :  'LeveledCompactionStrategy' }
>>>>>>> AND default_time_to_live = 86400;
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> This seems pretty clean & straightforward.
>>>>>>>
>>>>>>> -Dave
>>>>>>>
>>>>>>> On Thu, Oct 17, 2024 at 4:05 PM Dave Herrington <
>>>>>>> he...@rhinosource.com> wrote:
>>>>>>>
>>>>>>>> This simple approach resonates with me.  I think the Cassandra doc
>>>>>>>> uses "INDEXES" as the plural for index, i.e.:
>>>>>>>> https://cassandra.apache.org/doc/stable/cassandra/cql/indexes.html
>>>>>>>>
>>>>>>>> -Dave
>>>>>>>>
>>>>>>>> On Thu, Oct 17, 2024 at 2:39 PM Štefan Miklošovič <
>>>>>>>> smikloso...@apache.org> wrote:
>>>>>>>>
>>>>>>>>> Well we could do something like:
>>>>>>>>>
>>>>>>>>> CREATE TABLE ks.tb_copy LIKE ks.tb WITH INDICES AND TRIGGERS AND
>>>>>>>>> compaction = {'class': '.... } AND ...
>>>>>>>>>
>>>>>>>>> but I can admit it might be seen as an overreach and I am not sure
>>>>>>>>> at all how it would look like in the implementation because we would 
>>>>>>>>> need
>>>>>>>>> to distinguish WITH INDICES from table options.
>>>>>>>>>
>>>>>>>>> I would
>>>>>>>>>
>>>>>>>>>    1. +0 on ALL. - we don't need this. If we have just INDICES,
>>>>>>>>>    TRIGGERS, VIEWS at this point, I don't think enumerating it all is 
>>>>>>>>> too much
>>>>>>>>>    to ask. This is just an implementation detail and if we find it 
>>>>>>>>> necessary
>>>>>>>>>    we can add it later. If you feel strongly about this then add that 
>>>>>>>>> but it
>>>>>>>>>    is not absolutely necessary.
>>>>>>>>>    2. omit OPTIONS - aren't all options copied by default? That
>>>>>>>>>    is the goal of the CEP, no? We might just use normal CQL while
>>>>>>>>>    overriding from the base table
>>>>>>>>>    3. mix keywords like TRIGGERS / INDICES / CONSTRAINTS into
>>>>>>>>>    normal table creation statement
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Oct 17, 2024 at 3:20 PM Yifan Cai <yc25c...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> I would second Štefan's option for functionality simplicity. It
>>>>>>>>>> seems to be unnecessary to have the keywords for both inclusion and
>>>>>>>>>> exclusion in the CEP. If needed, the exclusion (WITHOUT) can be 
>>>>>>>>>> introduced
>>>>>>>>>> later. It would still be backward compatible.
>>>>>>>>>>
>>>>>>>>>> Regarding "CREATE TABLE ks.tb_copy LIKE ks.tb WITH compaction =
>>>>>>>>>> {'class': '.... } AND ... ", I think it only overrides the table 
>>>>>>>>>> options.
>>>>>>>>>> The CEP suggests the coarse-grained keyword for each category like 
>>>>>>>>>> table
>>>>>>>>>> options, indexes, etc. The functionality provided is not identical.
>>>>>>>>>>
>>>>>>>>>> I understand that the suggestions are to make operators' life
>>>>>>>>>> easier by achieving table creation in a single statement. What is 
>>>>>>>>>> being
>>>>>>>>>> proposed in the CEP seems to be at a good balance point. Operators 
>>>>>>>>>> can
>>>>>>>>>> alter the table options if needed in the follow-up ALTER table 
>>>>>>>>>> statement.
>>>>>>>>>>
>>>>>>>>>> - Yifan
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Thu, Oct 17, 2024 at 1:41 PM Štefan Miklošovič <
>>>>>>>>>> smikloso...@apache.org> wrote:
>>>>>>>>>>
>>>>>>>>>>> I think we are starting to complicate it. For me the most
>>>>>>>>>>> important question is who is actually this feature for? If people 
>>>>>>>>>>> want to
>>>>>>>>>>> just prototype something fast or they just want to have "the same 
>>>>>>>>>>> table
>>>>>>>>>>> just under a different name", I think that is going to be used in 
>>>>>>>>>>> 99% of
>>>>>>>>>>> cases.
>>>>>>>>>>>
>>>>>>>>>>> My assumption of using WITH which I think I proposed first (4th
>>>>>>>>>>> post in this thread) was to just blindly copy the most important 
>>>>>>>>>>> "parts"
>>>>>>>>>>> logically related to a table, be it indices, materialized views, or
>>>>>>>>>>> triggers and enable / disable them as we wish. If no "WITH" is 
>>>>>>>>>>> used, then
>>>>>>>>>>> we just get a table with nothing else. "WITH" will opt-in into that.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Seeing us contemplating using "INCLUDING" and "EXCLUDING" on
>>>>>>>>>>> individual options makes me sad a little bit. I think we are
>>>>>>>>>>> over-engineering this. I just don't see a reasonable use-case where 
>>>>>>>>>>> users
>>>>>>>>>>> would need to cherry-pick what they want and what not. Isn't that 
>>>>>>>>>>> just too
>>>>>>>>>>> complicated? If a table being copied drifts away too much from the 
>>>>>>>>>>> original
>>>>>>>>>>> one then users would be better off with creating a brand new table 
>>>>>>>>>>> with CQL
>>>>>>>>>>> as they are used to, not dealing with "copying" at all. More we 
>>>>>>>>>>> drift from
>>>>>>>>>>> what the original table was like, the less useful this feature is.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Oct 16, 2024 at 10:03 PM Dave Herrington <
>>>>>>>>>>> he...@rhinosource.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Sorry that I overlooked the definition of the default in the
>>>>>>>>>>>> CEP.  I did look for it but I didn’t see it.
>>>>>>>>>>>>
>>>>>>>>>>>> I think the default behavior you explained makes perfect sense
>>>>>>>>>>>> & what one would expect.
>>>>>>>>>>>>
>>>>>>>>>>>> I like the flexibility of INCLUDING and EXCLUDING that you are
>>>>>>>>>>>> considering.
>>>>>>>>>>>>
>>>>>>>>>>>> Would it make sense to use WITH for table options, which would
>>>>>>>>>>>> make it easy (and less confusing IMHO) to override the defaults 
>>>>>>>>>>>> from the
>>>>>>>>>>>> source table, then use INCLUDING/EXCLUDING for all non-table 
>>>>>>>>>>>> options such
>>>>>>>>>>>> as constraints and indices?
>>>>>>>>>>>>
>>>>>>>>>>>> It seems this would be easier to document as well, as it could
>>>>>>>>>>>> just point to the CREATE TABLE doc for the options, rather than 
>>>>>>>>>>>> trying to
>>>>>>>>>>>> explain a bunch of keywords that map to table options.
>>>>>>>>>>>>
>>>>>>>>>>>> -Dave
>>>>>>>>>>>>
>>>>>>>>>>>> David A. Herrington II
>>>>>>>>>>>> President and Chief Engineer
>>>>>>>>>>>> RhinoSource, Inc.
>>>>>>>>>>>>
>>>>>>>>>>>> *Data Lake Architecture, Cloud Computing and Advanced
>>>>>>>>>>>> Analytics.*
>>>>>>>>>>>>
>>>>>>>>>>>> www.rhinosource.com
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Wed, Oct 16, 2024 at 7:57 PM guo Maxwell <
>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> To yifan :
>>>>>>>>>>>>> At the beginning of the period, I also thought about adding
>>>>>>>>>>>>> the keyword ALL, refer to pg
>>>>>>>>>>>>> <https://www.postgresql.org/docs/current/sql-createtable.html> ,
>>>>>>>>>>>>> but  I give up when writing cep as I find that there may be not 
>>>>>>>>>>>>> so many
>>>>>>>>>>>>> properties (only three) to copy for C* and
>>>>>>>>>>>>> It is possible to decide what is needed and what is not in a
>>>>>>>>>>>>> very simple cql, as our ALL is only three properties here. I want 
>>>>>>>>>>>>> to keep
>>>>>>>>>>>>> it as simple as possible (based on the advice given by Benjamin), 
>>>>>>>>>>>>> So I
>>>>>>>>>>>>> grouped
>>>>>>>>>>>>> the properties of the table into one category and expressed it
>>>>>>>>>>>>> with OPTION keyword.
>>>>>>>>>>>>>
>>>>>>>>>>>>> But if we are going to split the first keyword OPTION  to
>>>>>>>>>>>>> COMPRESSION 、COMPACTION、COMMENT and so on. I am +1 on adding ALL 
>>>>>>>>>>>>> back as
>>>>>>>>>>>>> the properties are so many and it is simple to use ALL instead of
>>>>>>>>>>>>> list all properties. Besides I may change my keyword WITH to
>>>>>>>>>>>>> INCLUDING and adding another keyword EXCLUDING to flexibly copy 
>>>>>>>>>>>>> table
>>>>>>>>>>>>> properties through simple sql statements, like using   1 not  2
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>    1.  CREATE TABLE newTb like oldTb INCLUDING ALL EXCLUDING
>>>>>>>>>>>>>    INDEXES AND COMMENTS.
>>>>>>>>>>>>>    2.  CREATE TABLE newTb like oldTb INCLUDING COMPRESSION
>>>>>>>>>>>>>    CONSTRAINTS GENERATED IDENTITY STATISTICS STORAGE
>>>>>>>>>>>>>
>>>>>>>>>>>>> Conclusion: If there may be more keywords to consider in the
>>>>>>>>>>>>> future, such as more than 4 , I am +1 on adding ALL back .
>>>>>>>>>>>>>
>>>>>>>>>>>>> To Dave :
>>>>>>>>>>>>>    Default behavior is only copy column name, data type ,data
>>>>>>>>>>>>> mask , you can see more detail from  CEP-43
>>>>>>>>>>>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-43++Apache+Cassandra+CREATE+TABLE++LIKE>
>>>>>>>>>>>>> .
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Patrick McFadin <pmcfa...@gmail.com> 于2024年10月17日周四 06:43写道:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> +1 That makes much more sense in my experience.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Oct 16, 2024 at 12:12 PM Dave Herrington <
>>>>>>>>>>>>>> he...@rhinosource.com> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I'm coming at this with both a deep ANSI SQL background as
>>>>>>>>>>>>>>> well as CQL background.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Defining the default behavior is the starting point.  What
>>>>>>>>>>>>>>> gets copied if we do "CREATE TABLE new_table LIKE 
>>>>>>>>>>>>>>> original_table;" without
>>>>>>>>>>>>>>> a WITH clause?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Then, you build on that with the specific WITH options.
>>>>>>>>>>>>>>> WITH ALL catches everything.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> On Wed, Oct 16, 2024 at 11:16 AM Yifan Cai <
>>>>>>>>>>>>>>> yc25c...@gmail.com> wrote:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> "WITH ALL" seems to be a natural addition to the
>>>>>>>>>>>>>>>> directives. What do you think about adding the fifth keyword 
>>>>>>>>>>>>>>>> ALL to retain
>>>>>>>>>>>>>>>> all fields of the table schema?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> For instance, CREATE TABLE new_table LIKE original_table
>>>>>>>>>>>>>>>> WITH ALL, it replicates options, indexes, triggers, 
>>>>>>>>>>>>>>>> constraints and any
>>>>>>>>>>>>>>>> applicable kinds that are introduced in the future.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> - Yifan
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Wed, Oct 16, 2024 at 7:46 AM guo Maxwell <
>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Disscussed with Bernardo on slack,and +1 with his advice
>>>>>>>>>>>>>>>>> on adding a fourth keyword.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> The keyword would be  CONSTRAINTS , any more suggestion ?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> guo Maxwell <cclive1...@gmail.com>于2024年10月16日 周三上午9:55写道:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Hi yifan,
>>>>>>>>>>>>>>>>>> Thanks for bringing this up. The SELECT permission on the
>>>>>>>>>>>>>>>>>> original table is needed. Mysql and PG all have mentioned 
>>>>>>>>>>>>>>>>>> this, and I also
>>>>>>>>>>>>>>>>>> specifically noticed this in my code.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I probably missed this in the cep documentation. 😅
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Yifan Cai <yc25c...@gmail.com> 于2024年10月16日周三 07:46写道:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Thanks for creating the CEP! I think it is missing
>>>>>>>>>>>>>>>>>>> Bernardo's comment on "the need for read permissions on the 
>>>>>>>>>>>>>>>>>>> source table".
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> CreateTableStatement does not check the permissions
>>>>>>>>>>>>>>>>>>> outside of the enclosing keyspace. Having the SELECT 
>>>>>>>>>>>>>>>>>>> permission on the
>>>>>>>>>>>>>>>>>>> original table is a requirement for CREATE TABLE LIKE.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> - Yifan
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Sun, Sep 29, 2024 at 11:01 PM guo Maxwell <
>>>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Hello, everyone ,
>>>>>>>>>>>>>>>>>>>> I have finished the doc for CEP-43 for
>>>>>>>>>>>>>>>>>>>> CREATE_TABLE_LIKE
>>>>>>>>>>>>>>>>>>>> <https://cwiki.apache.org/confluence/display/CASSANDRA/CEP-43++Apache+Cassandra+CREATE+TABLE++LIKE>
>>>>>>>>>>>>>>>>>>>>  as
>>>>>>>>>>>>>>>>>>>> said before, looking forward to your suggestions.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Štefan Miklošovič <smikloso...@apache.org>
>>>>>>>>>>>>>>>>>>>> 于2024年9月25日周三 03:51写道:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> I am sorry I do not follow what you mean, maybe an
>>>>>>>>>>>>>>>>>>>>> example would help.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Tue, Sep 24, 2024 at 6:18 PM guo Maxwell <
>>>>>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> If there are multiple schema information changes in
>>>>>>>>>>>>>>>>>>>>>> one ddl statement, will there be schema conflicts in 
>>>>>>>>>>>>>>>>>>>>>> extreme cases?
>>>>>>>>>>>>>>>>>>>>>> For example, our statement contains both table
>>>>>>>>>>>>>>>>>>>>>> creation and index creation.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> guo Maxwell <cclive1...@gmail.com>于2024年9月24日
>>>>>>>>>>>>>>>>>>>>>> 周二下午8:12写道:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> +1 on splitting this task  and adding the ability to
>>>>>>>>>>>>>>>>>>>>>>> copy tables through different keyspaces in the future.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Štefan Miklošovič <smikloso...@apache.org>
>>>>>>>>>>>>>>>>>>>>>>> 于2024年9月23日周一 22:05写道:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> If we have this table
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> CREATE TABLE ks.tb2 (
>>>>>>>>>>>>>>>>>>>>>>>>     id int PRIMARY KEY,
>>>>>>>>>>>>>>>>>>>>>>>>     name text
>>>>>>>>>>>>>>>>>>>>>>>> );
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> I can either specify name of an index on my own
>>>>>>>>>>>>>>>>>>>>>>>> like this:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> CREATE INDEX name_index ON ks.tb2 (name) ;
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> or I can let Cassandra to figure that name on its
>>>>>>>>>>>>>>>>>>>>>>>> own:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> CREATE INDEX ON ks.tb2 (name) ;
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> in that case it will name that index "tb2_name_idx".
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Hence, I would expect that when we do
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> ALTER TABLE ks.to_copy LIKE ks.tb2 WITH INDICES;
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Then ks.to_copy table will have an index which is
>>>>>>>>>>>>>>>>>>>>>>>> called "to_copy_name_idx" without me doing anything.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> For types, we do not need to do anything when we
>>>>>>>>>>>>>>>>>>>>>>>> deal with the same keyspace. For simplicity, I 
>>>>>>>>>>>>>>>>>>>>>>>> mentioned that we might deal
>>>>>>>>>>>>>>>>>>>>>>>> with the same keyspace scenario only for now and 
>>>>>>>>>>>>>>>>>>>>>>>> iterate on that in the
>>>>>>>>>>>>>>>>>>>>>>>> future.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Sep 23, 2024 at 8:53 AM guo Maxwell <
>>>>>>>>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Hello everyone,
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Cep is being written, and I encountered some
>>>>>>>>>>>>>>>>>>>>>>>>> problems during the process. I would like to discuss 
>>>>>>>>>>>>>>>>>>>>>>>>> them with you. If you
>>>>>>>>>>>>>>>>>>>>>>>>> read the description of this CASSANDRA-7662
>>>>>>>>>>>>>>>>>>>>>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-7662>,
>>>>>>>>>>>>>>>>>>>>>>>>> we will find that initially the original creator of 
>>>>>>>>>>>>>>>>>>>>>>>>> this jira did not
>>>>>>>>>>>>>>>>>>>>>>>>> intend to implement structural copying of indexes, 
>>>>>>>>>>>>>>>>>>>>>>>>> views, and triggers
>>>>>>>>>>>>>>>>>>>>>>>>> only the column and its data type.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> However, after investigating some db related
>>>>>>>>>>>>>>>>>>>>>>>>> syntax and function implementation, I found that it 
>>>>>>>>>>>>>>>>>>>>>>>>> may be necessary for us
>>>>>>>>>>>>>>>>>>>>>>>>> to provide some rich syntax to support the 
>>>>>>>>>>>>>>>>>>>>>>>>> replication of indexes, views,
>>>>>>>>>>>>>>>>>>>>>>>>> etc.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> In order to support selective copy of the basic
>>>>>>>>>>>>>>>>>>>>>>>>> structure of the table (columns and types), table 
>>>>>>>>>>>>>>>>>>>>>>>>> options, table-related
>>>>>>>>>>>>>>>>>>>>>>>>> indexes, views, triggers, etc. We need some new 
>>>>>>>>>>>>>>>>>>>>>>>>> syntax, it seems that the
>>>>>>>>>>>>>>>>>>>>>>>>> syntax of pg is relatively comprehensive, it use the 
>>>>>>>>>>>>>>>>>>>>>>>>> keyword
>>>>>>>>>>>>>>>>>>>>>>>>> INCLUDING/EXCLUDING to flexibly control the removal 
>>>>>>>>>>>>>>>>>>>>>>>>> and retention of
>>>>>>>>>>>>>>>>>>>>>>>>> indexes, table information, etc. see pg create
>>>>>>>>>>>>>>>>>>>>>>>>> table like
>>>>>>>>>>>>>>>>>>>>>>>>> <https://www.postgresql.org/docs/8.1/sql-createtable.html>
>>>>>>>>>>>>>>>>>>>>>>>>> , the new created index name is different from the 
>>>>>>>>>>>>>>>>>>>>>>>>> original table's index
>>>>>>>>>>>>>>>>>>>>>>>>> name , seenewly copied index names are different
>>>>>>>>>>>>>>>>>>>>>>>>> from original
>>>>>>>>>>>>>>>>>>>>>>>>> <https://github.com/postgres/postgres/blob/master/doc/src/sgml/ref/create_table.sgml#L749>
>>>>>>>>>>>>>>>>>>>>>>>>> , the name is based on some rule.
>>>>>>>>>>>>>>>>>>>>>>>>> Mysql is relatively simple and copies columns and
>>>>>>>>>>>>>>>>>>>>>>>>> indexes by default. see mysql create table like
>>>>>>>>>>>>>>>>>>>>>>>>> <https://dev.mysql.com/doc/refman/8.4/en/create-table-like.html>
>>>>>>>>>>>>>>>>>>>>>>>>> and the newly created index name is the same with the 
>>>>>>>>>>>>>>>>>>>>>>>>> original table's
>>>>>>>>>>>>>>>>>>>>>>>>> index name.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> So for Casandra, I hope it can also support the
>>>>>>>>>>>>>>>>>>>>>>>>> information copy of index and even view/trigger. And 
>>>>>>>>>>>>>>>>>>>>>>>>> I also hope to be able
>>>>>>>>>>>>>>>>>>>>>>>>> to flexibly decide which information is copied like 
>>>>>>>>>>>>>>>>>>>>>>>>> pg.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Besides, I think the copy can happen between
>>>>>>>>>>>>>>>>>>>>>>>>> different keyspaces. And UDT needs to be taken into 
>>>>>>>>>>>>>>>>>>>>>>>>> account.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> But as we know the index/view/trigger name are all
>>>>>>>>>>>>>>>>>>>>>>>>> under keyspace level, so it seems that the newly 
>>>>>>>>>>>>>>>>>>>>>>>>> created index name (or
>>>>>>>>>>>>>>>>>>>>>>>>> view name/ trigger name) must be different from the 
>>>>>>>>>>>>>>>>>>>>>>>>> original tables'
>>>>>>>>>>>>>>>>>>>>>>>>> ,otherwise  names would clash .
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> So regarding the above problem, one idea I have is
>>>>>>>>>>>>>>>>>>>>>>>>> that for newly created types, indexes and views under 
>>>>>>>>>>>>>>>>>>>>>>>>> different keyspaces
>>>>>>>>>>>>>>>>>>>>>>>>> and the same keyspace, we first generate random names 
>>>>>>>>>>>>>>>>>>>>>>>>> for them, and then we
>>>>>>>>>>>>>>>>>>>>>>>>> can add the ability of modifying the names(for
>>>>>>>>>>>>>>>>>>>>>>>>> types/indexes/views/triggers) so that users can 
>>>>>>>>>>>>>>>>>>>>>>>>> manually change the names.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> guo Maxwell <cclive1...@gmail.com> 于2024年9月20日周五
>>>>>>>>>>>>>>>>>>>>>>>>> 08:06写道:
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> No,I think still need some discuss on grammar
>>>>>>>>>>>>>>>>>>>>>>>>>> detail after I finish the first version
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>> Patrick McFadin <pmcfa...@gmail.com>于2024年9月20日
>>>>>>>>>>>>>>>>>>>>>>>>>> 周五上午2:24写道:
>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> Is this CEP ready for a VOTE thread?
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>> On Sat, Aug 24, 2024 at 8:56 PM guo Maxwell <
>>>>>>>>>>>>>>>>>>>>>>>>>>> cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Thank you for your replies, I will prepare a
>>>>>>>>>>>>>>>>>>>>>>>>>>>> CEP later.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> Patrick McFadin <pmcfa...@gmail.com>
>>>>>>>>>>>>>>>>>>>>>>>>>>>> 于2024年8月20日周二 02:11写道:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +1 This is a CEP
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Aug 19, 2024 at 10:50 AM Jon Haddad <
>>>>>>>>>>>>>>>>>>>>>>>>>>>>> j...@jonhaddad.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Given the fairly large surface area for this,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> i think it should be a CEP.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> —
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Jon Haddad
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Rustyrazorblade Consulting
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> rustyrazorblade.com
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Aug 19, 2024 at 10:44 AM Bernardo
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Botella <conta...@bernardobotella.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Definitely a nice addition to CQL.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Looking for inspiration at how Postgres and
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Mysql do that may also help with the final 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> design (I like the WITH proposed
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> by Stefan, but I would definitely take a look 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> at the INCLUDING keyword
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> proposed by Postgres).
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> https://www.postgresql.org/docs/current/sql-createtable.html
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> https://dev.mysql.com/doc/refman/8.4/en/create-table-like.html
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On top of that, and as part of the
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> interesting questions, I would like to add the 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> permissions to the mix. Both
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the question about copying them over (with a 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> WITH keyword probably), and
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> the need for read permissions on the source 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> table as well.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Bernardo
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Aug 19, 2024, at 10:01 AM, Štefan
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Miklošovič <smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> BTW this would be cool to do as well:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ALTER TABLE ks.to_copy LIKE ks.tb WITH
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> INDICES;
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> This would mean that if we create a copy of
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> a table, later we can decide that we need 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> indices too, so we might "enrich"
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> that table with indices from the old one 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> without necessarily explicitly
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> re-creating them on that new table.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Aug 19, 2024 at 6:55 PM Štefan
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Miklošovič <smikloso...@apache.org> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> I think this is an interesting idea worth
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> exploring. I definitely agree with Benjamin 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> who raised important questions
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> which needs to be answered first. Also, what 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> about triggers?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> It might be rather "easy" to come up with
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> something simple but it should be a 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> comprehensive solution with predictable
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> behavior we all agree on.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> If a keyspace of a new table does not exist
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> we would need to create that one too before. 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> For the simplicity, I would
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> just make it a must to create it on same 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> keyspace. We might iterate on that
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> in the future.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> UDTs are created per keyspace so there is
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> nothing to re-create. We just need to 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> reference it from a new table, right?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Indexes and MVs are interesting but in
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> theory they might be re-created too.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Would it be appropriate to use something
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> like this?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> CREATE TABLE ks.tb_copy LIKE ks.tb WITH
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> INDEXES AND VIEWS AND TRIGGERS ....
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Without "WITH" it would just copy a table
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> with nothing else.
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> On Mon, Aug 19, 2024 at 6:10 PM guo Maxwell
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <cclive1...@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Hello, everyone:
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> As  Jira CASSANDRA-7662
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <https://issues.apache.org/jira/browse/CASSANDRA-7662>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  has described , we would like to
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> introduce a new grammer " CREATE TABLE LIKE " 
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ,which  simplifies creating
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> new tables duplicating the existing ones .
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> The format may be like : CREATE TABLE
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> <new_table> LIKE <old_table>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Before I implement this function, do you
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> have any suggestions on this?
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Looking forward to your reply!
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>> -Dave
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> David A. Herrington II
>>>>>>>>>>>>>>> President and Chief Engineer
>>>>>>>>>>>>>>> RhinoSource, Inc.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> *Data Lake Architecture, Cloud Computing and Advanced
>>>>>>>>>>>>>>> Analytics.*
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> www.rhinosource.com
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> -Dave
>>>>>>>>
>>>>>>>> David A. Herrington II
>>>>>>>> President and Chief Engineer
>>>>>>>> RhinoSource, Inc.
>>>>>>>>
>>>>>>>> *Data Lake Architecture, Cloud Computing and Advanced Analytics.*
>>>>>>>>
>>>>>>>> www.rhinosource.com
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> -Dave
>>>>>>>
>>>>>>> David A. Herrington II
>>>>>>> President and Chief Engineer
>>>>>>> RhinoSource, Inc.
>>>>>>>
>>>>>>> *Data Lake Architecture, Cloud Computing and Advanced Analytics.*
>>>>>>>
>>>>>>> www.rhinosource.com
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> -Dave
>>>>>
>>>>> David A. Herrington II
>>>>> President and Chief Engineer
>>>>> RhinoSource, Inc.
>>>>>
>>>>> *Data Lake Architecture, Cloud Computing and Advanced Analytics.*
>>>>>
>>>>> www.rhinosource.com
>>>>>
>>>>
>>

Reply via email to