示例#1
0
        // Build SELECT Query with Multiple fields
        public void TestSelectMultipleBuild()
        {
            QueryBuilder query = new QueryBuilder();

            query.AddField(Field.Fields.merkkiSelvakielinen, "BMW");
            query.AddField(Field.Fields.valmistenumero2, "123456789");
            query.Build(QueryBuilder.QueryType.Select);
            string actual   = query.QueryString;
            string expected = "SELECT * FROM Vehicle WHERE merkkiSelvakielinen LIKE '%BMW%' AND valmistenumero2='123456789' LIMIT 100;";

            Assert.AreEqual(expected, actual);
        }
        // Get Data from API
        public void TestLoadData()
        {
            QueryBuilder query = new QueryBuilder();

            query.AddField(Field.Fields.ID, "8897");
            query.Build(QueryBuilder.QueryType.Select);
            string actual   = VehicleAPI.LoadData(query.QueryString);
            string expected = "[{\"ID\":\"8897\",\"ajoneuvoluokka_koodi\":\"O2\",\"ajoneuvoluokka_lyhytselite\":\"Perävaunu\",\"ajoneuvoluokka_pitkaselite\":\"Perävaunu, 750 < m <= 3500 kg\",\"ensirekisterointipvm\":\"1998-04-22\",\"ajoneuvoryhma\":\"Keskiakseliperävaunu\",\"ajoneuvonkaytto\":\"Yksityinen\",\"variantti\":null,\"versio\":null,\"kayttoonottopvm\":\"1998-04-22\",\"vari\":null,\"ovienLukumaara\":null,\"korityyppi_koodi\":null,\"korityyppi_pitkaselite\":null,\"ohjaamotyyppi\":null,\"istumapaikkojenLkm\":null,\"omamassa\":\"640\",\"teknSuurSallKokmassa\":null,\"tieliikSuurSallKokmassa\":\"2100\",\"ajonKokPituus\":null,\"ajonLeveys\":\"2250\",\"ajonKorkeus\":null,\"kayttovoima\":null,\"iskutilavuus\":null,\"suurinNettoteho\":null,\"sylintereidenLkm\":null,\"ahdin\":null,\"sahkohybridi\":null,\"sahkohybridinluokka\":null,\"merkkiSelvakielinen\":\"Omavalmiste\",\"mallimerkinta\":\"PV 2100\",\"vaihteisto\":null,\"vaihteidenLkm\":null,\"kaupallinenNimi\":null,\"voimanvalJaTehostamistapa\":\"8\",\"tyyppihyvaksyntanro\":null,\"yksittaisKayttovoima\":null,\"kunta\":\"Oulu\",\"Co2\":null,\"matkamittarilukema\":null,\"alue\":\"901\",\"valmistenumero2\":null}]";

            Assert.AreEqual(expected, actual);
        }
示例#3
0
        // Build SELECT Query with Single fields
        public void TestSelectSingleBuild()
        {
            QueryBuilder query = new QueryBuilder();

            query.AddField(Field.Fields.merkkiSelvakielinen, "BMW");
            query.Build(QueryBuilder.QueryType.Select);
            string actual   = query.QueryString;
            string expected = "SELECT * FROM Vehicle WHERE merkkiSelvakielinen LIKE '%BMW%' LIMIT 100;";

            Assert.AreEqual(expected, actual);
        }
        // Test Get Vehicles
        public void TestGetVehicles()
        {
            QueryBuilder query = new QueryBuilder();

            query.AddField(Field.Fields.ID, "8897");
            query.Build(QueryBuilder.QueryType.Select);
            List <Vehicle> vehicles = VehicleAPI.GetVehicles(query.QueryString);
            string         actual   = vehicles[0].Ensirekisterointipvm;
            string         expected = "1998-04-22";

            Assert.AreEqual(expected, actual);
        }
