[glom/gtkmm4v4] gtkmm4: Adapt to Gnome::Gda::SqlOperatorType as enum class.
- From: Murray Cumming <murrayc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glom/gtkmm4v4] gtkmm4: Adapt to Gnome::Gda::SqlOperatorType as enum class.
- Date: Fri, 28 Apr 2017 07:16:20 +0000 (UTC)
commit b205ab03d2b64e50c17f8759de8d5f36c141b5c8
Author: Murray Cumming <murrayc murrayc com>
Date: Fri Apr 28 08:49:19 2017 +0200
gtkmm4: Adapt to Gnome::Gda::SqlOperatorType as enum class.
glom/base_db.cc | 6 +++---
glom/base_db_table_data.cc | 6 +++---
glom/libglom/connectionpool_backends/mysql.cc | 2 +-
glom/libglom/connectionpool_backends/postgres.cc | 2 +-
glom/libglom/connectionpool_backends/sqlite.cc | 2 +-
glom/libglom/data_structure/field.cc | 6 +++---
glom/libglom/db_utils.cc | 12 ++++++------
glom/libglom/privs.cc | 4 ++--
glom/libglom/python_embed/py_glom_record.cc | 2 +-
glom/libglom/python_embed/py_glom_relatedrecord.cc | 4 ++--
glom/libglom/report_builder.cc | 2 +-
glom/libglom/sql_utils.cc | 8 ++++----
glom/mode_data/box_data.cc | 2 +-
glom/mode_data/box_data_calendar_related.cc | 6 +++---
glom/mode_data/box_data_portal.cc | 2 +-
glom/mode_design/dialog_database_preferences.cc | 6 +++---
glom/mode_design/fields/box_db_table_definition.cc | 2 +-
17 files changed, 37 insertions(+), 37 deletions(-)
---
diff --git a/glom/base_db.cc b/glom/base_db.cc
index d69ffd4..a48aedd 100644
--- a/glom/base_db.cc
+++ b/glom/base_db.cc
@@ -1084,7 +1084,7 @@ bool Base_DB::get_field_value_is_unique(const Glib::ustring& table_name, const s
builder->select_add_field(field->get_name(), table_name_used);
builder->select_add_target(table_name_used);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(field->get_name(), table_name_used),
builder->add_expr(value)));
@@ -1164,7 +1164,7 @@ bool Base_DB::get_primary_key_is_in_foundset(const FoundSet& found_set, const Gn
auto builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SqlStatement::Type::SELECT);
builder->select_add_target(found_set.m_table_name);
- const auto eq_id = builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ const auto eq_id = builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(primary_key->get_name(), found_set.m_table_name),
builder->add_expr_as_value(primary_key_value));
guint cond_id = 0;
@@ -1174,7 +1174,7 @@ bool Base_DB::get_primary_key_is_in_foundset(const FoundSet& found_set, const Gn
}
else
{
- cond_id = builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_AND,
+ cond_id = builder->add_cond(Gnome::Gda::SqlOperatorType::AND,
builder->import_expression(found_set.m_where_clause),
eq_id);
}
diff --git a/glom/base_db_table_data.cc b/glom/base_db_table_data.cc
index 20940de..594f6a3 100644
--- a/glom/base_db_table_data.cc
+++ b/glom/base_db_table_data.cc
@@ -335,7 +335,7 @@ bool Base_DB_Table_Data::add_related_record_for_field(const std::shared_ptr<cons
builder_update->set_table(target_table);
builder_update->add_field_value_as_value(relationship->get_from_field(), primary_key_value);
builder_update->set_where(
- builder_update->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder_update->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder_update->add_field_id(parent_primary_key_field->get_name(), target_table),
builder_update->add_expr(parent_primary_key_value)) );
@@ -391,7 +391,7 @@ bool Base_DB_Table_Data::record_delete(const Gnome::Gda::Value& primary_key_valu
Gnome::Gda::SqlBuilder::create(Gnome::Gda::SqlStatement::Type::DELETE);
builder->set_table(m_table_name);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(field_primary_key->get_name(), m_table_name),
builder->add_expr(primary_key_value)) );
return DbUtils::query_execute(builder);
@@ -429,7 +429,7 @@ bool Base_DB_Table_Data::get_related_record_exists(const std::shared_ptr<const R
builder->select_add_field(to_field, related_table);
builder->select_add_target(related_table);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(to_field, related_table),
builder->add_expr(key_value)));
diff --git a/glom/libglom/connectionpool_backends/mysql.cc b/glom/libglom/connectionpool_backends/mysql.cc
index f7c57ea..9e14ea6 100644
--- a/glom/libglom/connectionpool_backends/mysql.cc
+++ b/glom/libglom/connectionpool_backends/mysql.cc
@@ -842,7 +842,7 @@ bool MySQL::supports_remote_access() const
Gnome::Gda::SqlOperatorType MySQL::get_string_find_operator() const
{
- return Gnome::Gda::SQL_OPERATOR_TYPE_LIKE;
+ return Gnome::Gda::SqlOperatorType::LIKE;
}
const char* MySQL::get_public_schema_name() const
diff --git a/glom/libglom/connectionpool_backends/postgres.cc
b/glom/libglom/connectionpool_backends/postgres.cc
index a0ecb4c..5cf4bc3 100644
--- a/glom/libglom/connectionpool_backends/postgres.cc
+++ b/glom/libglom/connectionpool_backends/postgres.cc
@@ -948,7 +948,7 @@ Gnome::Gda::SqlOperatorType Postgres::get_string_find_operator() const
{
// ILIKE is a PostgreSQL extension for locale-dependent case-insensitive matches.
//See http://developer.postgresql.org/pgdocs/postgres/functions-matching.html
- return Gnome::Gda::SQL_OPERATOR_TYPE_ILIKE;
+ return Gnome::Gda::SqlOperatorType::ILIKE;
}
const char* Postgres::get_public_schema_name() const
diff --git a/glom/libglom/connectionpool_backends/sqlite.cc b/glom/libglom/connectionpool_backends/sqlite.cc
index 8d57164..accc77f 100644
--- a/glom/libglom/connectionpool_backends/sqlite.cc
+++ b/glom/libglom/connectionpool_backends/sqlite.cc
@@ -429,7 +429,7 @@ bool Sqlite::supports_remote_access() const
Gnome::Gda::SqlOperatorType Sqlite::get_string_find_operator() const
{
- return Gnome::Gda::SQL_OPERATOR_TYPE_LIKE;
+ return Gnome::Gda::SqlOperatorType::LIKE;
}
const char* Sqlite::get_public_schema_name() const
diff --git a/glom/libglom/data_structure/field.cc b/glom/libglom/data_structure/field.cc
index 9f5a455..0005daa 100644
--- a/glom/libglom/data_structure/field.cc
+++ b/glom/libglom/data_structure/field.cc
@@ -427,7 +427,7 @@ Gnome::Gda::SqlOperatorType Field::sql_find_operator() const
if(connection_pool && connection_pool->get_backend())
return connection_pool->get_string_find_operator();
else
- return Gnome::Gda::SQL_OPERATOR_TYPE_LIKE; // Default
+ return Gnome::Gda::SqlOperatorType::LIKE; // Default
break;
}
case(glom_field_type::DATE):
@@ -436,11 +436,11 @@ Gnome::Gda::SqlOperatorType Field::sql_find_operator() const
case(glom_field_type::BOOLEAN):
default:
{
- return Gnome::Gda::SQL_OPERATOR_TYPE_EQ;
+ return Gnome::Gda::SqlOperatorType::EQ;
}
}
- return Gnome::Gda::SQL_OPERATOR_TYPE_EQ;
+ return Gnome::Gda::SqlOperatorType::EQ;
}
diff --git a/glom/libglom/db_utils.cc b/glom/libglom/db_utils.cc
index 1b83f95..4556104 100644
--- a/glom/libglom/db_utils.cc
+++ b/glom/libglom/db_utils.cc
@@ -457,7 +457,7 @@ void set_database_preferences(const std::shared_ptr<Document>& document, const S
{
builder->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_ORG_LOGO, prefs.m_org_logo);
}
- builder->set_where(builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->set_where(builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(GLOM_STANDARD_TABLE_PREFS_FIELD_ID,
GLOM_STANDARD_TABLE_PREFS_TABLE_NAME),
builder->add_expr(1)));
const auto test = query_execute(builder);
@@ -498,7 +498,7 @@ bool add_standard_tables(const std::shared_ptr<const Document>& document)
auto builderUpdate = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SqlStatement::Type::UPDATE);
builderUpdate->set_table(GLOM_STANDARD_TABLE_PREFS_TABLE_NAME);
builderUpdate->add_field_value(GLOM_STANDARD_TABLE_PREFS_FIELD_NAME, system_name);
- builderUpdate->set_where(builderUpdate->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builderUpdate->set_where(builderUpdate->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builderUpdate->add_field_id(GLOM_STANDARD_TABLE_PREFS_FIELD_ID, GLOM_STANDARD_TABLE_PREFS_TABLE_NAME),
builderUpdate->add_expr(1)));
if(!query_execute(builderUpdate))
@@ -1375,11 +1375,11 @@ static void builder_set_where_autoincrement(const Glib::RefPtr<Gnome::Gda::SqlBu
return;
}
- builder->set_where(builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_AND,
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->set_where(builder->add_cond(Gnome::Gda::SqlOperatorType::AND,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_TABLE_NAME,
GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
builder->add_expr(table_name)),
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_FIELD_NAME,
GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
builder->add_expr(field_name))));
}
@@ -2277,7 +2277,7 @@ Gnome::Gda::Value get_lookup_value(const std::shared_ptr<const Document>& docume
builder->select_add_field(source_field->get_name(), target_table );
builder->select_add_target(target_table );
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(to_key_field->get_name(), target_table),
builder->add_expr(value_to_key_field)));
diff --git a/glom/libglom/privs.cc b/glom/libglom/privs.cc
index 7771250..928fbe5 100644
--- a/glom/libglom/privs.cc
+++ b/glom/libglom/privs.cc
@@ -139,7 +139,7 @@ Privs::type_vec_strings Privs::get_database_users(const Glib::ustring& group_nam
builderGroup->select_add_field("grolist", "pg_group");
builderGroup->select_add_target("pg_group");
builderGroup->set_where(
- builderGroup->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builderGroup->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builderGroup->add_field_id("groname", "pg_group"),
builderGroup->add_expr(group_name)));
//TODO: Show SQL.
@@ -165,7 +165,7 @@ Privs::type_vec_strings Privs::get_database_users(const Glib::ustring& group_nam
builderUser->select_add_field("usename", "pg_user");
builderUser->select_add_target("pg_user");
builderUser->set_where(
- builderUser->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builderUser->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builderUser->add_field_id("usesysid", "pg_user"),
builderUser->add_expr(userId)));
auto data_model_user = DbUtils::query_execute_select(builderUser);
diff --git a/glom/libglom/python_embed/py_glom_record.cc b/glom/libglom/python_embed/py_glom_record.cc
index 0f16448..1d54602 100644
--- a/glom/libglom/python_embed/py_glom_record.cc
+++ b/glom/libglom/python_embed/py_glom_record.cc
@@ -179,7 +179,7 @@ void PyGlomRecord::setitem(const boost::python::object& key, const boost::python
builder->set_table(m_table_name);
builder->add_field_value_as_value(field->get_name(), field_value);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(m_key_field->get_name(), m_table_name),
builder->add_expr(m_key_field_value)));
diff --git a/glom/libglom/python_embed/py_glom_relatedrecord.cc
b/glom/libglom/python_embed/py_glom_relatedrecord.cc
index 48ffb69..80a2376 100644
--- a/glom/libglom/python_embed/py_glom_relatedrecord.cc
+++ b/glom/libglom/python_embed/py_glom_relatedrecord.cc
@@ -102,7 +102,7 @@ boost::python::object PyGlomRelatedRecord::getitem(const boost::python::object&
builder->select_add_field(field_name, related_table);
builder->select_add_target(related_table);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(related_key_name, related_table),
builder->add_expr(m_from_key_value)));
@@ -194,7 +194,7 @@ boost::python::object PyGlomRelatedRecord::generic_aggregate(const std::string&
builder->select_add_target(related_table);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(related_key_name, related_table),
builder->add_expr(m_from_key_value)));
diff --git a/glom/libglom/report_builder.cc b/glom/libglom/report_builder.cc
index 4a660e3..ea56740 100644
--- a/glom/libglom/report_builder.cc
+++ b/glom/libglom/report_builder.cc
@@ -263,7 +263,7 @@ bool ReportBuilder::report_build_groupby(const FoundSet& found_set_parent, xmlpp
if(!found_set_parent.m_where_clause.empty())
{
where_clause = SqlUtils::build_combined_where_expression(where_clause,
found_set_parent.m_where_clause,
- Gnome::Gda::SQL_OPERATOR_TYPE_AND);
+ Gnome::Gda::SqlOperatorType::AND);
}
FoundSet found_set_records = found_set_parent;
diff --git a/glom/libglom/sql_utils.cc b/glom/libglom/sql_utils.cc
index cdd2ed8..68f134c 100644
--- a/glom/libglom/sql_utils.cc
+++ b/glom/libglom/sql_utils.cc
@@ -149,7 +149,7 @@ static void builder_add_join(const Glib::RefPtr<Gnome::Gda::SqlBuilder>& builder
to_target_id,
Gnome::Gda::SQL_SELECT_JOIN_LEFT,
builder->add_cond(
- Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(relationship->get_from_field(), relationship->get_from_table()),
builder->add_field_id(relationship->get_to_field(), alias_name)));
}
@@ -166,7 +166,7 @@ static void builder_add_join(const Glib::RefPtr<Gnome::Gda::SqlBuilder>& builder
to_target_id,
Gnome::Gda::SQL_SELECT_JOIN_LEFT,
builder->add_cond(
- Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(related_relationship->get_from_field(),
parent_relationship.get_sql_join_alias_name()),
builder->add_field_id(related_relationship->get_to_field(), alias_name) ) );
}
@@ -322,7 +322,7 @@ Gnome::Gda::SqlExpr build_simple_where_expression(const Glib::ustring& table_nam
auto builder = Gnome::Gda::SqlBuilder::create(Gnome::Gda::SqlStatement::Type::SELECT);
builder->select_add_target(table_name); //This might not be necessary.
- const Gnome::Gda::SqlBuilder::Id id = builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ const Gnome::Gda::SqlBuilder::Id id = builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(key_field->get_name(),
table_name),
builder->add_expr(key_value));
builder->set_where(id); //This might not be necessary.
@@ -500,7 +500,7 @@ Gnome::Gda::SqlExpr get_find_where_clause_quick(const std::shared_ptr<const Docu
if(previous_id)
{
- const guint or_id = builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_OR,
+ const guint or_id = builder->add_cond(Gnome::Gda::SqlOperatorType::OR,
previous_id, eq_id);
previous_id = or_id;
}
diff --git a/glom/mode_data/box_data.cc b/glom/mode_data/box_data.cc
index 4f31e08..1be730a 100644
--- a/glom/mode_data/box_data.cc
+++ b/glom/mode_data/box_data.cc
@@ -124,7 +124,7 @@ Gnome::Gda::SqlExpr Box_Data::get_find_where_clause() const
//And with previous condition, if any:
if(where_cond_id)
{
- where_cond_id = builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_AND,
+ where_cond_id = builder->add_cond(Gnome::Gda::SqlOperatorType::AND,
where_cond_id,
cond_id);
}
diff --git a/glom/mode_data/box_data_calendar_related.cc b/glom/mode_data/box_data_calendar_related.cc
index 9f21d43..4d247f3 100644
--- a/glom/mode_data/box_data_calendar_related.cc
+++ b/glom/mode_data/box_data_calendar_related.cc
@@ -150,7 +150,7 @@ bool Box_Data_Calendar_Related::fill_from_database()
auto builder =
Gnome::Gda::SqlBuilder::create(Gnome::Gda::SqlStatement::Type::SELECT);
- const auto cond = builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_BETWEEN,
+ const auto cond = builder->add_cond(Gnome::Gda::SqlOperatorType::BETWEEN,
builder->add_field_id(date_field->get_name(), m_found_set.m_table_name),
builder->add_expr_as_value(date_start_value),
builder->add_expr_as_value(date_end_value));
@@ -166,7 +166,7 @@ bool Box_Data_Calendar_Related::fill_from_database()
{
where_clause = SqlUtils::build_combined_where_expression(
m_found_set.m_where_clause, extra_where_clause,
- Gnome::Gda::SQL_OPERATOR_TYPE_AND);
+ Gnome::Gda::SqlOperatorType::AND);
}
//Do one SQL query for the whole month and store the cached values here:
@@ -267,7 +267,7 @@ void Box_Data_Calendar_Related::on_record_added(const Gnome::Gda::Value& primary
builder->set_table(target_table);
builder->add_field_value_as_value(m_key_field->get_name(), m_key_value);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(field_primary_key->get_name(), target_table),
builder->add_expr_as_value(primary_key_value)));
diff --git a/glom/mode_data/box_data_portal.cc b/glom/mode_data/box_data_portal.cc
index c56395a..dd5a95e 100644
--- a/glom/mode_data/box_data_portal.cc
+++ b/glom/mode_data/box_data_portal.cc
@@ -81,7 +81,7 @@ void Box_Data_Portal::make_record_related(const Gnome::Gda::Value& related_recor
builder->set_table(target_table);
builder->add_field_value_as_value(m_key_field->get_name(), m_key_value);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(field_primary_key->get_name(), target_table),
builder->add_expr_as_value(related_record_primary_key_value)));
diff --git a/glom/mode_design/dialog_database_preferences.cc b/glom/mode_design/dialog_database_preferences.cc
index a5c0873..dd1e2c4 100644
--- a/glom/mode_design/dialog_database_preferences.cc
+++ b/glom/mode_design/dialog_database_preferences.cc
@@ -119,11 +119,11 @@ void Dialog_Database_Preferences::on_treeview_cell_edited_next_value(const Glib:
builder->set_table(GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME);
builder->add_field_value_as_value(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_NEXT_VALUE, next_value);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_AND,
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::AND,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_TABLE_NAME,
GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
builder->add_expr(table_name)),
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_EQ,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::EQ,
builder->add_field_id(GLOM_STANDARD_TABLE_AUTOINCREMENTS_FIELD_FIELD_NAME,
GLOM_STANDARD_TABLE_AUTOINCREMENTS_TABLE_NAME),
builder->add_expr(field_name))));
diff --git a/glom/mode_design/fields/box_db_table_definition.cc
b/glom/mode_design/fields/box_db_table_definition.cc
index d728813..485e2ff 100644
--- a/glom/mode_design/fields/box_db_table_definition.cc
+++ b/glom/mode_design/fields/box_db_table_definition.cc
@@ -697,7 +697,7 @@ bool Box_DB_Table_Definition::field_has_null_values(const std::shared_ptr<const
builder->select_add_field(field->get_name(), m_table_name);
builder->select_add_target(m_table_name);
builder->set_where(
- builder->add_cond(Gnome::Gda::SQL_OPERATOR_TYPE_ISNULL,
+ builder->add_cond(Gnome::Gda::SqlOperatorType::ISNULL,
builder->add_field_id(field->get_name(), m_table_name)));
long null_count = 0;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]