FSN#38916 FACFAC Superuser alle tabellen kunnen bekijken beter als geen primary key

svn path=/Website/branches/v2016.3/; revision=32554
This commit is contained in:
Jos Groot Lipman
2017-01-25 20:44:42 +00:00
parent c6a91cc1f8
commit bb353065c4
4 changed files with 63 additions and 23 deletions

View File

@@ -1247,9 +1247,12 @@ api2 = {
GENERIC_ONLY_WITH_AUTFUNCTION;
model.REST_GET = generic_REST_GET(model, gparams);
model.REST_POST = generic_REST_POST(model, gparams);
model.REST_PUT = generic_REST_PUT(model, gparams);
model.REST_DELETE = generic_REST_DELETE(model, gparams);
if (model.primary)
{
model.REST_POST = generic_REST_POST(model, gparams);
model.REST_PUT = generic_REST_PUT(model, gparams);
model.REST_DELETE = generic_REST_DELETE(model, gparams);
}
},
merge_disc_params_model: function(deze, template_model)
{
@@ -1338,7 +1341,14 @@ function generic_REST_GET(model, gparams)
}
if (!orderbys.length)
orderbys.push(model.fields.name?model.fields.name.dbs:model.fields.id.dbs);
{
if ("name" in model.fields)
orderbys.push(model.fields.name.dbs);
else if ("id" in model.fields)
orderbys.push(model.fields.id.dbs);
else
orderbys.push(1); // FAC_VERSION heeft niets van dit alles
}
sql += " ORDER BY " + orderbys.join(", "); // TODO: Altijd goed met includes?

View File

@@ -26,6 +26,8 @@ function model_generic_template()
function _findseq(primary)
{
if (!primary)
return null;
var seq_name = primary.substr(0,3) + "_S_" + primary;
var seq = null;
var sql = "SELECT sequence_name"
@@ -51,28 +53,40 @@ function model_generic(table, autfunction)
model.record_name = table.substring(0,1).toUpperCase() + table.substring(1);
model.records_name = model.record_name + "s";
var sql = "SELECT LOWER(cols.column_name) column_name, cols.position, cons.status, cons.owner"
+ " FROM user_constraints cons, user_cons_columns cols"
+ " WHERE cols.table_name = " + safe.quoted_sql_upper(table)
var sql = "SELECT LOWER(cols.column_name) column_name, cols.position, cons.status, cons.owner, utc.data_type"
+ " FROM user_constraints cons, user_cons_columns cols, user_tab_columns utc"
+ " WHERE cons.table_name = " + safe.quoted_sql_upper(table)
+ " AND cols.table_name = cons.table_name"
+ " AND cons.constraint_type = 'P'"
+ " AND cons.constraint_name = cols.constraint_name"
+ " AND cons.owner = cols.owner"
+ " AND utc.table_name = cols.table_name"
+ " AND utc.column_name = cols.column_name"
+ " ORDER BY cols.table_name, cols.position";
var oRs = Oracle.Execute(sql);
if (oRs.Eof)
{
abort_with_warning("Unable to determine primary key for table {0}".format(table));
//abort_with_warning("Unable to determine primary key for table {0}".format(table));
model.primary = null;
}
model.primary = oRs("column_name").Value;
oRs.MoveNext();
if (!oRs.Eof)
else
{
abort_with_warning("Composite primary key not supported for table {0}".format(table));
model.primary = oRs("column_name").Value;
var data_type = oRs("data_type").Value;
if (data_type != 'NUMBER')
{
//abort_with_warning("Only NUMBER primary key supported, not {0} ({1})".format(data_type, model.primary));
model.primary = null;
}
oRs.MoveNext();
if (!oRs.Eof)
{
//abort_with_warning("Composite primary key not supported for table {0}".format(table));
model.primary = null;
}
}
oRs.Close();
var sql = "SELECT num_rows, last_analyzed"
+ " FROM user_tables"
+ " WHERE table_name = " + safe.quoted_sql_upper(table);
@@ -157,6 +171,7 @@ function model_generic(table, autfunction)
field.dbs == model.table + "_aanmaak")
field.filter = "range";
break;
case "CHAR":
case "VARCHAR2":
field.typ = 'varchar';
break;

View File

@@ -27,15 +27,28 @@
};
params.search = {};
if (model.fields["id"].seq)
if ("id" in model.fields)
{
var sql = "SELECT last_number currval"
+ " FROM all_sequences"
+ " WHERE sequence_name = " + safe.quoted_sql_upper(model.fields["id"].seq);
var oRs = Oracle.Execute(sql)
var curval = oRs(0).Value;
oRs.Close();
params.search.labels = [{ "lbl": "Sequence", "txt" : "{0} (next: {1})".format(model.fields["id"].seq, curval)}];
params.search.labels = [{ "lbl": "Primary key", "txt" : "{0}".format(model.fields["id"].dbs)}];
if (model.fields["id"].seq)
{
var sql = "SELECT last_number currval"
+ " FROM all_sequences"
+ " WHERE sequence_name = " + safe.quoted_sql_upper(model.fields["id"].seq);
var oRs = Oracle.Execute(sql)
var curval = oRs(0).Value;
oRs.Close();
params.search.labels.push({ "lbl": "Sequence", "txt" : "{0} (next: {1})".format(model.fields["id"].seq, curval)});
}
}
else // geen id. Dan kun je niet doorklikken. Toon dan maar alle kolommen
{
params.search.labels = [{ "lbl": "Primary key", "txt" : "No single NUMBER primary key detected. Record clicking not available."}];
params.list = { columns : [] };
for (var fld in model.fields)
{
params.list.columns.push(fld);
}
}
if ("estimated_rows" in model && model.estimated_rows < S("qp_maxrows"))

View File

@@ -57,7 +57,9 @@ function scaffolding_list(model, scf_params)
}
var default_url = model.list.default_url;
if (!default_url && ("show" in model ||"show" in scf_params || model["REST_PUT"] || model["REST_DELETE"]))
if (!default_url &&
"id" in model.fields &&
("show" in model || "show" in scf_params || model["REST_PUT"] || model["REST_DELETE"]))
{
if (modal)
default_url = scf_params.this_fullpath + "?mode=edit" + transit + "&id=";