@@ -310,6 +310,257 @@ public void Test_MSSQL_FetchData_Entity_Strict_Error_Check()
310310
311311 #endregion
312312
313+ #region Execute Scalar Tests - << string ExecuteScalar(string sqlStatement); >>
314+
315+ [ TestMethod ]
316+ [ TestCategory ( DB_TESTS ) , TestCategory ( MSSQL_TESTS ) ]
317+ public void Test_MSSQL_ExecuteScalar_As_StringReturn_Scalar_Queries ( )
318+ {
319+ var countOfRecords = Queries . MSSQLQueries . TestDB . ScalarQueries . Count_Of_Records ;
320+ var max = Queries . MSSQLQueries . TestDB . ScalarQueries . Max ;
321+ var min = Queries . MSSQLQueries . TestDB . ScalarQueries . Min ;
322+ var sum = Queries . MSSQLQueries . TestDB . ScalarQueries . Sum ;
323+ var avg = Queries . MSSQLQueries . TestDB . ScalarQueries . Avg ;
324+ var singleValueSelect = Queries . MSSQLQueries . TestDB . ScalarQueries . Single_Value_Select ;
325+
326+ var dbContext = new DBContext ( DB . MSSQL , MSSQLConnectionString ) ;
327+
328+ var count = dbContext . ExecuteScalar ( countOfRecords ) ;
329+ Assert . AreEqual ( "12" , count ) ;
330+ var maxValue = dbContext . ExecuteScalar ( max ) ;
331+ Assert . AreEqual ( "10000.00" , maxValue ) ;
332+ var minValue = dbContext . ExecuteScalar ( min ) ;
333+ Assert . AreEqual ( "3000.00" , minValue ) ;
334+ var sumValue = dbContext . ExecuteScalar ( sum ) ;
335+ Assert . AreEqual ( "161000.00" , sumValue ) ;
336+ var avgValue = dbContext . ExecuteScalar ( avg ) ;
337+ Assert . AreEqual ( "6520.000000" , avgValue ) ;
338+ var singleValue = dbContext . ExecuteScalar ( singleValueSelect ) ;
339+ Assert . AreEqual ( "2" , singleValue ) ;
340+ }
341+
342+ [ TestMethod ]
343+ [ TestCategory ( DB_TESTS ) , TestCategory ( MSSQL_TESTS ) ]
344+ public void Test_MSSQL_ExecuteScalar_As_StringReturn_DefaultValue ( )
345+ {
346+ var noValueReturned = Queries . MSSQLQueries . TestDB . ScalarQueries . No_Value_Returned ;
347+ var dBNullValue = Queries . MSSQLQueries . TestDB . ScalarQueries . DB_Null_Value ;
348+
349+ var dbContext = new DBContext ( DB . MSSQL , MSSQLConnectionString ) ;
350+
351+ var result = dbContext . ExecuteScalar ( noValueReturned ) ;
352+ Assert . IsInstanceOfType < string > ( result ) ;
353+ Assert . AreEqual ( "" , result ) ;
354+
355+ result = dbContext . ExecuteScalar ( dBNullValue ) ;
356+ Assert . IsInstanceOfType < string > ( result ) ;
357+ Assert . AreEqual ( string . Empty , result ) ;
358+ }
359+
360+ [ TestMethod ]
361+ [ TestCategory ( DB_TESTS ) , TestCategory ( MSSQL_TESTS ) ]
362+ public void Test_MSSQL_ExecuteScalar_As_StringReturn_UnsupportedCommands ( )
363+ {
364+ var sqlStatements = new List < string >
365+ {
366+ Queries . MSSQLQueries . TestDB . DDL . Create_Table ,
367+ Queries . MSSQLQueries . TestDB . DDL . Alter_Table ,
368+ Queries . MSSQLQueries . TestDB . DDL . Comment_Table ,
369+ Queries . MSSQLQueries . TestDB . DDL . Truncate_Table ,
370+ Queries . MSSQLQueries . TestDB . DDL . Drop_Table ,
371+
372+ Queries . MSSQLQueries . TestDB . DML . InsertSql ,
373+ Queries . MSSQLQueries . TestDB . DML . UpdateSql ,
374+ Queries . MSSQLQueries . TestDB . DML . DeleteSql ,
375+
376+ Queries . MSSQLQueries . TestDB . DCL . GrantSql_Command_Table_User ,
377+ Queries . MSSQLQueries . TestDB . DCL . RevokeSql_Command_Table_User
378+ } ;
379+
380+ foreach ( var sqlStatement in sqlStatements )
381+ {
382+ try
383+ {
384+ var dbContext = new DBContext ( DB . MSSQL , MSSQLConnectionString ) ;
385+ dbContext . ExecuteScalar ( sqlStatement ) ;
386+ Assert . Fail ( "No Exception" ) ;
387+ }
388+ catch ( QueryDBException ex )
389+ {
390+ Assert . AreEqual ( "Only SELECT queries are supported here." , ex . Message ) ;
391+ Assert . AreEqual ( "UnsupportedCommand" , ex . ErrorType ) ;
392+ Assert . AreEqual ( "'ExecuteScalar' only supports SELECT queries that have a scalar (single value) return." , ex . AdditionalInfo ) ;
393+ }
394+ }
395+ }
396+
397+ #endregion
398+
399+ #region Execute Scalar Tests - << T ExecuteScalar<T>(string sqlStatement); >>
400+
401+ [ TestMethod ]
402+ [ TestCategory ( DB_TESTS ) , TestCategory ( MSSQL_TESTS ) ]
403+ public void Test_MSSQL_ExecuteScalar_As_TypedReturn_Scalar_Queries ( )
404+ {
405+ var countOfRecords = Queries . MSSQLQueries . TestDB . ScalarQueries . Count_Of_Records ;
406+ var max = Queries . MSSQLQueries . TestDB . ScalarQueries . Max ;
407+ var min = Queries . MSSQLQueries . TestDB . ScalarQueries . Min ;
408+ var sum = Queries . MSSQLQueries . TestDB . ScalarQueries . Sum ;
409+ var avg = Queries . MSSQLQueries . TestDB . ScalarQueries . Avg ;
410+ var singleValueSelect = Queries . MSSQLQueries . TestDB . ScalarQueries . Single_Value_Select ;
411+
412+ var dbContext = new DBContext ( DB . MSSQL , MSSQLConnectionString ) ;
413+
414+ var count = dbContext . ExecuteScalar < int > ( countOfRecords ) ;
415+ Assert . AreEqual ( 12 , count ) ;
416+ var maxValue = dbContext . ExecuteScalar < float > ( max ) ;
417+ Assert . AreEqual ( 10000.00 , maxValue ) ;
418+ var minValue = dbContext . ExecuteScalar < float > ( min ) ;
419+ Assert . AreEqual ( 3000.00 , minValue ) ;
420+ var sumValue = dbContext . ExecuteScalar < float > ( sum ) ;
421+ Assert . AreEqual ( 161000.00 , sumValue ) ;
422+ var avgValue = dbContext . ExecuteScalar < decimal > ( avg ) ;
423+ Assert . AreEqual ( ( decimal ) 6520.000000 , avgValue ) ;
424+ var singleValue = dbContext . ExecuteScalar < string > ( singleValueSelect ) ;
425+ Assert . AreEqual ( "2" , singleValue ) ;
426+ }
427+
428+ [ TestMethod ]
429+ [ TestCategory ( DB_TESTS ) , TestCategory ( MSSQL_TESTS ) ]
430+ public void Test_MSSQL_ExecuteScalar_As_TypedReturn_DefaultValue ( )
431+ {
432+ var dBNullValue = Queries . MSSQLQueries . TestDB . ScalarQueries . DB_Null_Value ;
433+
434+ var dbContext = new DBContext ( DB . MSSQL , MSSQLConnectionString ) ;
435+
436+ dynamic result = dbContext . ExecuteScalar < int > ( dBNullValue ) ;
437+ Assert . IsInstanceOfType < int > ( result ) ;
438+ Assert . AreEqual ( default ( int ) , result ) ;
439+
440+ result = dbContext . ExecuteScalar < long > ( dBNullValue ) ;
441+ Assert . IsInstanceOfType < long > ( result ) ;
442+ Assert . AreEqual ( default ( long ) , result ) ;
443+
444+ result = dbContext . ExecuteScalar < short > ( dBNullValue ) ;
445+ Assert . IsInstanceOfType < short > ( result ) ;
446+ Assert . AreEqual ( default ( short ) , result ) ;
447+
448+ result = dbContext . ExecuteScalar < uint > ( dBNullValue ) ;
449+ Assert . IsInstanceOfType < uint > ( result ) ;
450+ Assert . AreEqual ( default ( uint ) , result ) ;
451+
452+ result = dbContext . ExecuteScalar < ulong > ( dBNullValue ) ;
453+ Assert . IsInstanceOfType < ulong > ( result ) ;
454+ Assert . AreEqual ( default ( ulong ) , result ) ;
455+
456+ result = dbContext . ExecuteScalar < ushort > ( dBNullValue ) ;
457+ Assert . IsInstanceOfType < ushort > ( result ) ;
458+ Assert . AreEqual ( default ( ushort ) , result ) ;
459+
460+ result = dbContext . ExecuteScalar < decimal > ( dBNullValue ) ;
461+ Assert . IsInstanceOfType < decimal > ( result ) ;
462+ Assert . AreEqual ( default ( decimal ) , result ) ;
463+
464+ result = dbContext . ExecuteScalar < double > ( dBNullValue ) ;
465+ Assert . IsInstanceOfType < double > ( result ) ;
466+ Assert . AreEqual ( default ( double ) , result ) ;
467+
468+ result = dbContext . ExecuteScalar < float > ( dBNullValue ) ;
469+ Assert . IsInstanceOfType < float > ( result ) ;
470+ Assert . AreEqual ( default ( float ) , result ) ;
471+
472+ result = dbContext . ExecuteScalar < byte > ( dBNullValue ) ;
473+ Assert . IsInstanceOfType < byte > ( result ) ;
474+ Assert . AreEqual ( default ( byte ) , result ) ;
475+
476+ result = dbContext . ExecuteScalar < bool > ( dBNullValue ) ;
477+ Assert . IsInstanceOfType < bool > ( result ) ;
478+ Assert . AreEqual ( default ( bool ) , result ) ;
479+
480+ result = dbContext . ExecuteScalar < DateTime > ( dBNullValue ) ;
481+ Assert . IsInstanceOfType < DateTime > ( result ) ;
482+ Assert . AreEqual ( default ( DateTime ) , result ) ;
483+
484+ result = dbContext . ExecuteScalar < Guid > ( dBNullValue ) ;
485+ Assert . IsInstanceOfType < Guid > ( result ) ;
486+ Assert . AreEqual ( default ( Guid ) , result ) ;
487+
488+ result = dbContext . ExecuteScalar < string > ( dBNullValue ) ;
489+ Assert . IsNull ( result ) ;
490+ Assert . AreEqual ( default ( string ) , result ) ;
491+
492+ result = dbContext . ExecuteScalar < int ? > ( dBNullValue ) ;
493+ Assert . IsNull ( result ) ;
494+ Assert . AreEqual ( default ( int ? ) , result ) ;
495+
496+ result = dbContext . ExecuteScalar < long ? > ( dBNullValue ) ;
497+ Assert . IsNull ( result ) ;
498+ Assert . AreEqual ( default ( long ? ) , result ) ;
499+
500+ result = dbContext . ExecuteScalar < short ? > ( dBNullValue ) ;
501+ Assert . IsNull ( result ) ;
502+ Assert . AreEqual ( default ( short ? ) , result ) ;
503+
504+ result = dbContext . ExecuteScalar < decimal ? > ( dBNullValue ) ;
505+ Assert . IsNull ( result ) ;
506+ Assert . AreEqual ( default ( decimal ? ) , result ) ;
507+
508+ result = dbContext . ExecuteScalar < double ? > ( dBNullValue ) ;
509+ Assert . IsNull ( result ) ;
510+ Assert . AreEqual ( default ( double ? ) , result ) ;
511+
512+ result = dbContext . ExecuteScalar < float ? > ( dBNullValue ) ;
513+ Assert . IsNull ( result ) ;
514+ Assert . AreEqual ( default ( float ? ) , result ) ;
515+
516+ result = dbContext . ExecuteScalar < bool ? > ( dBNullValue ) ;
517+ Assert . IsNull ( result ) ;
518+ Assert . AreEqual ( default ( bool ? ) , result ) ;
519+
520+ result = dbContext . ExecuteScalar < DateTime ? > ( dBNullValue ) ;
521+ Assert . IsNull ( result ) ;
522+ Assert . AreEqual ( default ( DateTime ? ) , result ) ;
523+ }
524+
525+ [ TestMethod ]
526+ [ TestCategory ( DB_TESTS ) , TestCategory ( MSSQL_TESTS ) ]
527+ public void Test_MSSQL_ExecuteScalar_As_TypedReturn_UnsupportedCommands ( )
528+ {
529+ var sqlStatements = new List < string >
530+ {
531+ Queries . MSSQLQueries . TestDB . DDL . Create_Table ,
532+ Queries . MSSQLQueries . TestDB . DDL . Alter_Table ,
533+ Queries . MSSQLQueries . TestDB . DDL . Comment_Table ,
534+ Queries . MSSQLQueries . TestDB . DDL . Truncate_Table ,
535+ Queries . MSSQLQueries . TestDB . DDL . Drop_Table ,
536+
537+ Queries . MSSQLQueries . TestDB . DML . InsertSql ,
538+ Queries . MSSQLQueries . TestDB . DML . UpdateSql ,
539+ Queries . MSSQLQueries . TestDB . DML . DeleteSql ,
540+
541+ Queries . MSSQLQueries . TestDB . DCL . GrantSql_Command_Table_User ,
542+ Queries . MSSQLQueries . TestDB . DCL . RevokeSql_Command_Table_User
543+ } ;
544+
545+ foreach ( var sqlStatement in sqlStatements )
546+ {
547+ try
548+ {
549+ var dbContext = new DBContext ( DB . MSSQL , MSSQLConnectionString ) ;
550+ dbContext . ExecuteScalar < string > ( sqlStatement ) ;
551+ Assert . Fail ( "No Exception" ) ;
552+ }
553+ catch ( QueryDBException ex )
554+ {
555+ Assert . AreEqual ( "Only SELECT queries are supported here." , ex . Message ) ;
556+ Assert . AreEqual ( "UnsupportedCommand" , ex . ErrorType ) ;
557+ Assert . AreEqual ( "'ExecuteScalar' only supports SELECT queries that have a scalar (single value) return." , ex . AdditionalInfo ) ;
558+ }
559+ }
560+ }
561+
562+ #endregion
563+
313564 #region Execute Command Tests - << int ExecuteCommand(string sqlStatement) >>
314565
315566 [ TestMethod ]
0 commit comments