LINUX.ORG.RU

Сообщения djnoob

 

Scala, anorm и sql relations

Форум — Development

Привет всем!

Бывалые скалисты, подскажите как реализовываются связи many-to-many при использовании anorm.

Есть три таблицы: users, permissions и user_permissions. user относится к permissions как многие ко многим.

Есть отдельные парсеры для маппинга данных в объекты User и Permission. Вопрос, как реализовать anorm-парсер для объекта UserWithPermissions?

Пока имею конструкцию следующего вида.

case class UserWithPermissions(
  id: Int,
  username: String,
  email: String,
  uid: Option[String],
  password: String,
  first_name: Option[String],
  last_name: Option[String],
  avatar: Option[String],
  created: DateTime = DateTime.now,
  last_visited: Option[DateTime],
  is_activated: Boolean = false,
  is_admin: Boolean = false,
  permissions: List[Permission]
)

trait UserWithPermissionsSerialize {
  val writes = {
    get[Int]("id") ~
    get[String]("username") ~
    get[String]("email") ~
    get[Option[String]]("uid") ~
    get[String]("password") ~
    get[Option[String]]("first_name") ~
    get[Option[String]]("last_name") ~
    get[Option[String]]("avatar") ~
    get[DateTime]("created") ~
    get[Option[DateTime]]("last_visited") ~
    get[Boolean]("is_activated") ~
    get[Boolean]("is_admin") ~
    get[List[Permission]]("permissions") map {
      case id ~ username ~ email ~ uid ~ password ~ first_name ~ last_name ~ avatar ~ created ~ last_visited ~ is_activated ~ is_admin ~ permissions => UserWithPermissions(
        id,
        username,
        email,
        uid,
        password,
        first_name,
        last_name,
        avatar,
        created,
        last_visited,
        is_activated,
        is_admin,
        permissions
      )
    }
  }
}

object UserWithPermissions extends UserWithPermissionsSerialize

Но такая конструкция не работает. Я так понимаю, надо как-то подставить парсер для permissions в парсер UserWithPermission. Но как - не знаю... Имел ли кто-нибудь аналогичный опыт работы с anorm и межобъектными связями?

 , ,

djnoob
()

Помогите с запросом

Форум — Development

Привет, ЛОР!

Помогите с запросом. Есть записи в таблице вида:

some_id | some_flag
--------------------
10      | 0
10      | 1
11      | 0
11      | 0
12      | 0
12      | 0
13      | 1
13      | 0

