You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@ignite.apache.org by Stanislav Lukyanov <st...@gmail.com> on 2018/11/29 11:26:05 UTC

RE: some cases (IF NOT EXISTS) in the CREATE TABLE statement does notwork

A bug for this is filed: https://issues.apache.org/jira/browse/IGNITE-10414

Stan

From: Qingping
Sent: 27 ноября 2018 г. 4:26
To: user@ignite.apache.org
Subject: some cases (IF NOT EXISTS) in the CREATE TABLE statement does notwork

====Question=========== 
When testing Ignite 2.6.0 (2018-07-16), it was found that in some cases (IF
NOT EXISTS) in the CREATE TABLE statement does not work.

====[Wrong case]==== 

After the first run is successful, the code will prompt "Table already
exists: CITY" in the next iteration:

java.sql.SQLException: Table already exists: CITY
	at
org.apache.ignite.internal.jdbc.thin.JdbcThinConnection.sendRequest(JdbcThinConnection.java:751)
	at
org.apache.ignite.internal.jdbc.thin.JdbcThinStatement.execute0(JdbcThinStatement.java:210)
	at
org.apache.ignite.internal.jdbc.thin.JdbcThinStatement.executeUpdate(JdbcThinStatement.java:338)
	at ignite.examp.IgniteSQL_Error.main(IgniteSQL_Error.java:47)
---
public class IgniteSQL_Error 
{
	public static void main(String[] aArgvs)
	{
		try
		{
			Ignition.setClientMode(true);
			IgniteConfiguration cfg = new IgniteConfiguration();
			cfg.setIgniteInstanceName("IgniteSQL_Error");

			TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
			ipFinder.setAddresses(Arrays.asList("192.168.0.219", "192.168.0.220",
"192.168.0.221"));
			TcpDiscoverySpi spi = new TcpDiscoverySpi();
			spi.setIpFinder(ipFinder);
			cfg.setDiscoverySpi(spi);
			try (Ignite ignite = Ignition.start(cfg))
			{
				Class.forName("org.apache.ignite.IgniteJdbcThinDriver");
				final String jdbcConnUrl = "jdbc:ignite:thin://127.0.0.1/";
				try (Connection conn = DriverManager.getConnection(jdbcConnUrl))
				{
					try (Statement stmt = conn.createStatement())
					{
						stmt.executeUpdate("CREATE TABLE IF NOT EXISTS City(id LONG PRIMARY
KEY, name VARCHAR)");
						System.out.println("[Fine]CREATE TABLE IF NOT EXISTS City");
					}
				}
			}
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
	}
}

====[Correct case]==== 

The following code can always run successfully (in the JDBC connection URL,
directly specify one of the server nodes of the Ignite cluster)
---
public class IgniteSQL_Ok 
{
	public static void main(String[] aArgvs)
	{
		try
		{
			Class.forName("org.apache.ignite.IgniteJdbcThinDriver");
			final String jdbcConnUrl = "jdbc:ignite:thin://192.168.0.219/";
			try (Connection conn = DriverManager.getConnection(jdbcConnUrl))
			{
				try (Statement stmt = conn.createStatement())
				{
					stmt.executeUpdate("CREATE TABLE IF NOT EXISTS City(id LONG PRIMARY
KEY, name VARCHAR)");
					System.out.println("[Fine]CREATE TABLE IF NOT EXISTS City");
				}
			}
		}
		catch (Exception ex)
		{
			ex.printStackTrace();
		}
	}
}




--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/