示例#5
0
        public void ApplyPaginationForOracle(string orderByFieldAlias, SortOrderTypes sortDirection, int startRow, int endRow)
        {
            //add order by clause
            this.AddOrderByClause(orderByFieldAlias, sortDirection);

            //Create a new query builder for paged query
            QueryBuilder pagedQueryBuilder = new QueryBuilder(SQLType.SelectSQL, this.Name);

            //Add current query builder as an inner query to new query builder
            pagedQueryBuilder.AddTable(this.QueryBuilder, pagedTableName);

            //Add all columns to new query builder
            foreach (var fieldName in this.FieldNames)
            {
                pagedQueryBuilder.AddField(pagedTableName, fieldName, fieldName);
            }

            //Add row number column to the new query builder
            //TO DO:Add this to the Data Helper
            pagedQueryBuilder.AddField("ROWNUM AS " + rowNumberColumnNameForOracle);

            this.QueryBuilder = pagedQueryBuilder;

            //Add new query builder as an inner query to ANOTHER new query builder
            QueryBuilder newPagedQueryBuilder = new QueryBuilder(SQLType.SelectSQL, this.Name);

            newPagedQueryBuilder.AddTable(pagedQueryBuilder, newPagedTableName);

            foreach (var fieldName in this.FieldNames)
            {
                if (fieldName != rowNumberColumnNameForOracle)
                {
                    newPagedQueryBuilder.AddField(newPagedTableName, fieldName, fieldName);
                }
            }
            //Add pagination where clause to new query builder
            newPagedQueryBuilder.AddWhereClauseItem(DataHelper.Between(rowNumberColumnNameForOracle, startRow.ToString(CultureInfo.InvariantCulture), endRow.ToString(CultureInfo.InvariantCulture)));

            this.QueryBuilder = newPagedQueryBuilder;
        }
示例#6
0
        /// <summary>
        /// Apply paginiation to the query
        /// </summary>
        /// <param name="orderByFieldList">fileds to sort the data, in order to get page numbers</param>
        /// <param name="sortDirectionList">sort direction</param>
        /// <param name="startRow">page start row</param>
        /// <param name="endRow">page end row</param>
        public void ApplyPagination(Collection <SqlExpressionBase> orderByFieldList,
                                    Collection <SortDirection> sortDirectionList, SqlExpressionBase startRow, SqlExpressionBase endRow)
        {
            //Add row number column to the current query builder
            string[]        fieldList          = new string[orderByFieldList.Count];
            SortDirection[] sortDirectionArray = new SortDirection[sortDirectionList.Count];
            for (int i = 0; i < orderByFieldList.Count; i++)
            {
                fieldList.SetValue(orderByFieldList[i].ToString(), i);
            }
            for (int i = 0; i < sortDirectionList.Count; i++)
            {
                sortDirectionArray.SetValue(sortDirectionList[i], i);
            }

            this.QueryBuilder.AddField(DataHelper.RowNumber(fieldList, sortDirectionArray));

            //Create a new query builder for paged query
            QueryBuilder pagedQueryBuilder = new QueryBuilder(SQLType.SelectSQL, this.Name);

            //Add current query builder as an inner query to new query builder
            pagedQueryBuilder.AddTable(this.QueryBuilder, pagedTableName);

            //Add pagination where clause to new query builder
            pagedQueryBuilder.AddWhereClauseItem(DataHelper.Between(rowNumberColumnName, startRow.ToString(), endRow.ToString()));

            //Add all columns to new query builder
            foreach (var fieldName in this.FieldNames)
            {
                pagedQueryBuilder.AddField(pagedTableName, fieldName, fieldName);
            }

            //Add all parameters to new query builder
            foreach (var parameter in this.QueryBuilder.Parameters)
            {
                pagedQueryBuilder.Parameters.Add(parameter);
            }

            //Replace curretn query builder with new query builder
            this.QueryBuilder = pagedQueryBuilder;
        }
示例#7
0
        /// <summary>
        /// Wrapp the current Query Builder in an outer query
        /// </summary>
        public void WrapInOuterQuery()
        {
            //Create a new query builder for paged query
            QueryBuilder pagedQueryBuilder = new QueryBuilder(SQLType.SelectSQL, this.Name);

            //Add current query builder as an inner query to new query builder
            pagedQueryBuilder.AddTable(this.QueryBuilder, pagedTableName);

            //Add all columns to new query builder
            foreach (var fieldName in this.FieldNames)
            {
                pagedQueryBuilder.AddField(pagedTableName, fieldName, fieldName);
            }

            //Add all parameters to new query builder
            foreach (var parameter in this.QueryBuilder.Parameters)
            {
                pagedQueryBuilder.Parameters.Add(parameter);
            }

            //Replace curretn query builder with new query builder
            this.QueryBuilder = pagedQueryBuilder;
            this.Name         = pagedTableName;
        }
