You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by Nikolay Izhikov <ni...@apache.org> on 2018/02/01 12:04:38 UTC

Ignite SQL: How to drop table without explicit cache name

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

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

Posted by Alexander Paschenko <al...@gmail.com>.
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 <va...@gmail.com>:
> 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 <ni...@apache.org> 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

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

Posted by Valentin Kulichenko <va...@gmail.com>.
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 <ni...@apache.org> 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