Skip to content

Commit 142eeff

Browse files
authored
Resolved #62: Fix command name handling with mixed case. (#64)
1 parent ee84b7f commit 142eeff

File tree

3 files changed

+37
-15
lines changed

3 files changed

+37
-15
lines changed

src/ExtCmd.actor.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,6 @@ ACTOR static Future<int> internal_doDropIndexesActor(Reference<DocTransaction> t
361361
ACTOR static Future<Void> Internal_doDropCollection(Reference<DocTransaction> tr,
362362
Reference<ExtMsgQuery> query,
363363
Reference<MetadataManager> mm) {
364-
query->ns.second = query->query.getField("drop").String();
365364
state Reference<UnboundCollectionContext> unbound = wait(mm->getUnboundCollectionContext(tr, query->ns));
366365
int _ = wait(internal_doDropIndexesActor(tr, query->ns, mm));
367366
Void _ = wait(unbound->collectionDirectory->remove(tr->tr));
@@ -436,7 +435,6 @@ struct GetCountCmd {
436435
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> ec,
437436
Reference<ExtMsgQuery> query,
438437
Reference<ExtMsgReply> reply) {
439-
query->ns.second = query->query.getField("count").String();
440438
return getStreamCount(ec, query, reply);
441439
}
442440
};
@@ -552,7 +550,6 @@ struct FindAndModifyCmd {
552550
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> ec,
553551
Reference<ExtMsgQuery> query,
554552
Reference<ExtMsgReply> reply) {
555-
query->ns.second = query->query.getField("findandmodify").String();
556553
return doFindAndModify(ec, query, reply);
557554
}
558555
};
@@ -659,7 +656,6 @@ struct DropIndexesCmd {
659656
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> nmc,
660657
Reference<ExtMsgQuery> query,
661658
Reference<ExtMsgReply> reply) {
662-
query->ns.second = query->query.getField("dropIndexes").String();
663659
return doDropIndexesActor(nmc, query, reply);
664660
}
665661
};
@@ -671,7 +667,6 @@ struct DeleteIndexesCmd {
671667
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> nmc,
672668
Reference<ExtMsgQuery> query,
673669
Reference<ExtMsgReply> reply) {
674-
query->ns.second = query->query.getField("deleteIndexes").String();
675670
return doDropIndexesActor(nmc, query, reply);
676671
}
677672
};
@@ -700,7 +695,6 @@ struct CreateIndexesCmd {
700695
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> ec,
701696
Reference<ExtMsgQuery> query,
702697
Reference<ExtMsgReply> reply) {
703-
query->ns.second = query->query.getStringField("createIndexes");
704698
return doCreateIndexes(ec, query, reply);
705699
}
706700
};
@@ -807,7 +801,6 @@ struct CollectionStatsCmd {
807801
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> ec,
808802
Reference<ExtMsgQuery> query,
809803
Reference<ExtMsgReply> reply) {
810-
query->ns.second = query->query.getField("collstats").String();
811804
return getCollectionStats(ec, query, reply);
812805
}
813806
};
@@ -846,7 +839,6 @@ struct CreateCollectionCmd {
846839
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> ec,
847840
Reference<ExtMsgQuery> query,
848841
Reference<ExtMsgReply> reply) {
849-
query->ns.second = query->query.getField("create").String();
850842
return doCreateCollection(ec, query, reply);
851843
}
852844
};
@@ -1058,7 +1050,6 @@ struct InsertCmd {
10581050
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> nmc,
10591051
Reference<ExtMsgQuery> query,
10601052
Reference<ExtMsgReply> reply) {
1061-
query->ns.second = query->query.getField("insert").String();
10621053
return insertAndReply(nmc, query, reply);
10631054
}
10641055
};
@@ -1101,7 +1092,6 @@ struct DeleteCmd {
11011092
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> nmc,
11021093
Reference<ExtMsgQuery> query,
11031094
Reference<ExtMsgReply> reply) {
1104-
query->ns.second = query->query.getField("delete").String();
11051095
return deleteAndReply(nmc, query, reply);
11061096
}
11071097
};
@@ -1154,7 +1144,6 @@ struct UpdateCmd {
11541144
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> nmc,
11551145
Reference<ExtMsgQuery> query,
11561146
Reference<ExtMsgReply> reply) {
1157-
query->ns.second = query->query.getField("update").String();
11581147
return updateAndReply(nmc, query, reply);
11591148
}
11601149
};
@@ -1287,8 +1276,6 @@ struct ListIndexesCmd {
12871276
state Reference<DocTransaction> dtr = ec->getOperationTransaction();
12881277
loop {
12891278
try {
1290-
msg->ns.second = msg->query.getStringField("listIndexes");
1291-
12921279
Reference<UnboundCollectionContext> unbound = wait(ec->mm->indexesCollection(dtr, msg->ns.first));
12931280

12941281
auto getIndexesPlan = getIndexesForCollectionPlan(unbound, msg->ns);
@@ -1390,7 +1377,6 @@ struct GetDistinctCmd {
13901377
static Future<Reference<ExtMsgReply>> call(Reference<ExtConnection> ec,
13911378
Reference<ExtMsgQuery> query,
13921379
Reference<ExtMsgReply> reply) {
1393-
query->ns.second = query->query.getField("distinct").String();
13941380
return getStreamDistinct(ec, query, reply);
13951381
}
13961382
};

src/ExtMsg.actor.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,15 @@ ACTOR Future<Void> runCommand(Reference<ExtConnection> nmc,
240240
Reference<ExtMsgQuery> query,
241241
PromiseStream<Reference<ExtMsgReply>> replyStream) {
242242
state Reference<ExtMsgReply> errReply(new ExtMsgReply(query->header));
243-
state std::string cmd = getFirstKey(query->query);
243+
244+
// For OP_QUERY commands, first elements field name is the command name. And the value contains
245+
// the collection name if the command is at collection level.
246+
auto firstElement = query->query.begin().next();
247+
state std::string cmd = firstElement.fieldName();
244248
std::transform(cmd.begin(), cmd.end(), cmd.begin(), ::tolower);
249+
if (firstElement.isString()) {
250+
query->ns.second = firstElement.String();
251+
}
245252

246253
try {
247254
Reference<ExtMsgReply> reply = wait(ExtCmd::call(cmd, nmc, query, errReply));
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
def test_simple_remove(collection):
2+
collection.insert({'A': 'Hello', 'B': 'World'})
3+
collection.insert({'A': 'Hello', 'B': 'California'})
4+
collection.find_and_modify({'A': 'Hello'}, remove=True)
5+
return collection.count() == 1
6+
7+
8+
def test_simple_update(collection):
9+
collection.insert({'A': 'Hello', 'B': 'World'})
10+
collection.insert({'A': 'Hello', 'B': 'California'})
11+
12+
collection.find_and_modify({'A': 'Hello'}, remove=True)
13+
if collection.count() != 1:
14+
return False
15+
16+
collection.find_and_modify({'A': 'Hello'}, update={'A': 'Bye'})
17+
return collection.count({'A': 'Hello'}) == 0
18+
19+
20+
tests = [locals()[attr] for attr in dir() if attr.startswith('test_')]
21+
22+
23+
def test_all(collection1, collection2):
24+
print "findAndModify tests only use first collection specified"
25+
okay = True
26+
for t in tests:
27+
collection1.remove()
28+
okay = t(collection1) and okay
29+
return okay

0 commit comments

Comments
 (0)