code: private boolean executeSQL(String sql) throws TException, SQLException {
  		isCancelled = false;
  		String sqlToLowerCase = sql.toLowerCase().trim();
  		if (sqlToLowerCase.startsWith(SHOW_TIMESERIES_COMMAND_LOWERCASE)) {
  			String[] cmdSplited = sql.split("\\s+");
  			if (cmdSplited.length != 3) {
  				throw new SQLException("Error format of \'SHOW TIMESERIES <PATH>\'");
  			} else {
  				String path = cmdSplited[2];
  				DatabaseMetaData databaseMetaData = connection.getMetaData();
  				resultSet = databaseMetaData.getColumns(TsFileDBConstant.CatalogTimeseries, path, null, null);
  				return true;
  			}
  		} else if (sqlToLowerCase.equals(SHOW_STORAGE_GROUP_COMMAND_LOWERCASE)) {
  			DatabaseMetaData databaseMetaData = connection.getMetaData();
  			resultSet = databaseMetaData.getColumns(TsFileDBConstant.CatalogStorageGroup, null, null, null);
  			return true;
  		} else {
  			TSExecuteStatementReq execReq = new TSExecuteStatementReq(sessionHandle, sql);
  			TSExecuteStatementResp execResp = client.executeStatement(execReq);
  			operationHandle = execResp.getOperationHandle();
  			Utils.verifySuccess(execResp.getStatus());
  			if (execResp.getOperationHandle().hasResultSet) {
  				resultSet = new TsfileQueryResultSet(this, execResp.getColumns(), client, sessionHandle,
  						operationHandle, sql, execResp.getOperationType(), getColumnsType(execResp.getColumns()));
  				return true;
  			}
  			return false;
  		}
  	}
docs: There are four kinds of sql here:
  (1) show timeseries path
  (2) show storage group
  (3) query sql
  (4) update sql
  
  (1) and (2) return new TsfileMetadataResultSet
  (3) return new TsfileQueryResultSet
  (4) simply get executed
  
  @param sql
  @return
  @throws TException
  @throws SQLException