Ignite SQL: How to drop table without explicit cache name

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Ignite SQL: How to drop table without explicit cache name

Nikolay Izhikov-2
Hello, guys.

I working on support of saving Spark DataFrame to Ignite [1].

I want to execute "DROP TABLE XXX" query.
To execute some SQL query in regulary way one need some cache.
That cache has to differs from table cache to execute "DROP TABLE" successfully.

I founded 3 different ways to execute SQL query without explicit cache name.
Please, tell me which way is right?
Do we need all 3 way to make a query?

1. JdbcRequestHandler - [2]

```

    private final GridKernalContext ctx;
...
    List<FieldsQueryCursor<List<?>>> results = ctx.query().querySqlFields(qry, true, protocolVer.compareTo(VER_2_3_0) < 0);

```

2. GridCacheProcessor - [3]

```

    /**
    * Gets public cache that can be used for query execution.
    * If cache isn't created on current node it will be started.
    */
    public IgniteCacheProxy<?, ?> getOrStartPublicCache(boolean start, boolean inclLoc) throws IgniteCheckedException {

```

3. QueryCommandHandler - [4]

```

        protected static final String DFLT_CACHE_NAME = "default";
...
        String cacheName = req.cacheName() == null ? DFLT_CACHE_NAME : req.cacheName();

```


[1] https://issues.apache.org/jira/browse/IGNITE-7337
[2] https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/odbc/jdbc/JdbcRequestHandler.java#L310
[3] https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java#L1648 
[4] https://github.com/apache/ignite/blob/master/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java#L318

signature.asc (465 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Ignite SQL: How to drop table without explicit cache name

Valentin Kulichenko
Nikolay,

I believe the first option is the way to go. However, I'd also like to hear
from other community members.

Vladimir, Alex P, can you comment on this? I know we currently don't have
public API to execute DDL statement without having a cache. However, looks
like we use private API of GridQueryProcessor to overcome this in JDBC
drivers and Web Console. We now need a similar solution for data frames
integration, can you confirm that we're moving in the right direction?

-Val

On Thu, Feb 1, 2018 at 4:04 AM, Nikolay Izhikov <[hidden email]> wrote:

> Hello, guys.
>
> I working on support of saving Spark DataFrame to Ignite [1].
>
> I want to execute "DROP TABLE XXX" query.
> To execute some SQL query in regulary way one need some cache.
> That cache has to differs from table cache to execute "DROP TABLE"
> successfully.
>
> I founded 3 different ways to execute SQL query without explicit cache
> name.
> Please, tell me which way is right?
> Do we need all 3 way to make a query?
>
> 1. JdbcRequestHandler - [2]
>
> ```
>
>     private final GridKernalContext ctx;
> ...
>     List<FieldsQueryCursor<List<?>>> results = ctx.query().querySqlFields(qry,
> true, protocolVer.compareTo(VER_2_3_0) < 0);
>
> ```
>
> 2. GridCacheProcessor - [3]
>
> ```
>
>     /**
>     * Gets public cache that can be used for query execution.
>     * If cache isn't created on current node it will be started.
>     */
>     public IgniteCacheProxy<?, ?> getOrStartPublicCache(boolean start,
> boolean inclLoc) throws IgniteCheckedException {
>
> ```
>
> 3. QueryCommandHandler - [4]
>
> ```
>
>         protected static final String DFLT_CACHE_NAME = "default";
> ...
>         String cacheName = req.cacheName() == null ? DFLT_CACHE_NAME :
> req.cacheName();
>
> ```
>
>
> [1] https://issues.apache.org/jira/browse/IGNITE-7337
> [2] https://github.com/apache/ignite/blob/master/modules/
> core/src/main/java/org/apache/ignite/internal/processors/
> odbc/jdbc/JdbcRequestHandler.java#L310
> [3] https://github.com/apache/ignite/blob/master/modules/
> core/src/main/java/org/apache/ignite/internal/processors/
> cache/GridCacheProcessor.java#L1648
> [4] https://github.com/apache/ignite/blob/master/modules/
> core/src/main/java/org/apache/ignite/internal/processors/
> rest/handlers/query/QueryCommandHandler.java#L318
Reply | Threaded
Open this post in threaded view
|

Re: Ignite SQL: How to drop table without explicit cache name

al.psc
Guys,

Right, first option is the way to go. Options 2 and 3 are surrogates
that do not free you from concept of cache but rather allow you to
obtain one.

I believe in near future we'll propose public API for cacheless queries.

- Alex

2018-02-01 19:38 GMT+03:00 Valentin Kulichenko <[hidden email]>:

> Nikolay,
>
> I believe the first option is the way to go. However, I'd also like to hear
> from other community members.
>
> Vladimir, Alex P, can you comment on this? I know we currently don't have
> public API to execute DDL statement without having a cache. However, looks
> like we use private API of GridQueryProcessor to overcome this in JDBC
> drivers and Web Console. We now need a similar solution for data frames
> integration, can you confirm that we're moving in the right direction?
>
> -Val
>
> On Thu, Feb 1, 2018 at 4:04 AM, Nikolay Izhikov <[hidden email]> wrote:
>
>> Hello, guys.
>>
>> I working on support of saving Spark DataFrame to Ignite [1].
>>
>> I want to execute "DROP TABLE XXX" query.
>> To execute some SQL query in regulary way one need some cache.
>> That cache has to differs from table cache to execute "DROP TABLE"
>> successfully.
>>
>> I founded 3 different ways to execute SQL query without explicit cache
>> name.
>> Please, tell me which way is right?
>> Do we need all 3 way to make a query?
>>
>> 1. JdbcRequestHandler - [2]
>>
>> ```
>>
>>     private final GridKernalContext ctx;
>> ...
>>     List<FieldsQueryCursor<List<?>>> results = ctx.query().querySqlFields(qry,
>> true, protocolVer.compareTo(VER_2_3_0) < 0);
>>
>> ```
>>
>> 2. GridCacheProcessor - [3]
>>
>> ```
>>
>>     /**
>>     * Gets public cache that can be used for query execution.
>>     * If cache isn't created on current node it will be started.
>>     */
>>     public IgniteCacheProxy<?, ?> getOrStartPublicCache(boolean start,
>> boolean inclLoc) throws IgniteCheckedException {
>>
>> ```
>>
>> 3. QueryCommandHandler - [4]
>>
>> ```
>>
>>         protected static final String DFLT_CACHE_NAME = "default";
>> ...
>>         String cacheName = req.cacheName() == null ? DFLT_CACHE_NAME :
>> req.cacheName();
>>
>> ```
>>
>>
>> [1] https://issues.apache.org/jira/browse/IGNITE-7337
>> [2] https://github.com/apache/ignite/blob/master/modules/
>> core/src/main/java/org/apache/ignite/internal/processors/
>> odbc/jdbc/JdbcRequestHandler.java#L310
>> [3] https://github.com/apache/ignite/blob/master/modules/
>> core/src/main/java/org/apache/ignite/internal/processors/
>> cache/GridCacheProcessor.java#L1648
>> [4] https://github.com/apache/ignite/blob/master/modules/
>> core/src/main/java/org/apache/ignite/internal/processors/
>> rest/handlers/query/QueryCommandHandler.java#L318