示例#8
0
        async private void BtnDoSearch_Click(object sender, RoutedEventArgs e)
        {
            //Upon clock perform the folllowing actions if possible.
            try
            {
                QueryBuilder searchquery = new QueryBuilder();
                //If Brand field is not empty, perform the following:
                if (txtBrand.Text != "")

                {
                    searchquery.AddField(Field.Fields.merkkiSelvakielinen, txtBrand.Text);
                }
                //If Model field is not empty, perform the following:
                if (txtModel.Text != "")
                {
                    searchquery.AddField(Field.Fields.mallimerkinta, txtModel.Text);
                }

                //If Color field is not empty, perform the following:
                if (cbColor.SelectedValue != null)
                {
                    searchquery.AddField(Field.Fields.vari, cbColor.SelectedValue.ToString());
                }

                //If First Registration Date field is not empty and the checkbox was checked to activate the field, perform the following:
                if (dpFirstRegDate1.Date != null && dpFirstRegDate2.Date != null && cbFirstRegDate.IsChecked == true)
                {
                    searchquery.AddField(Field.Fields.ensirekisterointipvm, dpFirstRegDate1.Date.ToString("yyyy-MM-dd"), dpFirstRegDate2.Date.ToString("yyyy-MM-dd"));
                }

                if (dpDeployDate1.Date != null && dpDeployDate2.Date != null && cbDeployDate.IsChecked == true)
                {
                    searchquery.AddField(Field.Fields.kayttoonottopvm, dpDeployDate1.Date.ToString("yyyy-MM-dd"), dpDeployDate2.Date.ToString("yyyy-MM-dd"));
                }

                //If Fuel Type field is not empty, perform the following:
                if (cbFuelType.SelectedValue != null)
                {
                    searchquery.AddField(Field.Fields.kayttovoima, cbFuelType.SelectedValue.ToString());
                }

                //If Frame Type field is not empty, perform the following:
                if (cbFrameType.SelectedValue != null)
                {
                    searchquery.AddField(Field.Fields.korityyppi_pitkaselite, cbFrameType.SelectedValue.ToString());
                }

                //If County field is not empty, perform the following:
                if (cbCounty.SelectedValue != null)
                {
                    searchquery.AddField(Field.Fields.kunta, cbCounty.SelectedValue.ToString());
                }

                //If Gears field is not empty, perform the following:
                if (txtGears.Text != "")
                {
                    int value;
                    if (int.TryParse(txtGears.Text, out value) == false)
                    {
                        throw new Exception("Number of Gears value isn't integer");
                    }
                    searchquery.AddField(Field.Fields.vaihteisto, value.ToString());
                }

                //If Serial Number field is not empty, perform the following:
                if (txtSerialNmb.Text != "")
                {
                    searchquery.AddField(Field.Fields.valmistenumero2, txtSerialNmb.Text);
                }

                //If Co2 field is not empty and the input is in integer format, perform the following:
                if (txtStartCo2.Text != "" && txtEndCo2.Text != "")
                {
                    int start, end;
                    if (int.TryParse(txtStartCo2.Text, out start) == false)
                    {
                        throw new Exception("Co2 Start value isn't integer");
                    }
                    if (int.TryParse(txtEndCo2.Text, out end) == false)
                    {
                        throw new Exception("Co2 End value isn't integer");
                    }
                    searchquery.AddField(Field.Fields.Co2, start.ToString(), end.ToString());
                }

                //If Mileage field is not empty and the input is in integer format, perform the following:
                if (txtStartMileage.Text != "" && txtEndMileage.Text != "")
                {
                    int start, end;
                    if (int.TryParse(txtStartMileage.Text, out start) == false)
                    {
                        throw new Exception("Mileage Start value isn't integer");
                    }
                    if (int.TryParse(txtEndMileage.Text, out end) == false)
                    {
                        throw new Exception("Mileage End value isn't integer");
                    }
                    searchquery.AddField(Field.Fields.matkamittarilukema, start.ToString(), end.ToString());
                }

                //If Mass field is not empty and the input is in integer format, perform the following:
                if (txtStartMass.Text != "" && txtEndMass.Text != "")
                {
                    int start, end;
                    if (int.TryParse(txtStartMass.Text, out start) == false)
                    {
                        throw new Exception("Weight Start value isn't integer");
                    }
                    if (int.TryParse(txtEndMass.Text, out end) == false)
                    {
                        throw new Exception("Weight End value isn't integer");
                    }
                    searchquery.AddField(Field.Fields.omamassa, start.ToString(), end.ToString());
                }

                //If Cylinder Cap field is not empty and the input is in integer format, perform the following:
                if (txtStartCylinderCap.Text != "" && txtEndCylinderCap.Text != "")
                {
                    int start, end;
                    if (int.TryParse(txtStartCylinderCap.Text, out start) == false)
                    {
                        throw new Exception("Engine Size Start value isn't integer");
                    }
                    if (int.TryParse(txtEndCylinderCap.Text, out end) == false)
                    {
                        throw new Exception("Engine Size End value isn't integer");
                    }
                    searchquery.AddField(Field.Fields.sylintereidenLkm, start.ToString(), end.ToString());
                }

                //If Power field is not empty and the input is in integer format, perform the following:
                if (txtStartNetPower.Text != "" && txtEndNetPower.Text != "")
                {
                    int start, end;
                    if (int.TryParse(txtStartNetPower.Text, out start) == false)
                    {
                        throw new Exception("Power Start value isn't integer");
                    }
                    if (int.TryParse(txtEndNetPower.Text, out end) == false)
                    {
                        throw new Exception("Power End value isn't integer");
                    }
                    searchquery.AddField(Field.Fields.suurinNettoteho, start.ToString(), end.ToString());
                }

                //If Car Class field is not empty, perform the following:
                if (cbCarClass.SelectedValue != null)
                {
                    searchquery.AddField(Field.Fields.ajoneuvoluokka_koodi, cbCarClass.SelectedValue.ToString());
                }

                //If Electric Hybrid field is checked, perform the following:
                if (ckbElecHybrid.IsChecked == true)
                {
                    searchquery.AddField(Field.Fields.sahkohybridi, "1");
                }

                // Build Query and set limit to 100
                searchquery.Build(QueryBuilder.QueryType.Select, 1000);

                // Activate ProgressSpinner, Show Progress Text and Disable Search button
                SearchProgress.IsActive = true;
                txtSearchProgress.Text  = "Searching...";
                btnDoSearch.IsEnabled   = false;
                // Load Vehicles from API asynchronously
                SearchResult.Vehicles = await VehicleAPI.GetVehiclesAsync(searchquery.QueryString);

                // Disable ProgressSpinner, Show Progress Text and Enable Search button
                SearchProgress.IsActive = false;
                txtSearchProgress.Text  = "Done";
                btnDoSearch.IsEnabled   = true;
                // If there was no result, stay in search page
                if (SearchResult.Vehicles.Count > 0)
                {
                    // Add Search to History
                    SearchHistory.AddItem(new SearchHistoryItem("Search", DateTime.Now, SearchResult.Vehicles.Count + " results", searchquery.QueryString, searchquery.FieldsToString()));
                    SearchHistory.Save();
                    // Navigate to SearchResult page
                    Frame.Navigate(typeof(SearchResult), null, new SuppressNavigationTransitionInfo());
                }
            }
            //Handle exceptions
            catch (Exception ex)
            {
                MessageDialog dialog = new MessageDialog(ex.Message);
                dialog.Title = "Info";
                await dialog.ShowAsync();

                // Disable ProgressSpinner, Show Progress Text and Enable Search button
                SearchProgress.IsActive = false;
                txtSearchProgress.Text  = "Done";
                btnDoSearch.IsEnabled   = true;
            }
        }