Как можно выбрать ТОЛЬКО те some_id для которых нет ни одного some_flag = 1? В данном случае, это только 11 и 12. Вроде бы простая задача, а сообразить не получается(.

 , , ,

djnoob
()

Подскажите по схеме БД

Форум — Development

Всем привет!

В SQL новичек. Подскажите, как луче в MySQL организовать структуру для данных.

Есть таблица задач - tasks. Нужно сделать, чтобы задачи могли ссылаться друг на друга (связь многие-ко-многим). Можно сделать просто - создать доп.таблицу task_relations, где хранить id задачь:

CREATE TABLE IF NOT EXISTS `tasks` (
	   `id` INTEGER NOT NULL AUTO_INCREMENT,
	   `title` VARCHAR(250) NOT NULL,
           ...
   	   PRIMARY KEY (`id`)
) ENGINE='InnoDB';


CREATE TABLE IF NOT EXISTS `task_relations` (
	   `from_task_id` INTEGER NOT NULL,
           `to_task_id` INTEGER NOT NULL,
) ENGINE='InnoDB';

Но как организовать здесь внешний ключ - непонятно. Поможите чем можите, plz.

 , ,

djnoob
()

PostgreSQL. Помогите с запросом.

Форум — Development

Всем привет.

В посгресе новичек. Составил такой запрос:

SELECT
  jt.tid, 1 AS some_column, jt.status, 1000 AS priority
FROM
  some_table AS st
INNER JOIN 
  joined_table AS jt 
ON 
  jt.some_table_id = st.id 
AND 
jt.status IN ('st1','st2','st3','st4')
WHERE ...

Вопрос. Как, в зависимости от jt.status можно поменять константу в priority?

Например, когда статус = st1, priority был 1000, для st2 - 900, для st3 = 800.

 ,

djnoob
()

Actions в play 2.6

Форум — Development

Всем привет.

В Play framework 2.6 сильно перелопатили Action Compositions. Не могу врубиться, как теперь корректно создать ActionBuilder. Вот, для примера хочу создать «пустой» ActionBuilder:

AuthAction.scala

package actions

import com.google.inject.{Inject, Singleton}
import scala.concurrent.{Future, ExecutionContext}
import play.api.mvc._
import play.api.mvc.Results._

trait AuthActionT {
  def authenticateAction: ActionBuilder[AuthenticatedRequest, AnyContent]
}

@Singleton
class AuthAction @Inject() (p: BodyParsers.Default)(implicit ec: ExecutionContext) extends AuthActionT {

  def authenticateAction: ActionBuilder[AuthenticatedRequest, AnyContent] = {
    new ActionBuilder[AuthenticatedRequest, AnyContent] {
      def invokeBlock[A](request: Request[A], block: AuthenticatedRequest[A] => Future[Result]): Future[Result] = {
        if (true) {
          block(new AuthenticatedRequest("", request))
        } else {
          Future.successful(Unauthorized)
        }
      }
    }
  }
}

AuthenticatedRequest.scala

package actions

import play.api.mvc.{Request, WrappedRequest}

class AuthenticatedRequest[A](val a: String, val request: Request[A]) extends WrappedRequest[A](request)

Но это не работает - куча отладочного НЕХ'а.

Кто-нибудь может поделиться примером корректно работающего actionBuilder'a для Play 2.6.x или подсказть, что не так с кодом?

Заранее спасибо.

 ,

djnoob
()

PostgreSQL и агрегация данных

Форум — Web-development

Приветствую, ЛОР!

Помогите, пжлста, составить запрос.

Есть таблица, вида:

id: pk
some_id: integer
clicks: integer
...

Нужно посчитать для каждого some_id (т.е. сгруппировать по some_id) сумму первых 10 clicks если количество clicks для some_id > 10;

Сложная для меня агрегация получается, уже битый час сижу, не могу допетрить...

ПоможИте, чем можИте, бывалые SQL-щики. С меня лучи бобра.

 , , ,

djnoob
()

PostgreSQL помогите с запросом

Форум — Development

Всем привет.

Хочу найти все id записей у кторых в VARCHAR-поле есть длинные слова. Для этого, как я полагаю, нужно посплитить строку по пробелам, пробежаться по получившемуся массиву и для каждого элемента проверить длину слова. Но понятия не имею как такой фокус провернуть на sql.

 id    | integer
 mystr | character varying(255) | not null
 ...

Может кто сталкивался с подобной задаче, подскажите, плиз.

 , , ,

djnoob
()

Perl, fork limit

Форум — Development

Привет, ЛОР!

Есть многопоточный код на Perl, который использует встроеную систему форков. Критически важные функции - форкаются в отдельный процесс и там исполняются. Все бы хорошо, да только слишком много их (процессов) создается. В итоге их становится на порядок больше чем ядер CPU. Хотелось бы как-то ограничить количество форков. Реализовать некую очередь, которая бы следила, что в каждый момент времени работало только N форков.

Интересуют идеи как такое можно сделать с помощью стандартной библиотеки перла, не прибегая к сторонним модулям на cpan (типа Parallel::ForkManager и проч.) и тредам (ибо глюкодром).

Any idea :) ?

 , , , ,

djnoob
()

Perl, Mojolicious и тесты

Форум — Web-development

Привет всем!

Только начал осваивать тестирование в mojo. Наткнулся на нетривиальную для меня проблему.

Хочу протестировать некий контроллер, который обрабатывает post-route. Однако данный route доступен только авторизованному пользователю. Но как в тестах можно получить «авторизованного» юзера, чтоб в дальнейшем какбы от него слать запросы? Там же куки, сесcии, все дела.

Кто как обходит данную проблему? Вообще есть какие-нибудь идеи на этот счет?

 , , , ,

djnoob
()

Помогите составить SQL-запрос

Форум — Development

Всем привет!

Поможите чем можите sql-нубу(!

Есть следующая таблица products (к схеме не придираться):

id INTEGER,
product_name varchar(100),
date_sale timestamp

В таблице могут быть данные вида:

1 Яблоко 2015-01-01,
2 Арбуз 2010-04-20,
...
2345 Яблоко 2017-01-10
и т.д

Требуется отобрать последние пять продаж товара по каждому из товаров (product_name). Проводить декомпозицию таблицы нельзя (в причины не буду вдаваться).

Как составть такой запрос?

P.S. Заранее спасибо.

 , , ,

djnoob
()

Помощь с SQL-запросом

Форум — Web-development

Всем привет!

Только лишь начал изучать SQL. Столкнулся с задачей, которую затрудняюсь решить. Просьба помочь, кто чем сможет.

Суть задачи. Есть таблица: persons

id PK,
name: VARCHAR(50),
salary: INTEGER,
dt: DATETIME

В ней могут содержаться данные, вида:

1 Иван      15000 2017-08-01
2 Василий   20000 2017-08-08
3 Александр 5000  2016-01-01
4 Иван      3000  2015-05-20
5 Василий   40000 2016-07-13

Нужно составить такой запрос, чтобы в выборке были данные с максимальной salary для каждого из name, т.е. вот так:

1 Иван      15000 2017-08-01
5 Василий   40000 2016-07-13
3 Александр 5000  2016-01-01

Заранее спасибо.

 , ,

djnoob
()

Вопрос по postgresql

Форум — Development

Вопрос к знатокам постгреса).

Есть некоторое представление запроса. Как можно заменить его на материализовнное представление с тем же именем, не удаляя обычную view?

 , ,

djnoob
()

MongoDB + странный запрос

Форум — Web-development

