本文整理汇总了C#中Couchbase.Lite.Status.SetCode方法的典型用法代码示例。如果您正苦于以下问题:C# Status.SetCode方法的具体用法?C# Status.SetCode怎么用?C# Status.SetCode使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Couchbase.Lite.Status
的用法示例。
在下文中一共展示了Status.SetCode方法的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: UpdateIndex
internal void UpdateIndex()
{
Log.V(Database.Tag, "Re-indexing view " + Name + " ...");
System.Diagnostics.Debug.Assert((Map != null));
if (Id < 0)
{
var msg = string.Format("View.Id < 0");
throw new CouchbaseLiteException(msg, new Status(StatusCode.NotFound));
}
Database.BeginTransaction();
var result = new Status(StatusCode.InternalServerError);
Cursor cursor = null;
try
{
var lastSequence = LastSequenceIndexed;
var dbMaxSequence = Database.LastSequenceNumber;
if (lastSequence == dbMaxSequence)
{
// nothing to do (eg, kCBLStatusNotModified)
var msg = String.Format("lastSequence ({0}) == dbMaxSequence ({1}), nothing to do", lastSequence, dbMaxSequence);
Log.D(Database.Tag, msg);
result.SetCode(StatusCode.Ok);
return;
}
// First remove obsolete emitted results from the 'maps' table:
var sequence = lastSequence;
if (lastSequence < 0)
{
var msg = string.Format("lastSequence < 0 ({0})", lastSequence);
throw new CouchbaseLiteException(msg, new Status(StatusCode.InternalServerError));
}
if (lastSequence == 0)
{
// If the lastSequence has been reset to 0, make sure to remove
// any leftover rows:
var whereArgs = new string[] { Sharpen.Extensions.ToString(Id) };
Database.StorageEngine.Delete("maps", "[email protected]", whereArgs);
}
else
{
// Delete all obsolete map results (ones from since-replaced
// revisions):
var args = new [] {
Id.ToString(),
lastSequence.ToString(),
lastSequence.ToString()
};
Database.StorageEngine.ExecSQL(
"DELETE FROM maps WHERE [email protected] AND sequence IN ("
+ "SELECT parent FROM revs WHERE sequence>@ " + "AND parent>0 AND parent<[email protected])",
args);
}
var deleted = 0;
cursor = Database.StorageEngine.RawQuery("SELECT changes()", null); // TODO: Convert to ADO params.
cursor.MoveToNext();
deleted = cursor.GetInt(0);
cursor.Close();
// find a better way to propagate this back
// Now scan every revision added since the last time the view was
// indexed:
var selectArgs = new[] { Convert.ToString(lastSequence) };
cursor = Database.StorageEngine.RawQuery("SELECT revs.doc_id, sequence, docid, revid, json FROM revs, docs "
+ "WHERE sequence>@ AND current!=0 AND deleted=0 " + "AND revs.doc_id = docs.doc_id "
+ "ORDER BY revs.doc_id, revid DESC", CommandBehavior.SequentialAccess, selectArgs);
cursor.MoveToNext();
var lastDocID = 0L;
while (!cursor.IsAfterLast())
{
long docID = cursor.GetLong(0);
if (docID != lastDocID)
{
// Only look at the first-iterated revision of any document,
// because this is the
// one with the highest revid, hence the "winning" revision
// of a conflict.
lastDocID = docID;
// Reconstitute the document as a dictionary:
sequence = cursor.GetLong(1);
string docId = cursor.GetString(2);
if (docId.StartsWith("_design/", StringCompare.IgnoreCase))
{
// design docs don't get indexed!
cursor.MoveToNext();
continue;
}
var revId = cursor.GetString(3);
var json = cursor.GetBlob(4);
var properties = Database.DocumentPropertiesFromJSON(
json, docId, revId, false, sequence, EnumSet.NoneOf<TDContentOptions>()
);
if (properties != null)
{
//.........这里部分代码省略.........
示例2: PutRevision
//.........这里部分代码省略.........
// Inserting first revision, with no docID given (POST): generate a unique docID:
docId = Database.GenerateDocumentId();
docNumericID = InsertDocumentID(docId);
if (docNumericID <= 0)
{
return null;
}
}
}
// There may be a conflict if (a) the document was already in conflict, or
// (b) a conflict is created by adding a non-deletion child of a non-winning rev.
inConflict = wasConflicted
|| (!deleted && prevRevId != null && oldWinningRevID != null && !prevRevId.Equals(oldWinningRevID));
// PART II: In which we prepare for insertion...
// Get the attachments:
var attachments = GetAttachmentsFromRevision(oldRev);
// Bump the revID and update the JSON:
IList<byte> json = null;
if(!oldRev.IsDeleted()) //oldRev.GetProperties() != null && oldRev.GetProperties().Any())
{
json = EncodeDocumentJSON(oldRev).ToList();
if (json == null)
{
// bad or missing json
throw new CouchbaseLiteException(StatusCode.BadRequest);
}
if (json.Count() == 2 && json[0] == '{' && json[1] == '}')
{
json = null;
}
}
else
{
json = Encoding.UTF8.GetBytes("{}"); // NOTE.ZJG: Confirm w/ Traun. This prevents a null reference exception in call to InsertRevision below.
}
var newRevId = GenerateIDForRevision(oldRev, json, attachments, prevRevId);
newRev = oldRev.CopyWithDocID(docId, newRevId);
StubOutAttachmentsInRevision(attachments, newRev);
// Now insert the rev itself:
var newSequence = InsertRevision(newRev, docNumericID, parentSequence, true, (attachments.Count > 0), json);
if (newSequence == 0)
{
return null;
}
// Make replaced rev non-current:
try
{
var args = new ContentValues();
args["current"] = 0;
StorageEngine.Update("revs", args, "sequence=?", new[] { parentSequence.ToString() });
}
catch (SQLException e)
{
Log.E(Database.Tag, "Error setting parent rev non-current", e);
throw new CouchbaseLiteException(StatusCode.InternalServerError);
}
// Store any attachments:
if (attachments != null)
{
ProcessAttachmentsForRevision(attachments, newRev, parentSequence);
}
// Figure out what the new winning rev ID is:
winningRev = Winner(docNumericID, oldWinningRevID, oldWinnerWasDeletion, newRev);
// Success!
if (deleted)
{
resultStatus.SetCode(StatusCode.Ok);
}
else
{
resultStatus.SetCode(StatusCode.Created);
}
}
catch (SQLException e1)
{
Log.E(Tag, "Error putting revision", e1);
return null;
}
finally
{
if (cursor != null)
{
cursor.Close();
}
EndTransaction(resultStatus.IsSuccessful);
if (!string.IsNullOrEmpty(docId))
{
UnsavedRevisionDocumentCache.Remove(docId);
}
}
// EPILOGUE: A change notification is sent...
NotifyChange(newRev, winningRev, null, inConflict);
return newRev;
}
示例3: LoadRevisionBody
/// <exception cref="Couchbase.Lite.CouchbaseLiteException"></exception>
internal RevisionInternal LoadRevisionBody(RevisionInternal rev, DocumentContentOptions contentOptions)
{
if (rev.GetBody() != null && contentOptions == DocumentContentOptions.None && rev.GetSequence() != 0)
{
return rev;
}
if ((rev.GetDocId() == null) || (rev.GetRevId() == null))
{
Log.E(Database.Tag, "Error loading revision body");
throw new CouchbaseLiteException(StatusCode.PreconditionFailed);
}
Cursor cursor = null;
var result = new Status(StatusCode.NotFound);
try
{
// TODO: on ios this query is:
// TODO: "SELECT sequence, json FROM revs WHERE [email protected] AND [email protected] LIMIT 1"
var sql = "SELECT sequence, json FROM revs, docs WHERE revid=? AND docs.docid=? AND revs.doc_id=docs.doc_id LIMIT 1";
var args = new [] { rev.GetRevId(), rev.GetDocId() };
cursor = StorageEngine.RawQuery(sql, CommandBehavior.SequentialAccess, args);
if (cursor.MoveToNext())
{
result.SetCode(StatusCode.Ok);
rev.SetSequence(cursor.GetLong(0));
ExpandStoredJSONIntoRevisionWithAttachments(cursor.GetBlob(1), rev, contentOptions);
}
}
catch (SQLException e)
{
Log.E(Tag, "Error loading revision body", e);
throw new CouchbaseLiteException(StatusCode.InternalServerError);
}
finally
{
if (cursor != null)
{
cursor.Close();
}
}
if (result.GetCode() == StatusCode.NotFound)
{
throw new CouchbaseLiteException(result.GetCode());
}
return rev;
}
示例4: PutRevision
//.........这里部分代码省略.........
{
// Doc doesn't exist at all; create it:
docNumericID = InsertDocumentID(docId);
if (docNumericID <= 0)
{
return null;
}
}
else
{
// Doc ID exists; check whether current winning revision is deleted:
if (oldWinnerWasDeletion == true)
{
prevRevId = oldWinningRevID;
parentSequence = GetSequenceOfDocument(docNumericID, prevRevId, false);
}
else
{
if (oldWinningRevID != null)
{
// The current winning revision is not deleted, so this is a conflict
throw new CouchbaseLiteException(Status.Conflict);
}
}
}
}
else
{
// Inserting first revision, with no docID given (POST): generate a unique docID:
docId = Database.GenerateDocumentId();
docNumericID = InsertDocumentID(docId);
if (docNumericID <= 0)
{
return null;
}
}
}
// There may be a conflict if (a) the document was already in conflict, or
// (b) a conflict is created by adding a non-deletion child of a non-winning rev.
inConflict = wasConflicted || (!deleted && prevRevId != null && oldWinningRevID !=
null && !prevRevId.Equals(oldWinningRevID));
//// PART II: In which insertion occurs...
// Get the attachments:
IDictionary<string, AttachmentInternal> attachments = GetAttachmentsFromRevision(
oldRev);
// Bump the revID and update the JSON:
string newRevId = GenerateNextRevisionID(prevRevId);
byte[] data = null;
if (!oldRev.IsDeleted())
{
data = EncodeDocumentJSON(oldRev);
if (data == null)
{
// bad or missing json
throw new CouchbaseLiteException(Status.BadRequest);
}
}
newRev = oldRev.CopyWithDocID(docId, newRevId);
StubOutAttachmentsInRevision(attachments, newRev);
// Now insert the rev itself:
long newSequence = InsertRevision(newRev, docNumericID, parentSequence, true, data
);
if (newSequence == 0)
{
return null;
}
// Store any attachments:
if (attachments != null)
{
ProcessAttachmentsForRevision(attachments, newRev, parentSequence);
}
// Figure out what the new winning rev ID is:
winningRev = Winner(docNumericID, oldWinningRevID, oldWinnerWasDeletion, newRev);
// Success!
if (deleted)
{
resultStatus.SetCode(Status.Ok);
}
else
{
resultStatus.SetCode(Status.Created);
}
}
catch (SQLException e1)
{
Log.E(Database.Tag, "Error putting revision", e1);
return null;
}
finally
{
if (cursor != null)
{
cursor.Close();
}
EndTransaction(resultStatus.IsSuccessful());
}
//// EPILOGUE: A change notification is sent...
NotifyChange(newRev, winningRev, null, inConflict);
return newRev;
}
示例5: DeleteViewNamed
internal Status DeleteViewNamed(String name)
{
var result = new Status(StatusCode.InternalServerError);
try
{
var whereArgs = new [] { name };
var rowsAffected = StorageEngine.Delete("views", "name=?", whereArgs);
if (rowsAffected > 0)
{
result.SetCode(StatusCode.Ok);
}
else
{
result.SetCode(StatusCode.NotFound);
}
}
catch (SQLException e)
{
Log.E(Tag, "Error deleting view", e);
}
return result;
}
示例6: DeleteViewNamed
public Status DeleteViewNamed(string name)
{
Status result = new Status(Status.InternalServerError);
try
{
string[] whereArgs = new string[] { name };
int rowsAffected = database.Delete("views", "name=?", whereArgs);
if (rowsAffected > 0)
{
result.SetCode(Status.Ok);
}
else
{
result.SetCode(Status.NotFound);
}
}
catch (SQLException e)
{
Log.E(Database.Tag, "Error deleting view", e);
}
return result;
}
示例7: LoadRevisionBody
public RevisionInternal LoadRevisionBody(RevisionInternal rev, EnumSet<Database.TDContentOptions
> contentOptions)
{
if (rev.GetBody() != null && contentOptions == EnumSet.NoneOf<Database.TDContentOptions
>() && rev.GetSequence() != 0)
{
return rev;
}
System.Diagnostics.Debug.Assert(((rev.GetDocId() != null) && (rev.GetRevId() != null
)));
Cursor cursor = null;
Status result = new Status(Status.NotFound);
try
{
// TODO: on ios this query is:
// TODO: "SELECT sequence, json FROM revs WHERE doc_id=? AND revid=? LIMIT 1"
string sql = "SELECT sequence, json FROM revs, docs WHERE revid=? AND docs.docid=? AND revs.doc_id=docs.doc_id LIMIT 1";
string[] args = new string[] { rev.GetRevId(), rev.GetDocId() };
cursor = database.RawQuery(sql, args);
if (cursor.MoveToNext())
{
result.SetCode(Status.Ok);
rev.SetSequence(cursor.GetLong(0));
ExpandStoredJSONIntoRevisionWithAttachments(cursor.GetBlob(1), rev, contentOptions
);
}
}
catch (SQLException e)
{
Log.E(Database.Tag, "Error loading revision body", e);
throw new CouchbaseLiteException(Status.InternalServerError);
}
finally
{
if (cursor != null)
{
cursor.Close();
}
}
if (result.GetCode() == Status.NotFound)
{
throw new CouchbaseLiteException(result);
}
return rev;
}
示例8: UpdateIndex
internal void UpdateIndex()
{
Log.V(Database.Tag, "Re-indexing view {0} ...", Name);
System.Diagnostics.Debug.Assert((Map != null));
if (Id <= 0)
{
var msg = string.Format("View.Id <= 0");
throw new CouchbaseLiteException(msg, new Status(StatusCode.NotFound));
}
Database.BeginTransaction();
var result = new Status(StatusCode.InternalServerError);
Cursor cursor = null;
try
{
var lastSequence = LastSequenceIndexed;
var dbMaxSequence = Database.LastSequenceNumber;
if (lastSequence == dbMaxSequence)
{
// nothing to do (eg, kCBLStatusNotModified)
Log.V(Database.Tag, "lastSequence ({0}) == dbMaxSequence ({1}), nothing to do", lastSequence, dbMaxSequence);
result.SetCode(StatusCode.NotModified);
return;
}
// First remove obsolete emitted results from the 'maps' table:
var sequence = lastSequence;
if (lastSequence < 0)
{
var msg = string.Format("lastSequence < 0 ({0})", lastSequence);
throw new CouchbaseLiteException(msg, new Status(StatusCode.InternalServerError));
}
if (lastSequence == 0)
{
// If the lastSequence has been reset to 0, make sure to remove
// any leftover rows:
var whereArgs = new string[] { Id.ToString() };
Database.StorageEngine.Delete("maps", "view_id=?", whereArgs);
}
else
{
// Delete all obsolete map results (ones from since-replaced
// revisions):
var args = new [] {
Id.ToString(),
lastSequence.ToString(),
lastSequence.ToString()
};
Database.StorageEngine.ExecSQL(
"DELETE FROM maps WHERE view_id=? AND sequence IN ("
+ "SELECT parent FROM revs WHERE sequence>? " + "AND parent>0 AND parent<=?)",
args);
}
var deleted = 0;
cursor = Database.StorageEngine.RawQuery("SELECT changes()");
cursor.MoveToNext();
deleted = cursor.GetInt(0);
cursor.Close();
// Find a better way to propagate this back
// Now scan every revision added since the last time the view was indexed:
var selectArgs = new[] { lastSequence.ToString() };
cursor = Database.StorageEngine.RawQuery("SELECT revs.doc_id, sequence, docid, revid, json, no_attachments FROM revs, docs "
+ "WHERE sequence>? AND current!=0 AND deleted=0 "
+ "AND revs.doc_id = docs.doc_id "
+ "ORDER BY revs.doc_id, revid DESC", CommandBehavior.SequentialAccess, selectArgs);
var lastDocID = 0L;
var keepGoing = cursor.MoveToNext();
while (keepGoing)
{
long docID = cursor.GetLong(0);
if (docID != lastDocID)
{
// Only look at the first-iterated revision of any document,
// because this is the
// one with the highest revid, hence the "winning" revision
// of a conflict.
lastDocID = docID;
// Reconstitute the document as a dictionary:
sequence = cursor.GetLong(1);
string docId = cursor.GetString(2);
if (docId.StartsWith("_design/", StringComparison.InvariantCultureIgnoreCase))
{
// design docs don't get indexed!
keepGoing = cursor.MoveToNext();
continue;
}
var revId = cursor.GetString(3);
var json = cursor.GetBlob(4);
var noAttachments = cursor.GetInt(5) > 0;
// Skip rows with the same doc_id -- these are losing conflicts.
while ((keepGoing = cursor.MoveToNext()) && cursor.GetLong(0) == docID) { }
//.........这里部分代码省略.........
示例9: UpdateIndex
public void UpdateIndex()
{
Log.V(Log.TagView, "Re-indexing view: %s", name);
System.Diagnostics.Debug.Assert((mapBlock != null));
if (GetViewId() <= 0)
{
string msg = string.Format("getViewId() < 0");
throw new CouchbaseLiteException(msg, new Status(Status.NotFound));
}
database.BeginTransaction();
Status result = new Status(Status.InternalServerError);
Cursor cursor = null;
try
{
long lastSequence = GetLastSequenceIndexed();
long dbMaxSequence = database.GetLastSequenceNumber();
if (lastSequence == dbMaxSequence)
{
// nothing to do (eg, kCBLStatusNotModified)
Log.V(Log.TagView, "lastSequence (%s) == dbMaxSequence (%s), nothing to do", lastSequence
, dbMaxSequence);
result.SetCode(Status.NotModified);
return;
}
// First remove obsolete emitted results from the 'maps' table:
long sequence = lastSequence;
if (lastSequence < 0)
{
string msg = string.Format("lastSequence < 0 (%s)", lastSequence);
throw new CouchbaseLiteException(msg, new Status(Status.InternalServerError));
}
if (lastSequence == 0)
{
// If the lastSequence has been reset to 0, make sure to remove
// any leftover rows:
string[] whereArgs = new string[] { Sharpen.Extensions.ToString(GetViewId()) };
database.GetDatabase().Delete("maps", "view_id=?", whereArgs);
}
else
{
// Delete all obsolete map results (ones from since-replaced
// revisions):
string[] args = new string[] { Sharpen.Extensions.ToString(GetViewId()), System.Convert.ToString
(lastSequence), System.Convert.ToString(lastSequence) };
database.GetDatabase().ExecSQL("DELETE FROM maps WHERE view_id=? AND sequence IN ("
+ "SELECT parent FROM revs WHERE sequence>? " + "AND parent>0 AND parent<=?)",
args);
}
int deleted = 0;
cursor = database.GetDatabase().RawQuery("SELECT changes()", null);
cursor.MoveToNext();
deleted = cursor.GetInt(0);
cursor.Close();
// This is the emit() block, which gets called from within the
// user-defined map() block
// that's called down below.
AbstractTouchMapEmitBlock emitBlock = new _AbstractTouchMapEmitBlock_428(this);
//Log.v(Log.TAG_VIEW, " emit(" + keyJson + ", "
// + valueJson + ")");
// find a better way to propagate this back
// Now scan every revision added since the last time the view was
// indexed:
string[] selectArgs = new string[] { System.Convert.ToString(lastSequence) };
cursor = database.GetDatabase().RawQuery("SELECT revs.doc_id, sequence, docid, revid, json, no_attachments FROM revs, docs "
+ "WHERE sequence>? AND current!=0 AND deleted=0 " + "AND revs.doc_id = docs.doc_id "
+ "ORDER BY revs.doc_id, revid DESC", selectArgs);
long lastDocID = 0;
bool keepGoing = cursor.MoveToNext();
while (keepGoing)
{
long docID = cursor.GetLong(0);
if (docID != lastDocID)
{
// Only look at the first-iterated revision of any document,
// because this is the
// one with the highest revid, hence the "winning" revision
// of a conflict.
lastDocID = docID;
// Reconstitute the document as a dictionary:
sequence = cursor.GetLong(1);
string docId = cursor.GetString(2);
if (docId.StartsWith("_design/"))
{
// design docs don't get indexed!
keepGoing = cursor.MoveToNext();
continue;
}
string revId = cursor.GetString(3);
byte[] json = cursor.GetBlob(4);
bool noAttachments = cursor.GetInt(5) > 0;
while ((keepGoing = cursor.MoveToNext()) && cursor.GetLong(0) == docID)
{
}
// Skip rows with the same doc_id -- these are losing conflicts.
if (lastSequence > 0)
{
// Find conflicts with documents from previous indexings.
string[] selectArgs2 = new string[] { System.Convert.ToString(docID), System.Convert.ToString
(lastSequence) };
Cursor cursor2 = database.GetDatabase().RawQuery("SELECT revid, sequence FROM revs "
//.........这里部分代码省略.........