diff --git a/extensions/sql/base/public/mozISqlResult.idl b/extensions/sql/base/public/mozISqlResult.idl index 8895780f670e..ba3f18556c1f 100644 --- a/extensions/sql/base/public/mozISqlResult.idl +++ b/extensions/sql/base/public/mozISqlResult.idl @@ -50,6 +50,11 @@ interface mozISqlInputStream; [scriptable, uuid(08c220b0-7140-456a-89e9-c94609a7392d)] interface mozISqlResult : nsISupports { + /** + * By default, this value is false. + */ + attribute boolean displayNullAsText; + /** * The connection used to execute the query */ diff --git a/extensions/sql/base/src/mozSqlResult.cpp b/extensions/sql/base/src/mozSqlResult.cpp index 866fc885bcaf..5e9e3bbfaf81 100644 --- a/extensions/sql/base/src/mozSqlResult.cpp +++ b/extensions/sql/base/src/mozSqlResult.cpp @@ -55,12 +55,14 @@ nsIDateTimeFormat* mozSqlResult::gFormat; nsIRDFResource* mozSqlResult::kSQL_ResultRoot; nsIRDFResource* mozSqlResult::kNC_Child; nsIRDFLiteral* mozSqlResult::kNullLiteral; +nsIRDFLiteral* mozSqlResult::kEmptyLiteral; nsIRDFLiteral* mozSqlResult::kTrueLiteral; nsIRDFLiteral* mozSqlResult::kFalseLiteral; mozSqlResult::mozSqlResult(mozISqlConnection* aConnection, const nsAString& aQuery) - : mConnection(aConnection), + : mDisplayNullAsText(PR_FALSE), + mConnection(aConnection), mQuery(aQuery), mSources(nsnull, nsnull, nsnull, nsnull), mCanInsert(-1), @@ -94,6 +96,8 @@ mozSqlResult::Init() rv = gRDFService->GetLiteral(NS_LITERAL_STRING("null").get(), &kNullLiteral); if (NS_FAILED(rv)) return rv; + rv = gRDFService->GetLiteral(NS_LITERAL_STRING("").get(), &kEmptyLiteral); + if (NS_FAILED(rv)) return rv; rv = gRDFService->GetLiteral(NS_LITERAL_STRING("true").get(), &kTrueLiteral); if (NS_FAILED(rv)) return rv; rv = gRDFService->GetLiteral(NS_LITERAL_STRING("false").get(), &kFalseLiteral); @@ -138,6 +142,7 @@ mozSqlResult::~mozSqlResult() if (--gRefCnt == 0) { NS_IF_RELEASE(kFalseLiteral); NS_IF_RELEASE(kTrueLiteral); + NS_IF_RELEASE(kEmptyLiteral); NS_IF_RELEASE(kNullLiteral); NS_IF_RELEASE(kNC_Child); NS_IF_RELEASE(kSQL_ResultRoot); @@ -156,6 +161,20 @@ NS_IMPL_THREADSAFE_ISUPPORTS5(mozSqlResult, nsIRDFRemoteDataSource, nsITreeView); +NS_IMETHODIMP +mozSqlResult::GetDisplayNullAsText(PRBool* aDisplayNullAsText) +{ + *aDisplayNullAsText = mDisplayNullAsText; + return NS_OK; +} + +NS_IMETHODIMP +mozSqlResult::SetDisplayNullAsText(PRBool aDisplayNullAsText) +{ + mDisplayNullAsText = aDisplayNullAsText; + return NS_OK; +} + NS_IMETHODIMP mozSqlResult::GetConnection(mozISqlConnection** aConnection) { @@ -421,7 +440,10 @@ mozSqlResult::GetTarget(nsIRDFResource* aSource, Cell* cell = row->mCells[columnIndex]; if (cell->IsNull()) - node = kNullLiteral; + if (mDisplayNullAsText) + node = kNullLiteral; + else + node = kEmptyLiteral; else { PRInt32 type = cell->GetType(); if (type == mozISqlResult::TYPE_STRING) { @@ -820,7 +842,11 @@ mozSqlResult::GetCellText(PRInt32 row, nsITreeColumn* col, nsAString & _retval) col->GetIndex(&columnIndex); Cell* cell = ((Row*)mRows[row])->mCells[columnIndex]; - if (! cell->IsNull()) { + if (cell->IsNull()) { + if (mDisplayNullAsText) + _retval.Assign(NS_LITERAL_STRING("null")); + } + else { PRInt32 type = cell->GetType(); if (type == mozISqlResult::TYPE_STRING) _retval.Assign(cell->mString); @@ -1383,7 +1409,10 @@ mozSqlResult::UpdateRow(PRInt32 aRowIndex, Row* aSrcRow, PRInt32* _retval) Cell* cell = row->mCells[i]; if (cell->IsNull()) - newNode = kNullLiteral; + if (mDisplayNullAsText) + newNode = kNullLiteral; + else + newNode = kEmptyLiteral; else { PRInt32 type = cell->GetType(); if (type == mozISqlResult::TYPE_STRING) { diff --git a/extensions/sql/base/src/mozSqlResult.h b/extensions/sql/base/src/mozSqlResult.h index 180fadb44cf6..d10c9f650012 100644 --- a/extensions/sql/base/src/mozSqlResult.h +++ b/extensions/sql/base/src/mozSqlResult.h @@ -301,6 +301,8 @@ class mozSqlResult : public mozISqlResult, NS_DECL_ISUPPORTS //NS_DECL_MOZISQLRESULT + NS_IMETHOD GetDisplayNullAsText(PRBool *aDisplayNullAsText); + NS_IMETHOD SetDisplayNullAsText(PRBool aDisplayNullAsText); NS_IMETHOD GetConnection(mozISqlConnection * *aConnection); NS_IMETHOD GetQuery(nsAString & aQuery); NS_IMETHOD GetTableName(nsAString & aTableName); @@ -357,9 +359,11 @@ class mozSqlResult : public mozISqlResult, static nsIRDFResource* kSQL_ResultRoot; static nsIRDFResource* kNC_Child; static nsIRDFLiteral* kNullLiteral; + static nsIRDFLiteral* kEmptyLiteral; static nsIRDFLiteral* kTrueLiteral; static nsIRDFLiteral* kFalseLiteral; + PRBool mDisplayNullAsText; nsCOMPtr mConnection; nsString mErrorMessage; nsString mQuery;