Всем привет.

Есть коллекция 'user' следующего содержания:

{_id: ..., gender: 'male', name: 'Ololo'}
...
{_id: ..., gender: 'female', name: 'Lololo'}

Как средствами минги сформировать запрос, чтобы на выходе получилось так (сгруппировать документы по полю 'gender'):

[
  male: [
    {_id: ....},
    ...
  ],
  female: [{}]
]

Вообще, возможно ли такое?

 , ,

djnoob
()

Django. SQL. Странный запрос.

Форум — Web-development

Всем привет.

Есть модель, имеющая связь многие ко многим к себе самой. Нужно выбрать все объекты у которых есть связанные объекты (поле many to many не пустое). Как такое реализовать (по возможности через джанговскую ORM)?

class Users:
...
friends=models.ManyToManyField('self')

 , ,

djnoob
()

Scala. Сконвертировать List[Map...] в Map.

Форум — Development

Всем привет!

Подскажите, пожалуйста, как из структуры List[Map[Int -> Any]] сделать просто Map[Int -> Any] ?

 ,

djnoob
()

Docker compose - b'oci runtime error: container_linux.go:247

Форум — Development

Приветствую.

Пытаюсь запустить docker-контейнеры посредством docker-compose. Запускаются все, кроме одного. При попытке запустить этот контейнер получаю ошибку:

 b'oci runtime error: container_linux.go:247: starting container process caused "exec: \\"bin/run_proj\\": permission denied"'

Часть файла docker-compose.yml:

my_container:
  image: my.domain/my_image_name
  expose:
    - 8080
  volumes:
    - ./project/:/app
    - ./project/bin/:/app/bin
    - ./project/bin/run_proj:/app/bin/run_proj
  working_dir: /app
  command: bin/run_proj
  links:
    - mysql:mysql
  restart: always

Файл этот (bin/run_proj) существет и для него выставлены права на исполнение (chmod +x). Поэтому непонятно, почему permission denied.

Гугл ничего внятного не дает.

Сталкивался ли кто-нибудь с этим? Есть ли какие-инбудь догадки, в чем может быть проблема?

 , ,

djnoob
()

Scala (вложенаня итерация по List)

Форум — Development

Всем привет!

В scala новичек. Подскажите, пожалуйста, как можно проитерироваться по следующей стркутуре:

val a = List( Map( my_field => List(1,2,3,4,5) ) )

Штука типа этой не работает:

for {
  f <- a,
  mf <- f.get("my_field")
} yield {
  for {
    i <- mf
  } yield {
    println(i)
  }
}

Получаю ошибку: value map is not a member of java.io.Serializable

А нужно получить:

1
2
3
4
5

 

djnoob
()

Помогите с алгоритмом округления

Форум — Development

Если разряд единиц целого числа < 5 - округлить до 5, если > 5 - округлить до 10. Например: 13->15, 137->140, 579->580, 544->545, 11->15.

Язык не важен - важен сам алгоритм.

Заранее спасибо.

 ,

djnoob
()

Perl и мультизадачность

Форум — Development

Вопрос к бывалым перловикам, которые не гнушаются использовать fork(). Допустим есть несколько функций (myfunc1, myfunc2 и myfunc3). Каждая из этих функций должна работать в отдельном процессе. Только после того, когда отработают все функции - программа должна завершиться. Но у меня она остается висеть и вообще, видимо я что-то делаю не так.

...
use POSIX ":sys_wait_h";

$SIG{CHLD} = sub {1 while( waitpid(-1, WHONANG) > 0 )};

sub myfunc1 {print "Hello 1\n";}

sub myfunc2 {print "Hello 2\n";}

sub myfunc3 {print "Hello 3\n";}

for ((\&myfunc1, \&myfunc2, \&myfunc3)) {
	if (my $pid = fork()) {
 		$_->();
 		waitpid($pid, 0);
 	}
}

print "THE END\n\n";

Все висит - ничего не помагает. Подскажите, как поправить код, чтобы оно заработало как надо?

 , , ,

djnoob
()

MySQL и нетривиальная сортировка

Форум — Development

Всем привет!

Только начал изучать SQL. Столкнулся с нетривиальной задачей.

Есть таблица 'user' в которой есть стобец birthday (день рождения пользователя). Требуется получить выборку всех пользователей, отсортированную по столбцу birthday таким образом, чтобы выше находились те, у которых день рождения ближе всего к текущей дате.

Вопрос номер один. Это вообще возможно сделать посредством самой базы, не прибегая к средствая ЯП?

Если ответ утвердительный, тогда вот второй вопрос: как это сделать? Подскажите запрос, пожалуйста. Сам пока пришел вот к такому решению (взятие разницы):

SELECT id,name,birthday, DATEDIFF(`birthday`, CURDATE()) AS diff  FROM `user` order by CASE WHEN diff < 0 THEN 1 ELSE 0 END, diff;

Не это работает не так как надо.

Заранее спасибо.

 , , , ,

djnoob
()

RSS подписка на новые темы