Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion engine/src/main/java/com/arcadedb/database/RID.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public static boolean is(final Object value) {
if (value instanceof String) {
final String valueAsString = value.toString();
if (valueAsString.length() > 3 && valueAsString.charAt(0) == '#') {
final String[] parts = valueAsString.split(":");
final String[] parts = valueAsString.substring(1).split(":");
if (parts.length == 2 && NumberUtils.isIntegerNumber(parts[0]) && NumberUtils.isIntegerNumber(parts[1])) {
return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,48 @@
import com.arcadedb.index.Index;
import com.arcadedb.index.RangeIndex;
import com.arcadedb.index.TypeIndex;
import com.arcadedb.query.sql.parser.*;
import com.arcadedb.query.sql.parser.AggregateProjectionSplit;
import com.arcadedb.query.sql.parser.AndBlock;
import com.arcadedb.query.sql.parser.BaseExpression;
import com.arcadedb.query.sql.parser.BinaryCompareOperator;
import com.arcadedb.query.sql.parser.BinaryCondition;
import com.arcadedb.query.sql.parser.BooleanExpression;
import com.arcadedb.query.sql.parser.Bucket;
import com.arcadedb.query.sql.parser.ContainsAnyCondition;
import com.arcadedb.query.sql.parser.EqualsCompareOperator;
import com.arcadedb.query.sql.parser.Expression;
import com.arcadedb.query.sql.parser.FromClause;
import com.arcadedb.query.sql.parser.FromItem;
import com.arcadedb.query.sql.parser.FunctionCall;
import com.arcadedb.query.sql.parser.GeOperator;
import com.arcadedb.query.sql.parser.GroupBy;
import com.arcadedb.query.sql.parser.GtOperator;
import com.arcadedb.query.sql.parser.Identifier;
import com.arcadedb.query.sql.parser.InCondition;
import com.arcadedb.query.sql.parser.IndexIdentifier;
import com.arcadedb.query.sql.parser.InputParameter;
import com.arcadedb.query.sql.parser.LeOperator;
import com.arcadedb.query.sql.parser.LetClause;
import com.arcadedb.query.sql.parser.LetItem;
import com.arcadedb.query.sql.parser.LtOperator;
import com.arcadedb.query.sql.parser.OrBlock;
import com.arcadedb.query.sql.parser.OrderBy;
import com.arcadedb.query.sql.parser.OrderByItem;
import com.arcadedb.query.sql.parser.PInteger;
import com.arcadedb.query.sql.parser.Projection;
import com.arcadedb.query.sql.parser.ProjectionItem;
import com.arcadedb.query.sql.parser.RecordAttribute;
import com.arcadedb.query.sql.parser.Rid;
import com.arcadedb.query.sql.parser.SchemaIdentifier;
import com.arcadedb.query.sql.parser.SelectStatement;
import com.arcadedb.query.sql.parser.Statement;
import com.arcadedb.query.sql.parser.SubQueryCollector;
import com.arcadedb.query.sql.parser.Timeout;
import com.arcadedb.query.sql.parser.WhereClause;
import com.arcadedb.schema.DocumentType;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.*;

/**
* @author Luigi Dell'Aquila (luigi.dellaquila-(at)-gmail.com)
Expand Down Expand Up @@ -1117,6 +1154,10 @@ private boolean isRangeOperator(BinaryCompareOperator operator) {
private void handleInputParamAsTarget(SelectExecutionPlan result, Set<String> filterClusters, QueryPlanningInfo info, InputParameter inputParam,
CommandContext ctx, boolean profilingEnabled) {
Object paramValue = inputParam.getValue(ctx.getInputParameters());

if (paramValue instanceof String && RID.is(paramValue))
paramValue = new RID(ctx.getDatabase(), (String) paramValue);

if (paramValue == null) {
result.chain(new EmptyStep(ctx, profilingEnabled));//nothing to return
} else if (paramValue instanceof DocumentType) {
Expand Down
64 changes: 22 additions & 42 deletions server/src/test/java/com/arcadedb/server/HTTPGraphIT.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,14 +35,10 @@ public void checkAuthenticationError() throws Exception {

connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Basic " + Base64.getEncoder().encodeToString("root:wrong".getBytes()));

try {
connection.connect();

readResponse(connection);

Assertions.fail("Authentication was bypassed!");

} catch (IOException e) {
Assertions.assertTrue(e.toString().contains("403"));
} finally {
Expand All @@ -58,14 +54,10 @@ public void checkNoAuthentication() throws Exception {
"http://127.0.0.1:248" + serverIndex + "/api/v1/query/graph/sql/select%20from%20V1%20limit%201").openConnection();

connection.setRequestMethod("GET");

try {
connection.connect();

readResponse(connection);

Assertions.fail("Authentication was bypassed!");

} catch (IOException e) {
Assertions.assertTrue(e.toString().contains("403"));
} finally {
Expand Down Expand Up @@ -132,15 +124,10 @@ public void checkQueryInPost() throws Exception {

try {
final String response = readResponse(connection);

LogManager.instance().log(this, Level.INFO, "Response: ", null, response);

Assertions.assertEquals(200, connection.getResponseCode());

Assertions.assertEquals("OK", connection.getResponseMessage());

Assertions.assertTrue(response.contains("V1"));

} finally {
connection.disconnect();
}
Expand All @@ -160,15 +147,33 @@ public void checkCommand() throws Exception {

try {
final String response = readResponse(connection);

LogManager.instance().log(this, Level.INFO, "Response: ", null, response);

Assertions.assertEquals(200, connection.getResponseCode());

Assertions.assertEquals("OK", connection.getResponseMessage());

Assertions.assertTrue(response.contains("V1"));
} finally {
connection.disconnect();
}
});
}

@Test
public void checkCommandLoadByRIDWithParameters() throws Exception {
testEachServer((serverIndex) -> {
HttpURLConnection connection = (HttpURLConnection) new URL("http://127.0.0.1:248" + serverIndex + "/api/v1/command/graph").openConnection();

connection.setRequestMethod("POST");
connection.setRequestProperty("Authorization",
"Basic " + Base64.getEncoder().encodeToString(("root:" + BaseGraphServerTest.DEFAULT_PASSWORD_FOR_TESTS).getBytes()));
formatPost(connection, "sql", "SELECT FROM :rid", Collections.singletonMap("rid", "#1:0"));
connection.connect();

try {
final String response = readResponse(connection);
LogManager.instance().log(this, Level.INFO, "Response: ", null, response);
Assertions.assertEquals(200, connection.getResponseCode());
Assertions.assertEquals("OK", connection.getResponseMessage());
Assertions.assertTrue(response.contains("V1"));
} finally {
connection.disconnect();
}
Expand All @@ -188,15 +193,10 @@ public void checkRecordLoading() throws Exception {

try {
final String response = readResponse(connection);

LogManager.instance().log(this, Level.INFO, "Response: ", null, response);

Assertions.assertEquals(200, connection.getResponseCode());

Assertions.assertEquals("OK", connection.getResponseMessage());

Assertions.assertTrue(response.contains("V1"));

} finally {
connection.disconnect();
}
Expand Down Expand Up @@ -229,12 +229,9 @@ public void checkRecordCreate() throws Exception {

Assertions.assertEquals(200, connection.getResponseCode());
Assertions.assertEquals("OK", connection.getResponseMessage());

LogManager.instance().log(this, Level.INFO, "Response: ", null, response);

final JSONObject responseAsJson = new JSONObject(response);
Assertions.assertTrue(responseAsJson.has("result"));

rid = responseAsJson.getString("result");
Assertions.assertTrue(rid.contains("#"));
} finally {
Expand All @@ -251,21 +248,14 @@ public void checkRecordCreate() throws Exception {

try {
final String response = readResponse(connection2);

LogManager.instance().log(this, Level.INFO, "Response: ", null, response);

final JSONObject responseAsJson = new JSONObject(response);
Assertions.assertTrue(responseAsJson.has("result"));

final JSONObject object = responseAsJson.getJSONObject("result");

Assertions.assertEquals(200, connection2.getResponseCode());

Assertions.assertEquals("OK", connection2.getResponseMessage());

Assertions.assertEquals(rid, object.remove("@rid").toString());
Assertions.assertEquals("d", object.remove("@cat"));

Assertions.assertEquals(payload.toMap(), object.toMap());

} finally {
Expand All @@ -286,15 +276,10 @@ public void checkDatabaseExists() throws Exception {

try {
final String response = readResponse(connection);

LogManager.instance().log(this, Level.INFO, "Response: ", null, response);

Assertions.assertEquals(200, connection.getResponseCode());

Assertions.assertEquals("OK", connection.getResponseMessage());

Assertions.assertTrue(new JSONObject(response).getBoolean("result"));

} finally {
connection.disconnect();
}
Expand All @@ -313,16 +298,11 @@ public void checkDatabaseList() throws Exception {

try {
final String response = readResponse(connection);

LogManager.instance().log(this, Level.INFO, "Response: ", null, response);

Assertions.assertEquals(200, connection.getResponseCode());

Assertions.assertEquals("OK", connection.getResponseMessage());

JSONArray databases = new JSONObject(response).getJSONArray("result");
Assertions.assertEquals(1, databases.length());

} finally {
connection.disconnect();
}
Expand Down