예제 #1
0
        public Object UpdateTableValues(String tableName, String setString, dynamic whereField)
        {
            String          useDB              = getDatabaseName();
            TableStructure  ts                 = null;
            TableController tc                 = new TableController();
            List <String>   whereItemField     = new List <string>();
            ArrayList       whereFieldPosition = null;
            List <String>   whereItemFieldList = null;
            IFormatter      formatter          = new BinaryFormatter();

            if (whereField != null)
            {
                whereItemFieldList = OperatorSplit(whereField);

                whereItemField.Add(whereItemFieldList[0]);
                String[] whereFieldsArray = new String[whereItemField.Count];
                whereFieldsArray = whereItemField.ToArray();

                whereFieldPosition = tc.FindValuePosition(dbPath, useDB, tableName, whereFieldsArray);
            }

            ArrayList returnRecords        = null;
            ArrayList columnToSetPositions = new ArrayList();

            String[] setColumnName = setString.Split('=');
            columnToSetPositions = tc.FindValuePosition(dbPath, useDB, tableName, setColumnName);
            int    columnToSetPosition = int.Parse(columnToSetPositions[0].ToString());
            String valueToSet          = setColumnName[1].Replace("'", "");

            foreach (int block in tc.GetBlock(dbPath, useDB, tableName))
            {
                returnRecords = new ArrayList();
                String filePath = dbPath + useDB + "/" + tableName + "/" + block + ".obj";

                try
                {
                    Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                    ts = (TableStructure)formatter.Deserialize(stream);
                    stream.Close();
                }
                catch (Exception ex) {
                    Console.Write(ex.Message.ToString());
                }

                // ArrayList<String> returnRows = new ArrayList<String>();
                foreach (ArrayList rows in ts.table)
                {
                    string ind           = whereFieldPosition[0].ToString();
                    string row           = rows[int.Parse(ind)].ToString();
                    string field         = whereItemFieldList[1].ToString().TrimEnd(';');
                    string newWhereField = whereField.ToString().TrimEnd(';');
                    if (whereField != null)
                    {
                        if (Operators(newWhereField, row, whereItemFieldList[1]))
                        {
                            rows.Insert(columnToSetPosition, valueToSet.ToString().TrimEnd(';'));
                        }
                    }
                    else
                    {
                        rows.Insert(columnToSetPosition, valueToSet);
                    }
                    returnRecords.Add(rows);
                }

                ts.table = returnRecords;
                try
                {
                    if (File.Exists(filePath))
                    {
                        File.Delete(filePath);
                    }

                    Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Write);
                    formatter.Serialize(stream, ts);
                    stream.Close();
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message.ToString());
                }
            }
            return("Delete action completed");
        }
예제 #2
0
        public Object DeleteRecord(String tableName, dynamic whereField)
        {
            String          useDB              = getDatabaseName();
            TableStructure  ts                 = null;
            TableController to                 = new TableController();
            String          filePath           = "";
            List <String>   whereItemField     = new List <String>();
            ArrayList       whereFieldPosition = null;
            List <String>   whereItemFieldList = new List <String>();
            IFormatter      formatter          = new BinaryFormatter();

            if (whereField != null)
            {
                whereItemFieldList = OperatorSplit(whereField);

                whereItemField.Add(whereItemFieldList[0].Trim());
                String[] whereFieldsArray = new String[whereItemField.Count()];
                whereFieldsArray = whereItemField.ToArray();

                whereFieldPosition = to.FindValuePosition(dbPath, useDB, tableName, whereFieldsArray);
            }
            ArrayList blocks = to.GetBlock(dbPath, useDB, tableName);

            //ArrayList<ArrayList<String>> returnRecords = new ArrayList<ArrayList<String>>();

            foreach (int block in blocks)
            {
                // int newBlock = 0;
                filePath = useDB + "/" + tableName + "/" + block + ".obj";
                try
                {
                    Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                    ts = (TableStructure)(formatter.Deserialize(stream));
                    stream.Close();
                }
                catch (Exception ex) {
                    Console.Write(ex.Message.ToString());
                }

                ArrayList rowsToBeDeleted = new ArrayList();
                foreach (ArrayList rows in ts.table)
                {
                    string ind           = whereFieldPosition[0].ToString();
                    string row           = rows[int.Parse(ind)].ToString();
                    string field         = whereItemFieldList[1].ToString().TrimEnd(';');
                    string newWhereField = whereField.ToString().TrimEnd(';');

                    if (whereField != null)
                    {
                        if (Operators(whereField, row, whereItemFieldList[1]))
                        {
                            // returnRecords.add(rows);
                            rowsToBeDeleted.Add(rows);
                        }
                    }
                }
                ts.table.Remove(rowsToBeDeleted);
                try
                {
                    if (File.Exists(filePath))
                    {
                        File.Delete(filePath);
                    }

                    Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Write);
                    formatter.Serialize(stream, ts);
                    stream.Close();
                }
                catch (IOException e)
                {
                    Console.Write(e.Message.ToString());
                }
                // if no where clause is present delete all the file in the sector
            }

            // add a new file if no where clause is present
            if (!whereField != null)
            {
                try {
                    ts.table = null;
                    Stream stream = new FileStream(dbPath + useDB + "/" + tableName + "/" + 0 + ".obj", FileMode.Open, FileAccess.Write);
                    formatter.Serialize(stream, ts);
                    stream.Close();
                } catch (IOException ex)
                {
                    // TODO Auto-generated catch block
                    Console.Write(ex.Message.ToString());
                }
            }
            return("Row(s) deleted");
        }
