diff --git a/DariaZvereva/grep.exe.stackdump b/DariaZvereva/grep.exe.stackdump
new file mode 100644
index 00000000..20a50a16
--- /dev/null
+++ b/DariaZvereva/grep.exe.stackdump
@@ -0,0 +1,17 @@
+MSYS-1.0.12 Build:2012-07-05 14:56
+Exception: STATUS_ACCESS_VIOLATION at eip=00788DAA
+eax=680A220C ebx=68573734 ecx=003028AA edx=00000124 esi=00000000 edi=685700D4
+ebp=0029FE90 esp=0029FE6C program=C:\Program Files (x86)\Git\bin\grep.exe
+cs=0023 ds=002B es=002B fs=0053 gs=002B ss=002B
+Stack trace:
+Frame Function Args
+0029FE90 00788DAA (685700D4, 00000124, 00000003, 007844EA)
+0029FEE0 0078466B (00000000, E79C138C, 0029FF20, 00413CAC)
+0029FF00 00784C5F (004039A0, 00401000, 00000000, 00000000)
+0029FF20 00784C98 (00000000, 00000000, 00000000, 00000000)
+0029FF50 00413BBC (004039A0, 00000000, 00000000, 00000000)
+0029FF80 0040103D (7FFDE000, 74473720, E3AB5234, 0029FFDC)
+0029FF94 74473744 (7FFDE000, A74129A1, 00000000, 00000000)
+0029FFDC 770D9CD4 (FFFFFFFF, 770FD4DC, 00000000, 00000000)
+0029FFEC 770D9C9F (00401000, 7FFDE000, 00000000, 78746341)
+End of stack trace
\ No newline at end of file
diff --git a/DariaZvereva/pom.xml b/DariaZvereva/pom.xml
new file mode 100644
index 00000000..34028334
--- /dev/null
+++ b/DariaZvereva/pom.xml
@@ -0,0 +1,124 @@
+
+
+ 4.0.0
+
+ ru.fizteh.fivt.students
+ parent
+ 1.0-SNAPSHOT
+
+ ru.fizteh.fivt.students
+ DariaZvereva
+ 1.0-SNAPSHOT
+ DariaZvereva
+ http://maven.apache.org
+
+
+ UTF-8
+
+
+
+ org.twitter4j
+ twitter4j-stream
+ 4.0.4
+
+
+
+ com.beust
+ jcommander
+ 1.48
+
+
+
+ com.google.maps
+ google-maps-services
+ 0.1.7
+
+
+
+ com.google.code.geocoder-java
+ geocoder-java
+ 0.16
+
+
+ antlr
+ antlr
+ 2.7.7
+
+
+ org.codehaus.groovy
+ groovy
+ 1.8.3
+
+
+ junit
+ junit
+ 4.12
+ test
+
+
+ com.google.guava
+ guava
+ 18.0
+
+
+ com.h2database
+ h2
+ 1.4.190
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 2.10
+
+
+ copy-dependencies
+ package
+
+ copy-dependencies
+
+
+ ${project.build.directory}/dependency
+ false
+ false
+ true
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 2.4.1
+
+
+
+ ru.fizteh.fivt.students.DariaZvereva.MiniORM.Test
+
+
+
+ jar-with-dependencies
+
+
+
+
+ make-assembly
+
+ package
+
+ single
+
+
+
+
+
+
+
+
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregates.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregates.java
new file mode 100644
index 00000000..c87aa512
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregates.java
@@ -0,0 +1,37 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL;
+
+/**
+ * Created by Dasha on 10.11.2015.
+ */
+
+import ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators.Avg;
+import ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators.Count;
+import ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators.Max;
+import ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators.Min;
+
+import java.util.function.Function;
+
+/**
+ * Aggregate functions.
+ *
+ * @author akormushin
+ */
+public class Aggregates {
+
+ public static > Function max(Function expression) {
+ return new Max<>(expression);
+ }
+
+ public static > Function min(Function expression) {
+ return new Min<>(expression);
+ }
+
+ public static Function count(Function expression) {
+ return new Count<>(expression);
+ }
+
+ public static Function avg(Function expression) {
+ return new Avg<>(expression);
+ }
+
+}
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Aggregator.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Aggregator.java
new file mode 100644
index 00000000..4359ae76
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Aggregator.java
@@ -0,0 +1,11 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators;
+
+import java.util.List;
+import java.util.function.Function;
+
+/**
+ * Created by Dasha on 18.12.2015.
+ */
+public interface Aggregator extends Function {
+ R apply(List elements);
+}
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Avg.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Avg.java
new file mode 100644
index 00000000..7a16252b
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Avg.java
@@ -0,0 +1,24 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators;
+
+import java.util.List;
+import java.util.function.Function;
+
+/**
+ * Created by Dasha on 18.12.2015.
+ */
+public class Avg implements Aggregator {
+ private Function function;
+ public Avg(Function statement) {
+ function = statement;
+ }
+ @Override
+ public Double apply(List elements) {
+ return elements.stream().map(function).mapToDouble(element -> (Double) element)
+ .average().getAsDouble();
+ }
+
+ @Override
+ public Double apply(T t) {
+ return null;
+ }
+}
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Count.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Count.java
new file mode 100644
index 00000000..341f4153
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Count.java
@@ -0,0 +1,24 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators;
+
+import java.util.List;
+import java.util.function.Function;
+
+/**
+ * Created by Dasha on 18.12.2015.
+ */
+public class Count implements Aggregator {
+ private Function function;
+ public Count(Function statement) {
+ function = statement;
+ }
+
+ @Override
+ public Long apply(List elements) {
+ return elements.stream().map(function).distinct().count();
+ }
+
+ @Override
+ public Long apply(T t) {
+ return null;
+ }
+}
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Max.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Max.java
new file mode 100644
index 00000000..c9a6852c
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Max.java
@@ -0,0 +1,26 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators;
+
+import java.util.List;
+import java.util.function.Function;
+
+/**
+ * Created by Dasha on 18.12.2015.
+ */
+public class Max> implements Aggregator {
+
+ private Function function;
+ public Max(Function statement) {
+ function = statement;
+ }
+
+ @Override
+ public R apply(List elements) {
+ return elements.stream().map(function).max(R::compareTo).get();
+ }
+
+ @Override
+ public R apply(T t) {
+ return null;
+ }
+}
+
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Min.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Min.java
new file mode 100644
index 00000000..f5dc1ed2
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Aggregators/Min.java
@@ -0,0 +1,25 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators;
+
+import java.util.List;
+import java.util.function.Function;
+
+/**
+ * Created by Dasha on 18.12.2015.
+ */
+public class Min> implements Aggregator {
+
+ private Function function;
+ public Min(Function statement) {
+ function = statement;
+ }
+
+ @Override
+ public R apply(List elements) {
+ return elements.stream().map(function).min(R::compareTo).get();
+ }
+
+ @Override
+ public R apply(T t) {
+ return null;
+ }
+}
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/CQL.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/CQL.java
new file mode 100644
index 00000000..5392c4a9
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/CQL.java
@@ -0,0 +1,128 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
+
+
+/**
+ * Created by Dasha on 10.11.2015.
+ */
+
+public class CQL {
+
+ public static class Student {
+ private final String name;
+
+ private final LocalDate dateOfBith;
+
+ private final String group;
+
+ public String getName() {
+ return name;
+ }
+
+ public Student(String name, LocalDate dateOfBith, String group) {
+ this.name = name;
+ this.dateOfBith = dateOfBith;
+ this.group = group;
+ }
+
+ public LocalDate getDateOfBith() {
+ return dateOfBith;
+ }
+
+ public String getGroup() {
+ return group;
+ }
+
+ public long age() {
+ return ChronoUnit.YEARS.between(getDateOfBith(), LocalDateTime.now());
+ }
+
+ public static Student student(String name, LocalDate dateOfBith, String group) {
+ return new Student(name, dateOfBith, group);
+ }
+ }
+
+ public static class Group {
+ private final String group;
+ private final String mentor;
+
+ public Group(String group, String mentor) {
+ this.group = group;
+ this.mentor = mentor;
+ }
+
+ public String getGroup() {
+ return group;
+ }
+
+ public String getMentor() {
+ return mentor;
+ }
+ }
+
+
+ public static class Statistics {
+
+ private final String group;
+ private final Long count;
+ private final Long age;
+
+ public String getGroup() {
+ return group;
+ }
+
+ public Long getCount() {
+ return count;
+ }
+
+ public Long getAge() {
+ return age;
+ }
+
+ public Statistics(String group, Long count, Long age) {
+ this.group = group;
+ this.count = count;
+ this.age = age;
+ }
+
+ @Override
+ public String toString() {
+ return "Statistics{"
+ + "group='" + group + '\''
+ + ", count=" + count
+ + ", age=" + age
+ + '}';
+ }
+ }
+
+ public static void main(String[] args) {
+
+ /* Iterable statistics =
+ from(list(
+ student("ivanov", LocalDate.parse("1986-08-06"), "494"),
+ student("ivanov", LocalDate.parse("1986-08-06"), "494")))
+ .select(Statistics.class, Student::getGroup, count(Student::getGroup), avg(Student::age))
+ .where(rlike(Student::getName, ".*ov").and(s -> s.age() > 20))
+ .groupBy(Student::getGroup)
+ .having(s -> s.getCount() > 0)
+ .orderBy(asc(Student::getGroup), desc(count(Student::getGroup)))
+ .limit(100)
+ .union()
+ .from(list(student("ivanov", LocalDate.parse("1985-08-06"), "494")))
+ .selectDistinct(Statistics.class, s -> "all", count(s -> 1), avg(Student::age))
+ .execute();
+ System.out.println(statistics);
+
+ Iterable> mentorsByStudent =
+ from(list(student("ivanov", LocalDate.parse("1985-08-06"), "494")))
+ .join(list(new Group("494", "mr.sidorov")))
+ .on((s, g) -> Objects.equals(s.getGroup(), g.getGroup()))
+ .select(sg -> sg.getFirst().getName(), sg -> sg.getSecond().getMentor())
+ .execute();
+ System.out.println(mentorsByStudent);*/
+ }
+}
+
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Conditions.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Conditions.java
new file mode 100644
index 00000000..e243c173
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Conditions.java
@@ -0,0 +1,24 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL;
+
+/**
+ * Created by Dasha on 10.11.2015.
+ */
+
+import java.util.function.Function;
+import java.util.function.Predicate;
+
+public class Conditions {
+
+ public static Predicate rlike(Function expression, String regexp) {
+ return (item -> expression.apply(item).matches(regexp));
+ }
+
+ public static Predicate like(Function expression, String pattern) {
+ return (item -> expression.apply(item).equals(pattern));
+ }
+
+ public static Predicate notNull(Function expression) {
+ return (item -> !expression.apply(item).equals(null));
+ }
+
+}
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/From.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/From.java
new file mode 100644
index 00000000..a101dbe2
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/From.java
@@ -0,0 +1,28 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL;
+
+import java.util.function.Function;
+
+/**
+ * Created by Dasha on 18.12.2015.
+ */
+public class From {
+ private Iterable elements;
+
+ public From(Iterable initElements) {
+ elements = initElements;
+ }
+
+ public static From from(Iterable iterable) {
+ return new From<>(iterable);
+ }
+
+ public Select select(Class myClass,
+ Function... functions) {
+ return new Select<>(elements, myClass, false, functions);
+ }
+
+ public Select selectDistinct(Class myClass,
+ Function... functions) {
+ return new Select<>(elements, myClass, true, functions);
+ }
+}
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/OrderByConditions.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/OrderByConditions.java
new file mode 100644
index 00000000..97f026f9
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/OrderByConditions.java
@@ -0,0 +1,25 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL;
+
+/**
+ * Created by Dasha on 10.11.2015.
+ */
+
+import java.util.Comparator;
+import java.util.function.Function;
+
+/**
+ * OrderBy sort order helper methods.
+ *
+ * @author akormushin
+ */
+public class OrderByConditions {
+
+ public static > Comparator asc(Function expression) {
+ return (o1, o2) -> expression.apply(o1).compareTo(expression.apply(o2));
+ }
+
+ public static > Comparator desc(Function expression) {
+ return (o1, o2) -> expression.apply(o2).compareTo(expression.apply(o1));
+ }
+
+}
diff --git a/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Select.java b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Select.java
new file mode 100644
index 00000000..87f4e9f7
--- /dev/null
+++ b/DariaZvereva/src/main/java/ru/fizteh/fivt/students/DariaZvereva/CQL/Select.java
@@ -0,0 +1,154 @@
+package ru.fizteh.fivt.students.DariaZvereva.CQL;
+
+import ru.fizteh.fivt.students.DariaZvereva.CQL.Aggregators.Aggregator;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.*;
+import java.util.function.Function;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
+/**
+ * Created by Dasha on 18.12.2015.
+ */
+public class Select {
+ private Iterable elements;
+ private Class resultClass;
+ private int limit = 0;
+
+ private Predicate wherePredicate;
+ private Predicate havingPredicate;
+ private Function[] groupByFunctions;
+ private Function[] functions;
+ private Comparator[] comparators;
+
+ private Boolean isDistinct;
+
+ public Select(Iterable elems, Class initClass, boolean distinct,
+ Function[] initFunctions) {
+ elements = elems;
+ resultClass = initClass;
+ isDistinct = distinct;
+ functions = initFunctions;
+ }
+
+ public Select where(Predicate predicate) {
+ wherePredicate = predicate;
+ return this;
+ }
+
+ public Select having(Predicate initPredicate) {
+ havingPredicate = initPredicate;
+ return this;
+ }
+
+ public Select groupBy(Function... expressions) {
+ groupByFunctions = expressions;
+ if (expressions.length == 0) {
+ throw new IllegalStateException("Group by is made only by non-zero parameters");
+ }
+ isDistinct = true;
+ return this;
+ }
+
+ public Select orderBy(Comparator... initComparators) {
+ comparators = initComparators;
+ return this;
+ }
+
+ public Select limit(int n) {
+ limit = n;
+ return this;
+ }
+
+ public List execute() throws IllegalAccessException, InvocationTargetException, InstantiationException {
+ List tmpList = new ArrayList<>();
+ for (T it : elements) {
+ tmpList.add(it);
+ }
+
+ if (wherePredicate != null) {
+ tmpList = tmpList.stream().filter(wherePredicate).collect(Collectors.toList());
+ }
+
+ if (isDistinct) {
+ tmpList = tmpList.stream().distinct().collect(Collectors.toList());
+ }
+
+ if (limit != 0) {
+ tmpList = tmpList.stream().limit(limit).collect(Collectors.toList());
+ }
+
+ Map> resultMap = new HashMap<>();
+ if (groupByFunctions != null) {
+ Map> groupByResult = tmpList.stream().collect(Collectors.groupingBy((T elem) -> {
+ List