/// <summary>
 ///
 /// </summary>
 /// <param name="employee"></param>
 /// <returns></returns>
 internal IDbQuery UpsertEmployee(EmployeeDto employee)
 {
     return(DbFluent.Upsert(Table <DbEmployee>())
            .WithQueries(
                DbFluent.UpdateQuery(Table <DbEmployee>())
                .WithFields(q => new[]
     {
         DbFluent.FieldAsParameter(nameof(DbEmployee.Code), q.UseParameter("code", DataValueTypes.Text)),
         DbFluent.FieldAsParameter(nameof(DbEmployee.ByteArrayField), q.UseParameter("ByteArrayField", DataValueTypes.Text)),
         DbFluent.FieldAsParameter(nameof(DbEmployee.DoubleField), q.UseParameter("DoubleField", DataValueTypes.Text)),
         DbFluent.FieldAsParameter(nameof(DbEmployee.DoubleField), q.UseParameter("DoubleField", DataValueTypes.Text)),
         DbFluent.FieldAsParameter(nameof(DbEmployee.DateTimeField), q.UseParameter("DateTimeField", DataValueTypes.Text)),
         DbFluent.FieldAsParameter(nameof(DbEmployee.LongField), q.UseParameter("LongField", DataValueTypes.Date))
     }),
                DbFluent.InsertQuery(Table <DbEmployee>())
                .WithFields(q => new[]
     {
         DbFluent.FieldAsParameter(nameof(DbEmployee.Code), q.UseParameter("code", DataValueTypes.Text)),
         DbFluent.FieldAsParameter(nameof(DbEmployee.ByteArrayField), q.UseParameter("ByteArrayField", DataValueTypes.Text)),
         DbFluent.FieldAsParameter(nameof(DbEmployee.DoubleField), q.UseParameter("DoubleField", DataValueTypes.Text)),
         DbFluent.FieldAsParameter(nameof(DbEmployee.DateTimeField), q.UseParameter("DateTimeField", DataValueTypes.Text)),
         DbFluent.FieldAsParameter(nameof(DbEmployee.LongField), q.UseParameter("LongField", DataValueTypes.Date))
     })
                .WithParameters(
                    ElementFactory.CreateScalar("code", employee.Code),
                    ElementFactory.CreateScalar("ByteArrayField", employee.ByteArrayField),
                    ElementFactory.CreateScalar("DoubleField", employee.DoubleField),
                    ElementFactory.CreateScalar("DateTimeField", employee.DateTimeField),
                    ElementFactory.CreateScalar("LongField", employee.LongField)))
            .WithCTE(
                DbFluent.TableAsQuery(
                    DbFluent.SelectQuery(null)
                    .WithFields(q => new[]
     {
         DbFluent.FieldAsParameter(nameof(DbEmployee.Code), q.UseParameter("code", DataValueTypes.Text))
     }))
                .WithAlias("T"))
            .WithParameters(
                ElementFactory.CreateScalar("code", employee.Code),
                ElementFactory.CreateScalar("ByteArrayField", employee.ByteArrayField),
                ElementFactory.CreateScalar("DoubleField", employee.DoubleField),
                ElementFactory.CreateScalar("DateTimeField", employee.DateTimeField),
                ElementFactory.CreateScalar("LongField", employee.LongField)));
 }