예제 #3
0
        public ArrayList SelectTableValues(String tableName, String fieldsString, dynamic whereField)
        {
            String          useDB     = getDatabaseName();
            IFormatter      formatter = new BinaryFormatter();
            TableController to        = new TableController();
            // IndexStructure ix = null;
            TableStructure ts = null;
            // TableOperations to = new TableOperations();
            List <String> whereItemField     = new List <string>();
            ArrayList     whereFieldPosition = null;
            String        indexFieldName     = "";
            List <String> whereItemFieldList = null;

            if (!(String.IsNullOrEmpty(whereField)))
            {
                whereItemFieldList = OperatorSplit(whereField);

                whereItemField.Add(whereItemFieldList[0]);
                String[] whereFieldsArray = new String[whereItemField.Count()];
                whereFieldsArray = whereItemField.ToArray();

                whereFieldPosition = to.FindValuePosition(dbPath, useDB, tableName, whereFieldsArray);
            }

            ArrayList returnRecords   = new ArrayList();
            ArrayList columnPositions = new ArrayList();

            String[] columnNames = fieldsString.Split(',');
            columnPositions = to.FindValuePosition(dbPath, useDB, tableName, columnNames);
            int blockPointer  = 0;
            int recordPointer = 0;

            ArrayList blocks = new ArrayList();

            if ((indexFieldName.Length == 0) && whereField != null)
            {
                blocks = to.GetBlock(dbPath, useDB, tableName);
            }
            else
            {
                blocks.Add(blockPointer);
            }

            foreach (int block in blocks)
            {
                String filePath = dbPath + useDB + "/" + tableName + "/" + block + ".obj";
                try
                {
                    Stream stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);

                    ts = (TableStructure)(formatter.Deserialize(stream));
                    stream.Close();
                }
                catch (IOException i)
                {
                    Console.Write(i.Message.ToString());
                }

                if ((indexFieldName.Length == 0) || (indexFieldName.Equals(null)))
                {
                    ts.table = ts.table;
                }
                else
                {
                    //ArrayList myRow = new ArrayList();
                    var myRow = ts.table[recordPointer];
                    ts.table = null;
                    ts.table.Add(myRow);
                }

                foreach (ArrayList row in ts.table)
                {
                    ArrayList returnRows = new ArrayList();
                    //foreach (int columnPosition in columnPositions)
                    //{
                    if (!String.IsNullOrEmpty(whereField))
                    {
                        string ind           = whereFieldPosition[0].ToString();
                        string rows          = row[int.Parse(ind)].ToString();
                        string field         = whereItemFieldList[1].ToString().TrimEnd(';');
                        string newWhereField = whereField.ToString().TrimEnd(';');

                        if (Operators(newWhereField, rows, field))
                        {
                            returnRows.Add(row);
                            returnRecords.Add(returnRows);
                        }
                    }
                    else
                    {
                        returnRows.Add(row);
                        returnRecords.Add(returnRows);
                    }

                    //}
                    //returnRecords.Add(returnRows);
                }
            }
            returnRecords = SetColumnPosition(columnPositions, returnRecords);
            return(returnRecords);
        }